diff options
119 files changed, 18514 insertions, 4898 deletions
diff --git a/.gitignore b/.gitignore index 0b53c2166..f7e5c5da9 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,5 @@ oook_replace dist ishtar.egg-info .idea +*.log +example_project/ishtar diff --git a/CHANGES.md b/CHANGES.md index 9f671d7b4..0067595b4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,21 @@ Ishtar changelog ================ +0.99.0 (2017-01-10) +------------------- + +### Main features ### +- Management of treatments, treatments requests, containers, associated sources and administrative acts + +### Features ### + +- Performances improvements for tables +- Better cache key management +- Fix tests +- Shortcut menu: put research archaeological files in blue +- Finds: add thickness, point of topographic reference, MNI fields +- Explicit CSV headers + 0.98.10 (2016-11-03) -------------------- diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py index 72cb24097..0452243e2 100644 --- a/archaeological_context_records/forms.py +++ b/archaeological_context_records/forms.py @@ -66,13 +66,13 @@ class RecordSelect(TableSelect): operation__operation_code = forms.IntegerField( label=_(u"Operation's number (index by year)")) archaeological_sites = forms.IntegerField( - label=_("Archaelogical site"), + label=_("Archaeological site"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-archaeologicalsite'), associated_model=ArchaeologicalSite), validators=[valid_id(ArchaeologicalSite)]) ope_relation_types = forms.MultipleChoiceField( - label=_(u"Search within operation relations"), choices=[], + label=_(u"Search within related operations"), choices=[], widget=forms.CheckboxSelectMultiple) datings__period = forms.ChoiceField(label=_(u"Period"), choices=[]) unit = forms.ChoiceField(label=_(u"Unit type"), choices=[]) @@ -159,6 +159,7 @@ class RecordFormGeneral(ManageOldType, forms.Form): max_length=255, required=False, widget=widgets.ImageFileInput()) def __init__(self, *args, **kwargs): + # TODO: simplify operation = None if 'data' in kwargs and kwargs['data'] and \ ('operation' in kwargs['data'] or diff --git a/archaeological_context_records/ishtar_menu.py b/archaeological_context_records/ishtar_menu.py index f8e33d44b..de8a02438 100644 --- a/archaeological_context_records/ishtar_menu.py +++ b/archaeological_context_records/ishtar_menu.py @@ -52,7 +52,7 @@ MENU_SECTIONS = [ access_controls=['view_contextrecord', 'view_own_contextrecord']), MenuItem('record_source_creation', - _(u"Add"), + _(u"Creation"), model=models.ContextRecordSource, access_controls=[ 'change_contextrecord', diff --git a/archaeological_context_records/locale/django.pot b/archaeological_context_records/locale/django.pot index 283d5b050..2931bb8ee 100644 --- a/archaeological_context_records/locale/django.pot +++ b/archaeological_context_records/locale/django.pot @@ -3,15 +3,15 @@ # This file is distributed under the same license as the Ishtar package. # Étienne Loks <etienne.loks at peacefrogs net>, 2010-2015. # Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata -# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata +# Étienne Loks <etienne.loks@iggdrasil.net>, 2017. #zanata msgid "" msgstr "" -#: forms.py:47 forms.py:51 models.py:164 wizards.py:77 +#: forms.py:47 forms.py:51 models.py:175 wizards.py:77 msgid "Operation" msgstr "" -#: forms.py:59 forms.py:137 models.py:166 +#: forms.py:59 forms.py:137 models.py:177 models.py:453 msgid "ID" msgstr "" @@ -28,14 +28,14 @@ msgid "Operation's number (index by year)" msgstr "" #: forms.py:69 -msgid "Archaelogical site" +msgid "Archaeological site" msgstr "" #: forms.py:75 -msgid "Search within operation relations" +msgid "Search within related operations" msgstr "" -#: forms.py:77 forms.py:232 models.py:55 +#: forms.py:77 forms.py:233 models.py:55 msgid "Period" msgstr "" @@ -51,7 +51,7 @@ msgstr "" msgid "Search within relations" msgstr "" -#: forms.py:111 forms.py:335 views.py:88 +#: forms.py:111 forms.py:336 views.py:92 msgid "Context record search" msgstr "" @@ -63,43 +63,44 @@ msgstr "" msgid "General" msgstr "" -#: forms.py:136 models.py:131 models.py:162 +#: forms.py:136 models.py:132 models.py:173 models.py:455 msgid "Parcel" msgstr "" -#: forms.py:139 models.py:167 templates/ishtar/sheet_contextrecord.html:27 +#: forms.py:139 models.py:178 models.py:456 +#: templates/ishtar/sheet_contextrecord.html:27 msgid "Description" msgstr "" -#: forms.py:141 models.py:168 +#: forms.py:141 models.py:179 msgid "General comment" msgstr "" -#: forms.py:143 models.py:172 +#: forms.py:143 models.py:183 msgid "Length (m)" msgstr "" -#: forms.py:144 models.py:173 +#: forms.py:144 models.py:184 msgid "Width (m)" msgstr "" -#: forms.py:145 models.py:174 +#: forms.py:145 models.py:185 msgid "Thickness (m)" msgstr "" -#: forms.py:146 models.py:176 +#: forms.py:146 models.py:187 msgid "Depth (m)" msgstr "" -#: forms.py:147 models.py:184 +#: forms.py:147 models.py:195 models.py:454 msgid "Unit" msgstr "" -#: forms.py:148 models.py:186 +#: forms.py:148 models.py:197 msgid "Has furniture?" msgstr "" -#: forms.py:151 models.py:178 +#: forms.py:151 models.py:189 msgid "Location" msgstr "" @@ -114,116 +115,116 @@ msgid "" "p>" msgstr "" -#: forms.py:221 +#: forms.py:222 msgid "This ID already exists for this operation." msgstr "" -#: forms.py:227 forms.py:254 models.py:66 +#: forms.py:228 forms.py:255 models.py:66 msgid "Dating" msgstr "" -#: forms.py:233 models.py:56 +#: forms.py:234 models.py:56 msgid "Start date" msgstr "" -#: forms.py:234 models.py:57 models.py:171 +#: forms.py:235 models.py:57 models.py:182 msgid "End date" msgstr "" -#: forms.py:235 models.py:60 +#: forms.py:236 models.py:60 msgid "Quality" msgstr "" -#: forms.py:236 models.py:38 models.py:58 +#: forms.py:237 models.py:38 models.py:58 msgid "Dating type" msgstr "" -#: forms.py:263 ishtar_menu.py:29 models.py:457 +#: forms.py:264 ishtar_menu.py:29 models.py:514 msgid "Context record" msgstr "" -#: forms.py:284 +#: forms.py:285 msgid "Relations" msgstr "" -#: forms.py:288 forms.py:296 models.py:189 +#: forms.py:289 forms.py:297 models.py:200 #: templates/ishtar/sheet_contextrecord.html:39 msgid "Interpretation" msgstr "" -#: forms.py:292 +#: forms.py:293 msgid "Comments on dating" msgstr "" -#: forms.py:294 models.py:188 +#: forms.py:295 models.py:199 msgid "Filling" msgstr "" -#: forms.py:298 models.py:209 +#: forms.py:299 models.py:220 msgid "Activity" msgstr "" -#: forms.py:300 models.py:207 +#: forms.py:301 models.py:218 msgid "Identification" msgstr "" -#: forms.py:302 models.py:192 +#: forms.py:303 models.py:203 msgid "TAQ" msgstr "" -#: forms.py:303 models.py:196 +#: forms.py:304 models.py:207 msgid "Estimated TAQ" msgstr "" -#: forms.py:305 models.py:199 +#: forms.py:306 models.py:210 msgid "TPQ" msgstr "" -#: forms.py:306 models.py:203 +#: forms.py:307 models.py:214 msgid "Estimated TPQ" msgstr "" -#: forms.py:321 +#: forms.py:322 msgid "Operation search" msgstr "" -#: forms.py:323 +#: forms.py:324 msgid "You should select an operation." msgstr "" -#: forms.py:328 +#: forms.py:329 msgid "Would you like to delete this context record?" msgstr "" -#: forms.py:337 +#: forms.py:338 msgid "You should select a context record." msgstr "" -#: forms.py:342 +#: forms.py:343 msgid "Year of the operation" msgstr "" -#: forms.py:344 +#: forms.py:345 msgid "Numeric reference" msgstr "" -#: forms.py:350 +#: forms.py:351 msgid "Town of the operation" msgstr "" -#: forms.py:352 +#: forms.py:353 msgid "Period of the context record" msgstr "" -#: forms.py:354 +#: forms.py:355 msgid "Unit type of the context record" msgstr "" -#: forms.py:367 +#: forms.py:368 msgid "Documentation search" msgstr "" -#: forms.py:369 +#: forms.py:370 msgid "You should select a document." msgstr "" @@ -231,7 +232,7 @@ msgstr "" msgid "Search" msgstr "" -#: ishtar_menu.py:35 +#: ishtar_menu.py:35 ishtar_menu.py:55 msgid "Creation" msgstr "" @@ -247,10 +248,6 @@ msgstr "" msgid "Documentation" msgstr "" -#: ishtar_menu.py:55 -msgid "Add" -msgstr "" - #: models.py:39 msgid "Dating types" msgstr "" @@ -303,176 +300,204 @@ msgstr "" msgid "Identification Types" msgstr "" -#: models.py:159 -msgid "External ID" +#: models.py:133 models.py:457 +msgid "Periods" msgstr "" #: models.py:161 +msgid "Parcel (town)" +msgstr "" + +#: models.py:162 +msgid "Related context records" +msgstr "" + +#: models.py:164 +msgid "Parcel (external ID)" +msgstr "" + +#: models.py:165 +msgid "Datings (period)" +msgstr "" + +#: models.py:166 +msgid "Parcel (year)" +msgstr "" + +#: models.py:170 +msgid "External ID" +msgstr "" + +#: models.py:172 msgid "External ID is set automatically" msgstr "" -#: models.py:169 +#: models.py:180 msgid "Date d'ouverture" msgstr "" -#: models.py:179 +#: models.py:190 msgid "A short description of the location of the context record" msgstr "" -#: models.py:182 +#: models.py:193 msgid "Comment on datings" msgstr "" -#: models.py:193 +#: models.py:204 msgid "" "\"Terminus Ante Quem\" the context record can't have been created after this " "date" msgstr "" -#: models.py:197 +#: models.py:208 msgid "Estimation of a \"Terminus Ante Quem\"" msgstr "" -#: models.py:200 +#: models.py:211 msgid "" "\"Terminus Post Quem\" the context record can't have been created before " "this date" msgstr "" -#: models.py:204 +#: models.py:215 msgid "Estimation of a \"Terminus Post Quem\"" msgstr "" -#: models.py:212 +#: models.py:223 msgid "Point" msgstr "" -#: models.py:213 +#: models.py:224 msgid "Polygon" msgstr "" -#: models.py:214 +#: models.py:225 msgid "Cached name" msgstr "" -#: models.py:218 models.py:219 templates/ishtar/sheet_contextrecord.html:4 +#: models.py:229 models.py:230 templates/ishtar/sheet_contextrecord.html:4 msgid "Context Record" msgstr "" -#: models.py:221 +#: models.py:232 msgid "Can view all Context Records" msgstr "" -#: models.py:223 +#: models.py:234 msgid "Can view own Context Record" msgstr "" -#: models.py:225 +#: models.py:236 msgid "Can add own Context Record" msgstr "" -#: models.py:227 +#: models.py:238 msgid "Can change own Context Record" msgstr "" -#: models.py:229 +#: models.py:240 msgid "Can delete own Context Record" msgstr "" -#: models.py:239 +#: models.py:250 msgctxt "short" msgid "Context record" msgstr "" -#: models.py:375 +#: models.py:387 msgid "Inverse relation" msgstr "" -#: models.py:379 models.py:403 +#: models.py:391 models.py:414 models.py:452 msgid "Relation type" msgstr "" -#: models.py:380 +#: models.py:392 msgid "Relation types" msgstr "" -#: models.py:398 +#: models.py:409 msgid "ID (left)" msgstr "" -#: models.py:399 +#: models.py:410 msgid "Unit (left)" msgstr "" -#: models.py:400 +#: models.py:411 msgid "Parcel (left)" msgstr "" -#: models.py:401 +#: models.py:412 msgid "Description (left)" msgstr "" -#: models.py:402 +#: models.py:413 msgid "Periods (left)" msgstr "" -#: models.py:404 +#: models.py:415 +msgid "ID (right)" +msgstr "" + +#: models.py:416 msgid "Unit (right)" msgstr "" -#: models.py:405 models.py:406 +#: models.py:417 msgid "Parcel (right)" msgstr "" -#: models.py:407 +#: models.py:418 msgid "Description (right)" msgstr "" -#: models.py:408 +#: models.py:419 msgid "Periods (right)" msgstr "" -#: models.py:417 +#: models.py:428 msgid "Record relation" msgstr "" -#: models.py:418 +#: models.py:429 msgid "Record relations" msgstr "" -#: models.py:454 +#: models.py:511 msgid "Context record documentation" msgstr "" -#: models.py:455 +#: models.py:512 msgid "Context record documentations" msgstr "" -#: views.py:98 +#: views.py:102 msgid "New context record" msgstr "" -#: views.py:109 +#: views.py:113 msgid "Context record modification" msgstr "" -#: views.py:123 +#: views.py:127 msgid "Context record deletion" msgstr "" -#: views.py:128 +#: views.py:132 msgid "Context record: source search" msgstr "" -#: views.py:136 +#: views.py:140 msgid "Context record: new source" msgstr "" -#: views.py:144 +#: views.py:148 msgid "Context record: source modification" msgstr "" -#: views.py:159 +#: views.py:163 msgid "Context record: source deletion" msgstr "" diff --git a/archaeological_context_records/migrations/0010_view_record_relations.py b/archaeological_context_records/migrations/0010_view_record_relations.py new file mode 100644 index 000000000..ebf4a1349 --- /dev/null +++ b/archaeological_context_records/migrations/0010_view_record_relations.py @@ -0,0 +1,659 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + sql = """ + CREATE VIEW record_relations AS + SELECT DISTINCT right_record_id as id, + right_record_id, + left_record_id, + relation_type_id + FROM archaeological_context_records_recordrelations; + + -- deactivate deletion + CREATE RULE record_relations_del AS ON DELETE TO record_relations + DO INSTEAD DELETE FROM record_relations where id=NULL; + """ + db.execute(sql) + + def backwards(self, orm): + sql = """ + DROP VIEW record_relations; + """ + 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.CharField', [], {'max_length': '200', '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.CharField', [], {'max_length': '200', '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': "'find_uptreatments'", 'managed': 'False'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'relation_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['archaeological_context_records.RelationType']"}), + 'right_record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", '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',)", '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': {'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': {'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': '100', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.ImporterType']"}), + 'match_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'seconds_remaining': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'skip_lines': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'state': ('django.db.models.fields.CharField', [], {'default': "'C'", 'max_length': '2'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']"}) + }, + 'ishtar_common.importertype': { + 'Meta': {'object_name': 'ImporterType'}, + 'associated_models': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_template': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '100', 'unique': 'True', 'null': 'True', 'blank': 'True'}), + 'unicity_keys': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.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': {'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'] diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py index 3f4dc1598..cf39870ca 100644 --- a/archaeological_context_records/models.py +++ b/archaeological_context_records/models.py @@ -29,7 +29,7 @@ from ishtar_common.utils import cached_label_changed from ishtar_common.models import GeneralType, BaseHistorizedItem, \ HistoricalRecords, OwnPerms, ShortMenuItem, Source, GeneralRelationType,\ GeneralRecordRelations, post_delete_record_relation, get_external_id, \ - ImageModel, post_save_cache + ImageModel, post_save_cache, ValueGetter from archaeological_operations.models import Operation, Period, Parcel @@ -118,7 +118,8 @@ post_save.connect(post_save_cache, sender=IdentificationType) post_delete.connect(post_save_cache, sender=IdentificationType) -class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem): +class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms, + ValueGetter, ShortMenuItem): SHOW_URL = 'show-contextrecord' SLUG = 'contextrecord' TABLE_COLS = ['parcel__town', 'operation__year', @@ -127,8 +128,9 @@ class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem): if settings.COUNTRY == 'fr': TABLE_COLS.insert(1, 'operation__code_patriarche') TABLE_COLS_FOR_OPE = ['label', 'parcel', 'unit', - 'datings__period', 'description'] - TABLE_COLS_FOR_OPE_LBL = {'section__parcel_number': _("Parcel")} + 'datings__period__label', 'description'] + COL_LABELS = {'section__parcel_number': _(u"Parcel"), + 'datings__period__label': _(u"Periods")} CONTEXTUAL_TABLE_COLS = { 'full': { 'related_context_records': 'detailled_related_context_records' @@ -155,6 +157,14 @@ class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem): RELATIVE_SESSION_NAMES = [ ('operation', 'operation__pk'), ('file', 'operation__associated_file__pk')] + EXTRA_FULL_FIELDS_LABELS = { + 'parcel__town': _(u"Parcel (town)"), + 'detailled_related_context_records': _(u"Related context records"), + 'operation__code_patriarche': u"Operation (code patriarche)", + 'parcel__external_id': _(u"Parcel (external ID)"), + 'datings__period': _(u"Datings (period)"), + 'parcel__year': _(u"Parcel (year)"), + } # fields external_id = models.TextField(_(u"External ID"), blank=True, null=True) @@ -259,9 +269,9 @@ class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem): @classmethod def get_owns(cls, user, menu_filtr=None, limit=None): - replace_query = {} - if menu_filtr: - replace_query = {'operation': menu_filtr} + replace_query = None + if menu_filtr and 'operation' in menu_filtr: + replace_query = Q(operation=menu_filtr['operation']) owns = super(ContextRecord, cls).get_owns( user, replace_query=replace_query, limit=limit) @@ -392,19 +402,18 @@ class RecordRelations(GeneralRecordRelations, models.Model): relation_type = models.ForeignKey(RelationType) TABLE_COLS = [ "left_record__label", "left_record__unit", "left_record__parcel", - "left_record__datings__period", "left_record__description", "relation_type", "right_record__label", "right_record__unit", "right_record__parcel", - "right_record__datings__period", "right_record__description"] - TABLE_COLS_LBL = { + ] + COL_LABELS = { "left_record__label": _(u"ID (left)"), "left_record__unit": _(u"Unit (left)"), "left_record__parcel": _(u"Parcel (left)"), "left_record__description": _(u"Description (left)"), "left_record__datings__period": _(u"Periods (left)"), "relation_type": _(u"Relation type"), - "right_record__label": _(u"Unit (right)"), - "right_record__unit": _(u"Parcel (right)"), + "right_record__label": _(u"ID (right)"), + "right_record__unit": _(u"Unit (right)"), "right_record__parcel": _(u"Parcel (right)"), "right_record__description": _(u"Description (right)"), "right_record__datings__period": _(u"Periods (right)") @@ -422,6 +431,52 @@ class RecordRelations(GeneralRecordRelations, models.Model): post_delete.connect(post_delete_record_relation, sender=RecordRelations) +class RecordRelationView(models.Model): + """ + CREATE VIEW record_relations AS + SELECT DISTINCT right_record_id as id, + right_record_id, + left_record_id, + relation_type_id + FROM archaeological_context_records_recordrelations; + + -- deactivate deletion + CREATE RULE record_relations_del AS ON DELETE TO record_relations + DO INSTEAD DELETE FROM record_relations where id=NULL; + """ + TABLE_COLS = [ + "relation_type", + "right_record__label", "right_record__unit", "right_record__parcel", + "right_record__datings__period", "right_record__description"] + COL_LABELS = { + "relation_type": _(u"Relation type"), + "right_record__label": _(u"ID"), + "right_record__unit": _(u"Unit"), + "right_record__parcel": _(u"Parcel"), + "right_record__description": _(u"Description"), + "right_record__datings__period": _(u"Periods") + } + + # search parameters + EXTRA_REQUEST_KEYS = { + "left_record_id": "left_record_id" + } + left_record = models.ForeignKey(ContextRecord, related_name='+', + on_delete=models.DO_NOTHING) + right_record = models.ForeignKey(ContextRecord, related_name='+', + on_delete=models.DO_NOTHING) + relation_type = models.ForeignKey(RelationType, related_name='+', + on_delete=models.DO_NOTHING) + + class Meta: + managed = False + db_table = 'record_relations' + unique_together = ('id', 'right_record') + + def __unicode__(self): + return u"{} \"{}\"".format(self.relation_type, self.right_record) + + class ContextRecordSource(Source): SHOW_URL = 'show-contextrecordsource' MODIFY_URL = 'record_source_modify' diff --git a/archaeological_context_records/templates/ishtar/sheet_contextrecord.html b/archaeological_context_records/templates/ishtar/sheet_contextrecord.html index e5edb4af5..e5304f9cb 100644 --- a/archaeological_context_records/templates/ishtar/sheet_contextrecord.html +++ b/archaeological_context_records/templates/ishtar/sheet_contextrecord.html @@ -59,7 +59,7 @@ {% trans "Context record relations" as cr_rels %} {% if item.right_relations.count %} -{% dynamic_table_document cr_rels 'context_records_relations' 'left_record' item.pk '' output %} +{% dynamic_table_document cr_rels 'context_records_relations' 'left_record_id' item.pk '' output %} {% endif %} diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py index 9b8d4f000..fe4bb7674 100644 --- a/archaeological_context_records/tests.py +++ b/archaeological_context_records/tests.py @@ -98,7 +98,7 @@ class ContextRecordInit(OperationInitTest): if force or not data.get('operation'): data['operation'] = self.get_default_operation(force=force) if not data.get('parcel') or not data['parcel'].pk: - data['parcel'] = self.get_default_parcel() + data['parcel'] = self.get_default_parcel(force=force) if not data.get('history_modifier'): data['history_modifier'] = self.get_default_user() @@ -108,6 +108,8 @@ class ContextRecordInit(OperationInitTest): return self.context_records def get_default_context_record(self, force=False): + if force: + return self.create_context_record(force=force)[-1] return self.create_context_record(force=force)[0] def tearDown(self): @@ -155,7 +157,7 @@ class ContextRecordTest(ContextRecordInit, TestCase): {'label': 'cr 1', 'relation_types_0': self.cr_rel_type.pk}) self.assertEqual(json.loads(response.content)['total'], 2) - # test search between operation relations + # test search between related operations first_ope = self.operations[0] first_ope.year = 2010 first_ope.save() diff --git a/archaeological_context_records/urls.py b/archaeological_context_records/urls.py index 24e8e06eb..341d321f9 100644 --- a/archaeological_context_records/urls.py +++ b/archaeological_context_records/urls.py @@ -69,6 +69,9 @@ urlpatterns += patterns( name='autocomplete-contextrecord'), url(r'show-contextrecord(?:/(?P<pk>.+))?/(?P<type>.+)?$', 'show_contextrecord', name=models.ContextRecord.SHOW_URL), + # show-contextrecordrelation is only a view the id point to a context record + url(r'show-contextrecord(?:/(?P<pk>.+))?/(?P<type>.+)?$', + 'show_contextrecord', name='show-contextrecordrelation'), url(r'show-historized-contextrecord/(?P<pk>.+)?/(?P<date>.+)?$', 'show_contextrecord', name='show-historized-contextrecord'), url(r'revert-contextrecord/(?P<pk>.+)/(?P<date>.+)$', @@ -94,6 +97,9 @@ urlpatterns += patterns( kwargs={'full': 'shortcut'}), url(r'get-contextrecordrelation/(?P<type>.+)?$', 'get_contextrecordrelation', name='get-contextrecordrelation'), + url(r'get-contextrecordrelationdetail/(?P<type>.+)?$', + 'get_contextrecordrelationdetail', + name='get-contextrecordrelationdetail'), url(r'show-contextrecordsource(?:/(?P<pk>.+))?/(?P<type>.+)?$', 'show_contextrecordsource', name=models.ContextRecordSource.SHOW_URL), url(r'get-contexrecordsource/(?P<type>.+)?$', diff --git a/archaeological_context_records/views.py b/archaeological_context_records/views.py index 8991e4edd..cf3a13b3b 100644 --- a/archaeological_context_records/views.py +++ b/archaeological_context_records/views.py @@ -80,9 +80,13 @@ get_contextrecordsource = get_item( 'get_contextrecordsource', 'contextrecordsource') get_contextrecordrelation = get_item( - models.RecordRelations, 'get_contextrecordrelation', + models.RecordRelationView, 'get_contextrecordrelation', 'contextrecordrelation') +get_contextrecordrelationdetail = get_item( + models.RecordRelations, 'get_contextrecordrelationdetail', + 'contextrecordrelationdetail') + record_search_wizard = SearchWizard.as_view([ ('general-record_search', RecordFormSelection)], label=_(u"Context record search"), diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py index 42a645171..45a05b9b1 100644 --- a/archaeological_files/forms.py +++ b/archaeological_files/forms.py @@ -290,7 +290,7 @@ class FileFormPreventive(ManageOldType, forms.Form): validators=[valid_id(Person)]) responsible_town_planning_service = forms.IntegerField( required=False, - label=_(u"Responsible for town planning service"), + label=_(u"Responsible for planning service"), widget=widgets.JQueryAutoComplete( reverse_lazy( 'autocomplete-person', @@ -389,7 +389,7 @@ class FinalFileClosingForm(FinalForm): class FinalFileDeleteForm(FinalForm): confirm_msg = " " - confirm_end_msg = _(u"Would you like to delete this archaelogical file ?") + confirm_end_msg = _(u"Would you like to delete this archaeological file ?") class AdministrativeActFileModifySelect(TableSelect): diff --git a/archaeological_files/ishtar_menu.py b/archaeological_files/ishtar_menu.py index dfff7d0ab..7ed921b2c 100644 --- a/archaeological_files/ishtar_menu.py +++ b/archaeological_files/ishtar_menu.py @@ -61,7 +61,7 @@ MENU_SECTIONS = [ model=AdministrativeAct, access_controls=['change_administrativeact']), MenuItem('file_administrativeactfil', - _(u"Add"), + _(u"Creation"), model=AdministrativeAct, access_controls=['change_administrativeact']), MenuItem('file_administrativeactfil_modification', diff --git a/archaeological_files/locale/django.pot b/archaeological_files/locale/django.pot index c8e5b3952..b3e38bacf 100644 --- a/archaeological_files/locale/django.pot +++ b/archaeological_files/locale/django.pot @@ -8,247 +8,248 @@ msgid "" msgstr "" -#: forms.py:52 forms.py:212 forms.py:257 forms.py:404 forms.py:431 +#: forms.py:47 forms.py:210 forms.py:255 forms.py:396 forms.py:423 #: models.py:108 templates/ishtar/sheet_file.html:146 msgid "Year" msgstr "" -#: forms.py:53 forms.py:217 forms.py:259 models.py:111 +#: forms.py:48 forms.py:215 forms.py:257 models.py:111 msgid "Numeric reference" msgstr "" -#: forms.py:55 forms.py:219 +#: forms.py:50 forms.py:217 msgid "Other reference" msgstr "" -#: forms.py:57 forms.py:439 +#: forms.py:52 forms.py:431 msgid "Parcel (section/number/public domain)" msgstr "" -#: forms.py:60 forms.py:415 forms.py:442 models.py:543 +#: forms.py:55 forms.py:407 forms.py:434 models.py:546 msgid "Department" msgstr "" -#: forms.py:61 forms.py:451 +#: forms.py:56 forms.py:443 msgid "File name" msgstr "" -#: forms.py:62 forms.py:158 forms.py:223 models.py:119 +#: forms.py:57 forms.py:154 forms.py:221 models.py:119 msgid "File type" msgstr "" -#: forms.py:63 +#: forms.py:58 msgid "Is active?" msgstr "" -#: forms.py:64 forms.py:160 forms.py:321 +#: forms.py:59 forms.py:156 forms.py:314 msgid "Saisine type" msgstr "" -#: forms.py:65 forms.py:311 models.py:60 models.py:150 +#: forms.py:60 forms.py:304 models.py:60 models.py:150 msgid "Permit type" msgstr "" -#: forms.py:67 forms.py:314 models.py:151 +#: forms.py:62 forms.py:307 models.py:151 msgid "Permit reference" msgstr "" -#: forms.py:68 forms.py:229 forms.py:372 models.py:180 +#: forms.py:63 forms.py:227 forms.py:364 models.py:180 #: templates/ishtar/sheet_file.html:99 msgid "Comment" msgstr "" -#: forms.py:70 templates/ishtar/sheet_file.html:119 +#: forms.py:65 templates/ishtar/sheet_file.html:119 msgid "In charge" msgstr "" -#: forms.py:77 forms.py:289 forms.py:453 models.py:126 +#: forms.py:72 forms.py:281 forms.py:445 models.py:126 msgid "General contractor" msgstr "" -#: forms.py:84 forms.py:462 +#: forms.py:79 forms.py:453 msgid "Organization of general contractor" msgstr "" -#: forms.py:91 forms.py:485 +#: forms.py:87 forms.py:476 msgid "Created by" msgstr "" -#: forms.py:98 forms.py:493 +#: forms.py:94 forms.py:484 msgid "Modified by" msgstr "" -#: forms.py:129 +#: forms.py:125 msgid "Archaeological file search" msgstr "" -#: forms.py:143 +#: forms.py:139 msgid "You should select a file." msgstr "" -#: forms.py:146 forms.py:221 models.py:159 +#: forms.py:142 forms.py:219 models.py:159 msgid "Creation date" msgstr "" -#: forms.py:147 forms.py:324 models.py:161 +#: forms.py:143 forms.py:317 models.py:161 msgid "Reception date" msgstr "" -#: forms.py:152 +#: forms.py:148 msgid "Slicing" msgstr "" -#: forms.py:154 +#: forms.py:150 msgid "Department detail" msgstr "" -#: forms.py:156 +#: forms.py:152 msgid "Date get from" msgstr "" -#: forms.py:162 +#: forms.py:158 msgid "Date after" msgstr "" -#: forms.py:164 +#: forms.py:160 msgid "Date before" msgstr "" -#: forms.py:201 templates/ishtar/sheet_file.html:14 +#: forms.py:197 templates/ishtar/sheet_file.html:14 msgid "General" msgstr "" -#: forms.py:206 models.py:121 +#: forms.py:202 models.py:121 msgid "Person in charge" msgstr "" -#: forms.py:220 models.py:118 +#: forms.py:218 models.py:118 msgid "Name" msgstr "" -#: forms.py:225 models.py:163 +#: forms.py:223 models.py:163 msgid "Related file" msgstr "" -#: forms.py:233 models.py:171 +#: forms.py:231 models.py:171 msgid "Total surface (m2)" msgstr "" -#: forms.py:236 models.py:177 +#: forms.py:234 models.py:177 msgid "Main address" msgstr "" -#: forms.py:237 +#: forms.py:235 msgid "Main address - complement" msgstr "" -#: forms.py:250 +#: forms.py:248 #, python-format msgid "<br/>(last recorded: %s)" msgstr "" -#: forms.py:272 +#: forms.py:270 msgid "Another file with this numeric id exists." msgstr "" -#: forms.py:283 +#: forms.py:275 msgid "Preventive informations" msgstr "" -#: forms.py:301 models.py:138 -msgid "Responsible for town planning service" +#: forms.py:293 models.py:138 +msgid "Responsible for planning service" msgstr "" -#: forms.py:317 models.py:174 +#: forms.py:310 models.py:174 msgid "Total developed surface (m2)" msgstr "" -#: forms.py:340 templates/ishtar/sheet_file.html:89 +#: forms.py:333 templates/ishtar/sheet_file.html:89 #: templates/ishtar/dashboards/dashboard_file.html:45 msgid "Research archaeology" msgstr "" -#: forms.py:348 models.py:183 templates/ishtar/sheet_file.html:90 +#: forms.py:341 models.py:183 templates/ishtar/sheet_file.html:90 msgid "Departments" msgstr "" -#: forms.py:359 models.py:192 +#: forms.py:351 models.py:192 msgid "Scientist in charge" msgstr "" -#: forms.py:361 models.py:186 templates/ishtar/sheet_file.html:92 +#: forms.py:353 models.py:186 templates/ishtar/sheet_file.html:92 msgid "Requested operation type" msgstr "" -#: forms.py:363 +#: forms.py:355 msgid "Lead organization" msgstr "" -#: forms.py:379 models.py:196 templates/ishtar/sheet_file.html:97 +#: forms.py:371 models.py:196 templates/ishtar/sheet_file.html:97 msgid "Classified area" msgstr "" -#: forms.py:381 models.py:198 templates/ishtar/sheet_file.html:98 +#: forms.py:373 models.py:198 templates/ishtar/sheet_file.html:98 msgid "Protected area" msgstr "" -#: forms.py:395 +#: forms.py:387 msgid "Would you like to close this archaeological file?" msgstr "" -#: forms.py:400 -msgid "Would you like to delete this archaelogical file ?" +#: forms.py:392 +msgid "Would you like to delete this archaeological file ?" msgstr "" -#: forms.py:405 forms.py:432 forms.py:556 +#: forms.py:397 forms.py:424 forms.py:547 msgid "Index" msgstr "" -#: forms.py:409 forms.py:436 forms.py:542 +#: forms.py:401 forms.py:428 forms.py:533 msgid "Act type" msgstr "" -#: forms.py:410 +#: forms.py:402 msgid "Object (full text search)" msgstr "" -#: forms.py:437 +#: forms.py:429 msgid "Indexed?" msgstr "" -#: forms.py:443 +#: forms.py:435 msgid "Object" msgstr "" -#: forms.py:447 +#: forms.py:439 msgid "Signature date after" msgstr "" -#: forms.py:449 +#: forms.py:441 msgid "Signature date before" msgstr "" -#: forms.py:470 +#: forms.py:461 msgid "File numeric reference" msgstr "" -#: forms.py:471 +#: forms.py:462 msgid "File year" msgstr "" -#: forms.py:473 +#: forms.py:464 msgid "File other reference" msgstr "" -#: forms.py:475 +#: forms.py:466 msgid "File in charge" msgstr "" -#: forms.py:483 +#: forms.py:474 msgid "File permit reference" msgstr "" -#: ishtar_menu.py:33 models.py:220 templates/ishtar/sheet_file.html:4 +#: ishtar_menu.py:33 models.py:220 wizards.py:155 wizards.py:165 +#: templates/ishtar/sheet_file.html:4 msgid "Archaeological file" msgstr "" @@ -256,7 +257,7 @@ msgstr "" msgid "Search" msgstr "" -#: ishtar_menu.py:41 +#: ishtar_menu.py:41 ishtar_menu.py:64 msgid "Creation" msgstr "" @@ -276,10 +277,6 @@ msgstr "" msgid "Administrative act" msgstr "" -#: ishtar_menu.py:64 -msgid "Add" -msgstr "" - #: ishtar_menu.py:76 msgid "Documents" msgstr "" @@ -334,11 +331,11 @@ msgid "General contractor organization" msgstr "" #: models.py:141 -msgid "Town planning service (raw)" +msgid "Planning service (raw)" msgstr "" #: models.py:147 -msgid "Town planning service organization" +msgid "Planning service organization" msgstr "" #: models.py:153 @@ -382,23 +379,23 @@ msgid "Imported line" msgstr "" #: models.py:223 -msgid "Can view all Archaelogical files" +msgid "Can view all Archaeological files" msgstr "" #: models.py:224 -msgid "Can view own Archaelogical file" +msgid "Can view own Archaeological file" msgstr "" #: models.py:225 -msgid "Can add own Archaelogical file" +msgid "Can add own Archaeological file" msgstr "" #: models.py:227 -msgid "Can change own Archaelogical file" +msgid "Can change own Archaeological file" msgstr "" #: models.py:229 -msgid "Can delete own Archaelogical file" +msgid "Can delete own Archaeological file" msgstr "" #: models.py:230 @@ -409,15 +406,15 @@ msgstr "" msgid "FILE" msgstr "" -#: models.py:404 +#: models.py:406 msgid "Multi-town" msgstr "" -#: models.py:410 +#: models.py:412 msgid "No town" msgstr "" -#: models.py:542 +#: models.py:545 msgid "File" msgstr "" @@ -461,10 +458,6 @@ msgstr "" msgid "Associated operations" msgstr "" -#: wizards.py:154 wizards.py:164 -msgid "Archaelogical file" -msgstr "" - #: templates/ishtar/administrativeact_document.html:9 msgid "Document generation" msgstr "" @@ -534,7 +527,7 @@ msgid "Surface:" msgstr "" #: templates/ishtar/sheet_file.html:62 -msgid "Preventive archaelogical file" +msgid "Preventive archaeological file" msgstr "" #: templates/ishtar/sheet_file.html:64 @@ -577,7 +570,7 @@ msgid "Excavation end date" msgstr "" #: templates/ishtar/sheet_file.html:135 -msgid "No operation associated to this archaelogical file" +msgid "No operation associated to this archaeological file" msgstr "" #: templates/ishtar/sheet_file.html:141 diff --git a/archaeological_files/migrations/0001_initial.py b/archaeological_files/migrations/0001_initial.py index d1d3ea4e6..b8bfe0841 100644 --- a/archaeological_files/migrations/0001_initial.py +++ b/archaeological_files/migrations/0001_initial.py @@ -495,4 +495,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['archaeological_files']
\ No newline at end of file + complete_apps = ['archaeological_files'] diff --git a/archaeological_files/models.py b/archaeological_files/models.py index 1d8317b31..638b19d18 100644 --- a/archaeological_files/models.py +++ b/archaeological_files/models.py @@ -135,16 +135,16 @@ class File(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter, responsible_town_planning_service = models.ForeignKey( Person, related_name='responsible_town_planning_service_files', blank=True, null=True, - verbose_name=_(u"Responsible for town planning service"), + verbose_name=_(u"Responsible for planning service"), on_delete=models.SET_NULL,) # service instructeur - personne raw_town_planning_service = models.CharField( - _(u"Town planning service (raw)"), max_length=200, + _(u"Planning service (raw)"), max_length=200, blank=True, null=True) planning_service = models.ForeignKey( Organization, related_name='planning_service_files', blank=True, null=True, - verbose_name=_(u"Town planning service organization"), + verbose_name=_(u"Planning service organization"), on_delete=models.SET_NULL,) # service instructeur permit_type = models.ForeignKey( PermitType, verbose_name=_(u"Permit type"), blank=True, null=True) @@ -220,13 +220,13 @@ class File(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter, verbose_name = _(u"Archaeological file") verbose_name_plural = _(u"Archaeological files") permissions = ( - ("view_file", ugettext(u"Can view all Archaelogical files")), - ("view_own_file", ugettext(u"Can view own Archaelogical file")), - ("add_own_file", ugettext(u"Can add own Archaelogical file")), + ("view_file", ugettext(u"Can view all Archaeological files")), + ("view_own_file", ugettext(u"Can view own Archaeological file")), + ("add_own_file", ugettext(u"Can add own Archaeological file")), ("change_own_file", - ugettext(u"Can change own Archaelogical file")), + ugettext(u"Can change own Archaeological file")), ("delete_own_file", - ugettext(u"Can delete own Archaelogical file")), + ugettext(u"Can delete own Archaeological file")), ("close_file", ugettext(u"Can close File")), ) ordering = ('cached_label',) @@ -352,7 +352,9 @@ class File(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter, cache_key, val = get_cache(self.__class__, [self.pk, 'short_class_name']) cls = 'normal' - if not self.has_adminact and self.reception_date: + if not self.file_type.txt_idx == 'preventive': + cls = "blue" + elif not self.has_adminact and self.reception_date: delta = datetime.date.today() - self.reception_date cls = 'red' if self.saisine_type and self.saisine_type.delay: diff --git a/archaeological_files/templates/ishtar/sheet_file.html b/archaeological_files/templates/ishtar/sheet_file.html index 211d2b181..249a9846c 100644 --- a/archaeological_files/templates/ishtar/sheet_file.html +++ b/archaeological_files/templates/ishtar/sheet_file.html @@ -41,7 +41,7 @@ {% field_li "Type" item.file_type %} -{% if item.related_file %}<li><label>{%trans "Related file:"%}</label> <span class='value'><a href='#' onclick='load_window("{% url show-file item.related_file.pk ''%}")'>{{ item.related_file }}</a></span></li>{% endif %} +{% if item.related_file %}<li><label>{%trans "Related file:"%}</label> <span class='value'><a href='#' onclick='load_window("{% url show-file item.related_file.pk "" %}")'>{{ item.related_file }}</a></span></li>{% endif %} </ul> {% field "Comment" item.comment "<pre>" "</pre>" %} @@ -59,18 +59,18 @@ {% if item.is_preventive %} -<h3>{% trans "Preventive archaelogical file"%}</h3> +<h3>{% trans "Preventive archaeological file"%}</h3> <ul class='form-flex'> {% if item.total_developed_surface %}<li><label>{%trans "Developed surface:"%}</label> <span class='value'>{{ item.total_developed_surface }} m<sup>2</sup> ({{ item.total_developed_surface_ha }} ha)</span></li>{% endif %} {% field_li "Saisine type" item.saisine_type %} -{% field_li_detail "Responsible for town planning service" item.responsible_town_planning_service %} -{% field_li "Responsible for town planning service address" item.responsible_town_planning_service.full_address %} +{% field_li_detail "Responsible for planning service" item.responsible_town_planning_service %} +{% field_li "Responsible for planning service address" item.responsible_town_planning_service.full_address %} {% if item.town_planning_service %} - {% field_li "Town planning service organization" item.town_planning_service.full_address %} + {% field_li "Planning service organization" item.town_planning_service.full_address %} {% else %} - {% field_li "Town planning service organization" item.responsible_town_planning_service.attached_to.full_address %} + {% field_li "Planning service organization" item.responsible_town_planning_service.attached_to.full_address %} {% endif %} {% field_li "Permit type" item.permit_type %} @@ -129,10 +129,10 @@ <td class='string'>{{operation.in_charge|default:""}}</td> <td>{{operation.start_date|default:""}}</td> <td>{{operation.excavation_end_date|default:""}}</td> - <td class='link'><a href="#" class='display_details' onclick='load_window("{%url show-operation operation.pk ''%}")'><i class="fa fa-info-circle" aria-hidden="true"></i></a></td> + <td class='link'><a href="#" class='display_details' onclick='load_window("{%url show-operation operation.pk "" %}")'><i class="fa fa-info-circle" aria-hidden="true"></i></a></td> </tr> {% empty %} - <tr><td colspan="8" class='no_items'>{% trans "No operation associated to this archaelogical file" %}</td></tr> + <tr><td colspan="8" class='no_items'>{% trans "No operation associated to this archaeological file" %}</td></tr> {% endfor %} </table> </div> diff --git a/archaeological_files/urls.py b/archaeological_files/urls.py index b762a54b3..110851f80 100644 --- a/archaeological_files/urls.py +++ b/archaeological_files/urls.py @@ -50,14 +50,14 @@ urlpatterns = patterns( check_rights(['view_file', 'view_own_file'])( views.file_search_wizard), name='file_search'), - url(r'file_creation/(?P<step>.+)?$', + url(r'^file_creation/(?P<step>.+)?$', check_rights(['add_file'])( views.file_creation_wizard), name='file_creation'), - url(r'file_modification/(?P<step>.+)?$', + url(r'^file_modification/(?P<step>.+)?$', check_rights(['change_file', 'change_own_file'])( views.file_modification_wizard), name='file_modification'), - url(r'file_modify/(?P<pk>.+)/$', views.file_modify, name='file_modify'), - url(r'file_closing/(?P<step>.+)?$', + url(r'^file_modify/(?P<pk>.+)/$', views.file_modify, name='file_modify'), + url(r'^file_closing/(?P<step>.+)?$', check_rights(['change_file'])( views.file_closing_wizard), name='file_closing'), @@ -93,5 +93,5 @@ urlpatterns += patterns( 'archaeological_operations.views', url(r'file_administrativeact_document/$', 'administrativeactfile_document', - name='file-administrativeact-document', kwargs={'operation': False}), + name='file-administrativeact-document', kwargs={'file': True}), ) diff --git a/archaeological_files/wizards.py b/archaeological_files/wizards.py index ea06a48f7..1558cd46e 100644 --- a/archaeological_files/wizards.py +++ b/archaeological_files/wizards.py @@ -142,6 +142,7 @@ class FileDeletionWizard(FileClosingWizard): class FileAdministrativeActWizard(OperationAdministrativeActWizard): model = models.File current_obj_slug = 'administrativeactfile' + ref_object_key = 'associated_file' def get_reminder(self): form_key = 'selec-' + self.url_name @@ -151,7 +152,7 @@ class FileAdministrativeActWizard(OperationAdministrativeActWizard): file_id = self.session_get_value(form_key, "pk") try: return ( - (_(u"Archaelogical file"), + (_(u"Archaeological file"), unicode(models.File.objects.get(pk=file_id))),) except models.File.DoesNotExist: return @@ -161,7 +162,7 @@ class FileAdministrativeActWizard(OperationAdministrativeActWizard): admin = AdministrativeAct.objects.get(pk=admin_id) if not admin.associated_file: return - return ((_(u"Archaelogical file"), + return ((_(u"Archaeological file"), unicode(admin.associated_file)),) except AdministrativeAct.DoesNotExist: return diff --git a/archaeological_files_pdl/forms.py b/archaeological_files_pdl/forms.py index cf241aa18..4890eb5d6 100644 --- a/archaeological_files_pdl/forms.py +++ b/archaeological_files_pdl/forms.py @@ -116,6 +116,8 @@ class FileFormResearchAddress(forms.Form): form_label = _(u"Address") base_models = ['town', 'department'] associated_models = {'town': Town, 'department': Department} + name = forms.CharField(label=_(u"Project name"), required=False, + max_length=100) town = widgets.MultipleAutocompleteField( model=Town, label=_("Towns"), required=False) department = widgets.MultipleAutocompleteField( @@ -343,7 +345,7 @@ class FileFormGeneralContractor(PersonOrgaForm): class FileFormPlanningService(forms.Form): - form_label = _(u"Town planning service") + form_label = _(u"Planning service") associated_models = {'responsible_town_planning_service': models.Person, 'planning_service': models.Organization} diff --git a/archaeological_files_pdl/locale/django.pot b/archaeological_files_pdl/locale/django.pot index 5c3d03a37..24d70d743 100644 --- a/archaeological_files_pdl/locale/django.pot +++ b/archaeological_files_pdl/locale/django.pot @@ -2,122 +2,121 @@ # Copyright (C) 2014 # This file is distributed under the same license as the Ishtar package. # Étienne Loks <etienne.loks at peacefrogs net>, 2014. -# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata # Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata msgid "" msgstr "" -#: forms.py:41 +#: forms.py:38 msgid "General" msgstr "" -#: forms.py:43 +#: forms.py:40 msgid "File type" msgstr "" -#: forms.py:44 forms.py:403 +#: forms.py:41 forms.py:415 msgid "Year" msgstr "" -#: forms.py:48 +#: forms.py:45 msgid "Creation date" msgstr "" -#: forms.py:51 +#: forms.py:48 msgid "Reception date" msgstr "" -#: forms.py:63 +#: forms.py:60 msgid "Reception date cannot be after today." msgstr "" -#: forms.py:71 +#: forms.py:68 msgid "Permit type" msgstr "" -#: forms.py:73 +#: forms.py:70 msgid "Saisine type" msgstr "" -#: forms.py:87 +#: forms.py:84 msgid "Planning" msgstr "" -#: forms.py:90 +#: forms.py:87 msgid "Planning name" msgstr "" -#: forms.py:93 forms.py:123 +#: forms.py:90 forms.py:122 #: templates/ishtar/wizard/wizard_preventiveplanning.html:31 msgid "Towns" msgstr "" -#: forms.py:95 forms.py:125 +#: forms.py:92 forms.py:124 #: templates/ishtar/wizard/wizard_preventiveplanning.html:41 msgid "Departments" msgstr "" -#: forms.py:96 forms.py:126 +#: forms.py:93 forms.py:125 msgid "Locality" msgstr "" -#: forms.py:99 forms.py:129 +#: forms.py:96 forms.py:128 msgid "Address (number/street)" msgstr "" -#: forms.py:100 forms.py:130 +#: forms.py:97 forms.py:129 msgid "Number/street" msgstr "" -#: forms.py:102 forms.py:132 +#: forms.py:99 forms.py:131 msgid "Postal code" msgstr "" -#: forms.py:107 +#: forms.py:104 msgid "Total surface (m2)" msgstr "" -#: forms.py:112 +#: forms.py:109 msgid "Total developed surface (m2)" msgstr "" -#: forms.py:119 +#: forms.py:116 msgid "Address" msgstr "" -#: forms.py:233 forms.py:237 forms.py:267 forms.py:270 +#: forms.py:119 +msgid "Project name" +msgstr "" + +#: forms.py:232 forms.py:236 forms.py:273 forms.py:276 msgid "General contractor" msgstr "" -#: forms.py:252 forms.py:364 +#: forms.py:254 forms.py:372 msgid "In charge" msgstr "" -#: forms.py:342 -msgid "Town planning service" +#: forms.py:348 forms.py:355 +msgid "Planning service" msgstr "" -#: forms.py:346 +#: forms.py:352 msgid "File reference" msgstr "" -#: forms.py:349 -msgid "Planning service" -msgstr "" - -#: forms.py:383 +#: forms.py:395 msgid "Person in charge" msgstr "" -#: forms.py:395 +#: forms.py:407 msgid "Related file" msgstr "" -#: forms.py:399 +#: forms.py:411 msgid "Comment" msgstr "" -#: forms.py:406 +#: forms.py:418 msgid "Numeric reference" msgstr "" diff --git a/archaeological_files_pdl/wizards.py b/archaeological_files_pdl/wizards.py index c64c70eab..1506b5d49 100644 --- a/archaeological_files_pdl/wizards.py +++ b/archaeological_files_pdl/wizards.py @@ -97,7 +97,8 @@ class FileWizard(BaseFileWizard): towns = self.session_get_value( parcel_step_key, 'town', multi=True) or [] for idx, parcel_number in enumerate(parcel_numbers): - if not parcel_number: + if not parcel_number or len(sections) <= idx \ + or len(towns) <= idx: continue parcels.append({ 'town': towns[idx], diff --git a/archaeological_finds/admin.py b/archaeological_finds/admin.py index 764f63ad3..14b3ffb40 100644 --- a/archaeological_finds/admin.py +++ b/archaeological_finds/admin.py @@ -59,13 +59,20 @@ admin.site.register(models.Property, PropertyAdmin) class TreatmentAdmin(HistorizedObjectAdmin): - list_display = ('location', 'treatment_type', 'container', 'person') - list_filter = ('treatment_type',) + list_display = ('location', 'treatment_types_lbl', 'container', 'person') model = models.Treatment admin.site.register(models.Treatment, TreatmentAdmin) +class TreatmentFileAdmin(HistorizedObjectAdmin): + list_display = ('year', 'index', 'name', 'internal_reference') + search_fields = ('cached_label',) + model = models.TreatmentFile + +admin.site.register(models.TreatmentFile, TreatmentFileAdmin) + + class TreatmentSourceAdmin(admin.ModelAdmin): list_display = ('treatment', 'title', 'source_type',) list_filter = ('source_type',) @@ -83,13 +90,14 @@ admin.site.register(models.ObjectType, HierarchicalTypeAdmin) class TreatmentTypeAdmin(admin.ModelAdmin): - list_display = GeneralTypeAdmin.list_display + [ - 'virtual', 'upstream_is_many', 'downstream_is_many'] + list_display = HierarchicalTypeAdmin.list_display + [ + 'order', 'virtual', 'upstream_is_many', 'downstream_is_many'] model = models.TreatmentType admin.site.register(models.TreatmentType, TreatmentTypeAdmin) general_models = [ models.ConservatoryState, models.RemarkabilityType, - models.PreservationType, models.IntegrityType, ] + models.PreservationType, models.IntegrityType, + models.TreatmentFileType, models.TreatmentState] for model in general_models: admin.site.register(model, GeneralTypeAdmin) diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 66ba9f8ea..9441e6899 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -21,6 +21,8 @@ Finds forms definitions """ +import logging + from django import forms from django.conf import settings from django.core import validators @@ -29,21 +31,57 @@ from django.forms.formsets import formset_factory from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ -from ishtar_common.models import Person, valid_id, valid_ids, \ - get_current_profile +from ishtar_common.models import valid_id, valid_ids, get_current_profile from archaeological_operations.models import Period, ArchaeologicalSite, \ RelationType as OpeRelationType from archaeological_context_records.models import DatingType, DatingQuality, \ ContextRecord -from archaeological_warehouse.models import Warehouse import models -from ishtar_common import widgets -from archaeological_operations.widgets import OAWidget from ishtar_common.forms import FormSet, FloatField, \ get_form_selection, reverse_lazy, TableSelect, get_now, FinalForm, \ ManageOldType + from ishtar_common.forms_common import get_town_field, SourceSelect +from ishtar_common import widgets +from archaeological_operations.widgets import OAWidget + +from archaeological_finds.forms_treatments import TreatmentSelect, \ + TreatmentFormSelection, BaseTreatmentForm, TreatmentModifyForm, \ + AdministrativeActTreatmentForm, TreatmentFormFileChoice, \ + TreatmentDeletionForm, TreatmentFileSelect, TreatmentFileFormSelection, \ + TreatmentFileForm, TreatmentFileModifyForm, TreatmentFileDeletionForm, \ + AdministrativeActTreatmentFormSelection, \ + AdministrativeActTreatmentModifForm, \ + AdministrativeActTreatmentFileForm, \ + AdministrativeActTreatmentFileFormSelection, \ + AdministrativeActTreatmentFileModifForm, SourceTreatmentFormSelection, \ + SourceTreatmentFileFormSelection, TreatmentSourceFormSelection, \ + TreatmentFileSourceFormSelection + +__all__ = [ + 'TreatmentSelect', 'TreatmentFormSelection', 'BaseTreatmentForm', + 'TreatmentModifyForm', 'AdministrativeActTreatmentForm', + 'TreatmentFormFileChoice', 'TreatmentDeletionForm', + 'AdministrativeActTreatmentModifForm', 'TreatmentFileSelect', + 'TreatmentFileFormSelection', 'TreatmentFileForm', + 'TreatmentFileModifyForm', 'TreatmentFileDeletionForm', + 'AdministrativeActTreatmentFileForm', + 'AdministrativeActTreatmentFileFormSelection', + 'AdministrativeActTreatmentFormSelection', + 'AdministrativeActTreatmentFileModifForm', 'SourceTreatmentFormSelection', + 'SourceTreatmentFileFormSelection', 'TreatmentSourceFormSelection', + 'TreatmentFileSourceFormSelection', + 'RecordFormSelection', 'FindForm', 'DateForm', 'DatingFormSet', + 'FindSelect', 'FindFormSelection', 'MultipleFindFormSelection', + 'FindMultipleFormSelection', 'check_form', 'check_exist', 'check_not_exist', + 'check_value', 'check_type_field', 'check_type_not_field', + 'check_treatment', 'ResultFindForm', 'ResultFindFormSet', + 'FindDeletionForm', 'UpstreamFindFormSelection', 'SourceFindFormSelection', + 'FindSourceSelect', 'FindSourceFormSelection', 'NewFindBasketForm', + 'SelectFindBasketForm', 'DeleteFindBasketForm', 'FindBasketAddItemForm'] + +logger = logging.getLogger(__name__) class RecordFormSelection(forms.Form): @@ -112,22 +150,29 @@ class FindForm(ManageOldType, forms.Form): model=models.ObjectType, label=_(u"Object types"), required=False) preservation_to_consider = forms.MultipleChoiceField( label=_(u"Preservation type"), choices=[], - widget=forms.CheckboxSelectMultiple, required=False) + widget=widgets.CheckboxSelectMultiple, required=False) integritie = forms.MultipleChoiceField( label=_(u"Integrity / interest"), choices=[], - widget=forms.CheckboxSelectMultiple, required=False) + widget=widgets.CheckboxSelectMultiple, required=False) remarkabilitie = forms.MultipleChoiceField( label=_(u"Remarkability"), choices=[], - widget=forms.CheckboxSelectMultiple, required=False) + widget=widgets.CheckboxSelectMultiple, required=False) + topographic_reference_point = forms.CharField( + label=_(u"Point of topographic reference"), + required=False, max_length=20 + ) length = FloatField(label=_(u"Length (cm)"), required=False) width = FloatField(label=_(u"Width (cm)"), required=False) height = FloatField(label=_(u"Height (cm)"), required=False) diameter = FloatField(label=_(u"Diameter (cm)"), required=False) + thickness = FloatField(label=_(u"Thickness (cm)"), required=False) volume = FloatField(label=_(u"Volume (l)"), required=False) weight = FloatField(label=_(u"Weight (g)"), required=False) dimensions_comment = forms.CharField( label=_(u"Dimensions comment"), required=False, widget=forms.Textarea) find_number = forms.IntegerField(label=_(u"Find number"), required=False) + min_number_of_individuals = forms.IntegerField( + label=_(u"Minimum number of individuals (MNI)"), required=False) mark = forms.CharField(label=_(u"Mark"), required=False) checked = forms.ChoiceField(label=_(u"Check")) check_date = forms.DateField( @@ -227,14 +272,14 @@ class FindSelect(TableSelect): widget=OAWidget ) archaeological_sites = forms.IntegerField( - label=_("Archaelogical site"), + label=_("Archaeological site"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-archaeologicalsite'), associated_model=ArchaeologicalSite), validators=[valid_id(ArchaeologicalSite)]) ope_relation_types = forms.MultipleChoiceField( - label=_(u"Search within operation relations"), choices=[], - widget=forms.CheckboxSelectMultiple) + label=_(u"Search within related operations"), choices=[], + widget=widgets.CheckboxSelectMultiple) datings__period = forms.ChoiceField(label=_(u"Period"), choices=[]) # TODO search by warehouse material_types = forms.ChoiceField(label=_(u"Material type"), choices=[]) @@ -338,15 +383,23 @@ class FindMultipleFormSelection(forms.Form): return self.cleaned_data +def check_form(wizard, form_name, key): + request = wizard.request + storage = wizard.storage + if storage.prefix not in request.session or \ + 'step_data' not in request.session[storage.prefix] or \ + form_name not in request.session[storage.prefix]['step_data'] or \ + form_name + '-' + key not in \ + request.session[storage.prefix]['step_data'][form_name]: + return False + return True + + def check_exist(form_name, key): def func(self): request = self.request storage = self.storage - if storage.prefix not in request.session or \ - 'step_data' not in request.session[storage.prefix] or \ - form_name not in request.session[storage.prefix]['step_data'] or\ - form_name + '-' + key not in \ - request.session[storage.prefix]['step_data'][form_name]: + if not check_form(self, form_name, key): return False try: val = request.session[storage.prefix][ @@ -365,15 +418,28 @@ def check_not_exist(form_name, key): return func +def check_value(form_name, key, value): + def func(self): + request = self.request + storage = self.storage + if not check_form(self, form_name, key): + return False + try: + val = request.session[storage.prefix][ + 'step_data'][form_name][form_name + '-' + key] + if val and len(val) > 0: + val = val[0] + return unicode(val) == unicode(value) + except ValueError: + return False + return func + + def check_type_field(form_name, key, model, field): def func(self): request = self.request storage = self.storage - if storage.prefix not in request.session or \ - 'step_data' not in request.session[storage.prefix] or \ - form_name not in request.session[storage.prefix]['step_data'] or\ - form_name + '-' + key not in \ - request.session[storage.prefix]['step_data'][form_name]: + if not check_form(self, form_name, key): return False try: val = model.objects.get(pk=request.session[storage.prefix][ @@ -399,11 +465,7 @@ def check_treatment(form_name, type_key, type_list=[], not_type_list=[]): def func(self): request = self.request storage = self.storage - if storage.prefix not in request.session or \ - 'step_data' not in request.session[storage.prefix] or \ - form_name not in request.session[storage.prefix]['step_data'] or\ - form_name + '-' + type_key not in \ - request.session[storage.prefix]['step_data'][form_name]: + if not check_form(self, form_name, type_key): return False try: tpe = request.session[storage.prefix][ @@ -453,10 +515,12 @@ class UpstreamFindFormSelection(FindFormSelection): def __init__(self, *args, **kwargs): super(UpstreamFindFormSelection, self).__init__(*args, **kwargs) self.fields['pk'].required = True + self.fields['resulting_pk'] = self.fields.pop('pk') -############################################# -# Source management for archaelogical finds # -############################################# + +############################################## +# Source management for archaeological finds # +############################################## SourceFindFormSelection = get_form_selection( 'SourceFindFormSelection', _(u"Archaeological find search"), 'find', @@ -475,11 +539,11 @@ class FindSourceSelect(SourceSelect): widget=OAWidget, label="Code PATRIARCHE") find__datings__period = forms.ChoiceField( - label=_(u"Period of the archaelogical find"), choices=[]) + label=_(u"Period of the archaeological find"), choices=[]) find__material_type = forms.ChoiceField( - label=_("Material type of the archaelogical find"), choices=[]) + label=_("Material type of the archaeological find"), choices=[]) find__description = forms.CharField( - label=_(u"Description of the archaelogical find")) + label=_(u"Description of the archaeological find")) def __init__(self, *args, **kwargs): super(FindSourceSelect, self).__init__(*args, **kwargs) @@ -510,7 +574,7 @@ class NewFindBasketForm(forms.ModelForm): q = models.FindBasket.objects.filter(user=self.user, label=self.cleaned_data['label']) if q.count(): - raise forms.ValidationError(_(u"Another basket already exist with " + raise forms.ValidationError(_(u"Another basket already exists with " u"this name.")) return self.cleaned_data @@ -520,6 +584,10 @@ class NewFindBasketForm(forms.ModelForm): class SelectFindBasketForm(forms.Form): + form_label = _(u"Basket") + associated_models = {'basket': models.FindBasket} + need_user_for_initialization = True + basket = forms.ChoiceField(label=_(u"Basket"), required=True, choices=[]) def __init__(self, *args, **kwargs): @@ -567,101 +635,3 @@ class FindBasketAddItemForm(forms.Form): raise PermissionDenied basket.items.add(item) return basket - - -class BaseTreatmentForm(ManageOldType, SelectFindBasketForm): - form_label = _(u"Base treatment") - associated_models = {'treatment_type': models.TreatmentType, - 'person': Person, - 'location': Warehouse, - 'basket': models.FindBasket} - treatment_type = forms.ChoiceField(label=_(u"Treatment type"), choices=[]) - person = forms.IntegerField( - label=_(u"Doer"), - widget=widgets.JQueryAutoComplete( - reverse_lazy('autocomplete-person'), associated_model=Person, - new=True), - validators=[valid_id(Person)]) - location = forms.IntegerField( - label=_(u"Location"), - widget=widgets.JQueryAutoComplete( - reverse_lazy('autocomplete-warehouse'), associated_model=Warehouse, - new=True), - validators=[valid_id(Warehouse)]) - description = forms.CharField(label=_(u"Description"), - widget=forms.Textarea, required=False) - start_date = forms.DateField(label=_(u"Start date"), required=False, - widget=widgets.JQueryDate) - end_date = forms.DateField(label=_(u"End date"), required=False, - widget=widgets.JQueryDate) - - def __init__(self, *args, **kwargs): - super(BaseTreatmentForm, self).__init__(*args, **kwargs) - self.fields['treatment_type'].choices = models.TreatmentType.get_types( - initial=self.init_data.get('treatment_type'), - exclude=['packaging']) - self.fields['treatment_type'].help_text = \ - models.TreatmentType.get_help(exclude=['packaging']) - self.fields['basket'].required = False - self.fields['basket'].help_text = \ - _(u"Leave it blank if you want to select a single item") - - def clean(self, *args, **kwargs): - try: - treatment = models.TreatmentType.objects.get( - pk=self.cleaned_data['treatment_type'], available=True) - except models.TreatmentType.DoesNotExist: - raise forms.ValidationError(_(u"This treatment type is not " - u"available.")) - if treatment.upstream_is_many and \ - not self.cleaned_data.get('basket'): - raise forms.ValidationError(_(u"This treatment needs a basket.")) - return self.cleaned_data - -""" -#################################### -# Source management for treatments # -#################################### - -SourceTreatementFormSelection = get_form_selection( - 'SourceTreatmentFormSelection', _(u"Treatment search"), 'operation', - models.Treatment, TreatmentSelect, 'get-treatment', - _(u"You should select a treatment.")) - -class TreatmentSourceSelect(SourceSelect): - operation__towns = get_town_field(label=_(u"Operation's town")) - treatment__treatment_type = forms.ChoiceField(label=_(u"Operation type"), - choices=[]) - operation__year = forms.IntegerField(label=_(u"Operation's year")) - - def __init__(self, *args, **kwargs): - super(OperationSourceSelect, self).__init__(*args, **kwargs) - self.fields['operation__operation_type'].choices = \ - OperationType.get_types() - self.fields['operation__operation_type'].help_text = \ - OperationType.get_help() - -""" - -""" -OperationSourceFormSelection = get_form_selection( - 'OperationSourceFormSelection', _(u"Documentation search"), 'pk', - models.OperationSource, OperationSourceSelect, 'get-operationsource', - _(u"You should select a document.")) - -operation_source_modification_wizard = OperationSourceWizard([ - ('selec-operation_source_modification', OperationSourceFormSelection), - ('source-operation_source_modification', SourceForm), - ('authors-operation_source_modification', AuthorFormset), - ('final-operation_source_modification', FinalForm)], - url_name='operation_source_modification',) - -class OperationSourceDeletionWizard(DeletionWizard): - model = models.OperationSource - fields = ['operation', 'title', 'source_type', 'authors',] - -operation_source_deletion_wizard = OperationSourceDeletionWizard([ - ('selec-operation_source_deletion', OperationSourceFormSelection), - ('final-operation_source_deletion', SourceDeletionForm)], - url_name='operation_source_deletion',) -""" diff --git a/archaeological_finds/forms_treatments.py b/archaeological_finds/forms_treatments.py new file mode 100644 index 000000000..7a388a10d --- /dev/null +++ b/archaeological_finds/forms_treatments.py @@ -0,0 +1,602 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (C) 2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# See the file COPYING for details. + +import datetime +import logging + +from django import forms +from django.conf import settings +from django.core import validators +from django.db.models import Max +from django.utils.safestring import mark_safe +from django.utils.translation import ugettext_lazy as _ + +from ishtar_common.models import Person, valid_id, Organization +from archaeological_operations.models import ActType, AdministrativeAct +from archaeological_warehouse.models import Warehouse, Container +import models + +from archaeological_operations.forms import AdministrativeActOpeForm, \ + AdministrativeActOpeFormSelection, AdministrativeActModifForm + +from ishtar_common.forms import reverse_lazy, TableSelect, FinalForm, \ + ManageOldType, get_form_selection +from ishtar_common.forms_common import SourceForm, SourceSelect, \ + SourceDeletionForm + +from ishtar_common import widgets + +logger = logging.getLogger(__name__) + +# Treatment + + +class TreatmentSelect(TableSelect): + label = forms.CharField(label=_(u"Label")) + other_reference = forms.CharField(label=_(u"Other ref.")) + year = forms.IntegerField(label=_(u"Year")) + index = forms.IntegerField(label=_(u"Index")) + treatment_types = forms.ChoiceField(label=_(u"Treatment type"), choices=[]) + image = forms.NullBooleanField(label=_(u"Has an image?")) + + def __init__(self, *args, **kwargs): + super(TreatmentSelect, self).__init__(*args, **kwargs) + self.fields['treatment_types'].choices = \ + models.TreatmentType.get_types() + self.fields['treatment_types'].help_text = \ + models.TreatmentType.get_help() + + +class TreatmentFormSelection(forms.Form): + form_label = _("Treatment search") + associated_models = {'pk': models.Treatment} + currents = {'pk': models.Treatment} + pk = forms.IntegerField( + label="", required=False, + widget=widgets.JQueryJqGrid( + reverse_lazy('get-treatment'), + TreatmentSelect, models.Treatment), + validators=[valid_id(models.Treatment)]) + + +class BaseTreatmentForm(ManageOldType, forms.Form): + form_label = _(u"Base treatment") + base_models = ['treatment_type'] + associated_models = {'treatment_type': models.TreatmentType, + 'person': Person, + 'location': Warehouse, + 'organization': Organization, + 'container': Container, + 'treatment_state': models.TreatmentState, + } + file_upload = True + need_user_for_initialization = True + + label = forms.CharField(label=_(u"Label"), + max_length=200, required=False) + other_reference = forms.CharField( + label=_(u"Other ref."), max_length=200, required=False) + year = forms.IntegerField(label=_("Year"), + initial=lambda: datetime.datetime.now().year, + validators=[validators.MinValueValidator(1900), + validators.MaxValueValidator(2100)]) + treatment_type = forms.MultipleChoiceField( + label=_(u"Treatment type"), choices=[], + widget=widgets.CheckboxSelectMultiple) + treatment_state = forms.ChoiceField(label=_(u"State"), + choices=[], required=False) + target_is_basket = forms.NullBooleanField(label=_(u"Target")) + person = forms.IntegerField( + label=_(u"Responsible"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-person'), associated_model=Person, + new=True), + validators=[valid_id(Person)], required=False) + organization = forms.IntegerField( + label=_(u"Organization"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-organization'), + associated_model=Organization, new=True), + validators=[valid_id(Organization)], required=False) + location = forms.IntegerField( + label=_(u"Location"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-warehouse'), associated_model=Warehouse, + new=True), + validators=[valid_id(Warehouse)]) + container = forms.IntegerField( + label=_(u"Container (relevant for packaging)"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-container'), + associated_model=Container, new=True), + validators=[valid_id(Container)], required=False) + external_id = forms.CharField( + label=_(u"External ref."), max_length=200, required=False) + comment = forms.CharField(label=_(u"Comment"), + widget=forms.Textarea, required=False) + description = forms.CharField(label=_(u"Description"), + widget=forms.Textarea, required=False) + goal = forms.CharField(label=_(u"Goal"), + widget=forms.Textarea, required=False) + start_date = forms.DateField(label=_(u"Start date"), required=False, + widget=widgets.JQueryDate) + end_date = forms.DateField(label=_(u"Closing date"), required=False, + widget=widgets.JQueryDate) + image = forms.ImageField( + label=_(u"Image"), help_text=mark_safe( + _(u"<p>Heavy images are resized to: %(width)dx%(height)d " + u"(ratio is preserved).</p>") % { + 'width': settings.IMAGE_MAX_SIZE[0], + 'height': settings.IMAGE_MAX_SIZE[1]}), + max_length=255, required=False, widget=widgets.ImageFileInput()) + + def __init__(self, *args, **kwargs): + user = kwargs.pop('user') + super(BaseTreatmentForm, self).__init__(*args, **kwargs) + q = Person.objects.filter(ishtaruser__pk=user.pk) + if q.count(): + person = q.all()[0] + self.fields['person'].initial = person.pk + if person.attached_to: + self.fields['organization'].initial = person.attached_to.pk + self.fields['target_is_basket'].widget.choices = \ + ((False, _(u"Single find")), (True, _(u"Basket"))) + self.fields['treatment_type'].choices = models.TreatmentType.get_types( + initial=self.init_data.get('treatment_type'), + dct={'upstream_is_many': False, 'downstream_is_many': False}, + empty_first=False + ) + self.fields['treatment_type'].help_text = \ + models.TreatmentType.get_help( + dct={'upstream_is_many': False, 'downstream_is_many': False}) + self.fields['treatment_state'].choices = \ + models.TreatmentState.get_types( + initial=self.init_data.get('treatment_state'), + ) + self.fields['treatment_state'].help_text = \ + models.TreatmentState.get_help() + # TODO + """ + self.fields['basket'].required = False + self.fields['basket'].help_text = \ + _(u"Leave it blank if you want to select a single item") + self.fields.keyOrder.pop(self.fields.keyOrder.index('basket')) + self.fields.keyOrder.insert(self.fields.keyOrder.index('description'), + 'basket') + """ + + def clean(self, *args, **kwargs): + data = self.cleaned_data + packaging = models.TreatmentType.get_cache('packaging') + if not packaging: + logger.warning("No 'packaging' treatment type defined") + return + if data.get('container', None) \ + and str(packaging.pk) not in data.get('treatment_type', []): + raise forms.ValidationError( + _(u"The container field is attached to the treatment. If " + u"no packaging treatment is done it is not relevant.")) + if not data.get('container', None) \ + and str(packaging.pk) in data.get('treatment_type', []): + raise forms.ValidationError( + _(u"If a packaging treatment is done, the container field " + u"must be filled.")) + if not data.get('person', None) and not data.get('organization', None): + raise forms.ValidationError( + _(u"A responsible or an organization must be defined.")) + return data + # TODO + """ + for treatment_type in self.cleaned_data.get('treatment_type', []): + try: + treatment = models.TreatmentType.objects.get( + pk=treatment_type, available=True) + except models.TreatmentType.DoesNotExist: + raise forms.ValidationError(_(u"This treatment type is not " + u"available.")) + if treatment.upstream_is_many and \ + not self.cleaned_data.get('basket'): + raise forms.ValidationError(_(u"This treatment needs a " + u"basket.")) + """ + + +class TreatmentModifyForm(BaseTreatmentForm): + index = forms.IntegerField(_(u"Index")) + id = forms.IntegerField(' ', widget=forms.HiddenInput, required=False) + + def __init__(self, *args, **kwargs): + super(TreatmentModifyForm, self).__init__(*args, **kwargs) + self.fields.keyOrder.pop(self.fields.keyOrder.index('index')) + self.fields.keyOrder.insert( + self.fields.keyOrder.index('year') + 1, 'index') + + def clean(self, *args, **kwargs): + super(TreatmentModifyForm, self).clean(*args, **kwargs) + cleaned_data = self.cleaned_data + year = cleaned_data.get('year') + pk = cleaned_data.get('id') + index = cleaned_data.get('index') + q = models.Treatment.objects \ + .filter(year=year, index=index).exclude(pk=pk) + if index and q.count(): + raise forms.ValidationError( + _(u"Another treatment with this index exists for {}." + ).format(year)) + return cleaned_data + + +class TreatmentFormFileChoice(forms.Form): + form_label = _(u"Associated request") + associated_models = {'file': models.TreatmentFile, } + currents = {'file': models.TreatmentFile} + file = forms.IntegerField( + label=_(u"Treatment request"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-treatmentfile'), + associated_model=models.TreatmentFile), + validators=[valid_id(models.TreatmentFile)], required=False) + + +class TreatmentDeletionForm(FinalForm): + confirm_msg = _( + u"Are you sure you want to delete this treatment? All changes " + u"made to the associated finds since this treatment record will be " + u"lost!") + confirm_end_msg = _(u"Would you like to delete this treatment?") + +# administrative act treatment + + +class AdministrativeActTreatmentSelect(TableSelect): + year = forms.IntegerField(label=_("Year")) + index = forms.IntegerField(label=_("Index")) + act_type = forms.ChoiceField(label=_("Act type"), choices=[]) + indexed = forms.NullBooleanField(label=_(u"Indexed?")) + act_object = forms.CharField(label=_(u"Object"), + max_length=300) + + signature_date_after = forms.DateField( + label=_(u"Signature date after"), widget=widgets.JQueryDate) + signature_date_before = forms.DateField( + label=_(u"Signature date before"), widget=widgets.JQueryDate) + treatment__name = forms.CharField( + label=_(u"Treatment name"), max_length=200) + treatment__year = forms.IntegerField(label=_(u"Treatment year")) + treatment__index = forms.IntegerField(label=_(u"Treatment index")) + treatment__internal_reference = forms.CharField( + max_length=200, label=_(u"Treatment internal reference")) + treatment__treatment_types = forms.ChoiceField(label=_(u"Treatment type"), + choices=[]) + history_modifier = forms.IntegerField( + label=_(u"Modified by"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-person', + args=['0', 'user']), + associated_model=Person), + validators=[valid_id(Person)]) + + def __init__(self, *args, **kwargs): + super(AdministrativeActTreatmentSelect, self).__init__(*args, **kwargs) + self.fields['act_type'].choices = ActType.get_types( + dct={'intented_to': 'T'}) + self.fields['act_type'].help_text = ActType.get_help( + dct={'intented_to': 'T'}) + self.fields['treatment__treatment_types'].choices = \ + models.TreatmentType.get_types() + self.fields['treatment__treatment_types'].help_text = \ + models.TreatmentType.get_help() + + +class AdministrativeActTreatmentFormSelection( + AdministrativeActOpeFormSelection): + pk = forms.IntegerField( + label="", required=False, + widget=widgets.JQueryJqGrid( + reverse_lazy('get-administrativeacttreatment'), + AdministrativeActTreatmentSelect, AdministrativeAct), + validators=[valid_id(AdministrativeAct)]) + + +class AdministrativeActTreatmentForm(AdministrativeActOpeForm): + act_type = forms.ChoiceField(label=_(u"Act type"), choices=[]) + + def __init__(self, *args, **kwargs): + super(AdministrativeActTreatmentForm, self).__init__(*args, **kwargs) + self.fields['act_type'].choices = ActType.get_types( + initial=self.init_data.get('act_type'), + dct={'intented_to': 'T'}) + self.fields['act_type'].help_text = ActType.get_help( + dct={'intented_to': 'T'}) + + +class AdministrativeActTreatmentModifForm( + AdministrativeActModifForm, AdministrativeActTreatmentForm): + pk = forms.IntegerField(required=False, widget=forms.HiddenInput) + index = forms.IntegerField(label=_("Index"), required=False) + +# treatment requests + + +class TreatmentFileSelect(TableSelect): + name = forms.CharField(label=_(u"Name")) + internal_reference = forms.CharField(label=_(u"Internal ref.")) + year = forms.IntegerField(label=_(u"Year")) + index = forms.IntegerField(label=_(u"Index")) + type = forms.ChoiceField(label=_(u"Type"), choices=[]) + in_charge = forms.IntegerField( + label=_(u"In charge"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-person'), + associated_model=Person), + validators=[valid_id(Person)]) + applicant = forms.IntegerField( + label=_(u"Applicant"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-person'), + associated_model=Person), + validators=[valid_id(Person)]) + applicant_organisation = forms.IntegerField( + label=_(u"Applicant organisation"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-organization'), + associated_model=Organization), + validators=[valid_id(Organization)]) + + def __init__(self, *args, **kwargs): + super(TreatmentFileSelect, self).__init__(*args, **kwargs) + self.fields['type'].choices = models.TreatmentFileType.get_types() + self.fields['type'].help_text = models.TreatmentFileType.get_help() + + +class TreatmentFileFormSelection(forms.Form): + form_label = _("Treatment request search") + associated_models = {'pk': models.TreatmentFile} + currents = {'pk': models.TreatmentFile} + pk = forms.IntegerField( + label="", required=False, + widget=widgets.JQueryJqGrid( + reverse_lazy('get-treatmentfile'), + TreatmentFileSelect, models.TreatmentFile), + validators=[valid_id(models.Treatment)]) + + +class TreatmentFileForm(ManageOldType, forms.Form): + form_label = _(u"Treatment request") + base_models = ['treatment_type_type'] + associated_models = { + 'type': models.TreatmentFileType, 'in_charge': Person, + 'applicant': Person, 'applicant_organisation': Organization} + need_user_for_initialization = True + + name = forms.CharField(label=_(u"Name"), + max_length=1000, required=False) + year = forms.IntegerField(label=_("Year"), + initial=lambda: datetime.datetime.now().year, + validators=[validators.MinValueValidator(1900), + validators.MaxValueValidator(2100)]) + internal_reference = forms.CharField( + label=_(u"Internal ref."), max_length=60, required=False) + external_id = forms.CharField( + label=_(u"External ref."), max_length=200, required=False) + type = forms.ChoiceField( + label=_(u"Type"), choices=[]) + in_charge = forms.IntegerField( + label=_(u"Responsible"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-person'), associated_model=Person, + new=True), + validators=[valid_id(Person)]) + applicant = forms.IntegerField( + label=_(u"Applicant"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-person'), associated_model=Person, + new=True), + validators=[valid_id(Person)], required=False) + applicant_organisation = forms.IntegerField( + label=_(u"Applicant organisation"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-organization'), + associated_model=Organization, new=True), + validators=[valid_id(Organization)], required=False) + comment = forms.CharField(label=_(u"Comment"), + widget=forms.Textarea, required=False) + creation_date = forms.DateField(label=_(u"Start date"), required=False, + widget=widgets.JQueryDate, + initial=lambda: datetime.datetime.now()) + reception_date = forms.DateField(label=_(u"Reception date"), required=False, + widget=widgets.JQueryDate, + initial=lambda: datetime.datetime.now()) + end_date = forms.DateField(label=_(u"Closing date"), required=False, + widget=widgets.JQueryDate) + + def __init__(self, *args, **kwargs): + user = kwargs.pop('user') + super(TreatmentFileForm, self).__init__(*args, **kwargs) + q = Person.objects.filter(ishtaruser__pk=user.pk) + if q.count(): + person = q.all()[0] + self.fields['in_charge'].initial = person.pk + self.fields['type'].choices = models.TreatmentFileType.get_types( + initial=[self.init_data.get('type')], empty_first=False + ) + self.fields['type'].help_text = models.TreatmentFileType.get_help() + + +class TreatmentFileModifyForm(TreatmentFileForm): + index = forms.IntegerField(_(u"Index")) + id = forms.IntegerField(' ', widget=forms.HiddenInput, required=False) + + def __init__(self, *args, **kwargs): + super(TreatmentFileModifyForm, self).__init__(*args, **kwargs) + self.fields.keyOrder.pop(self.fields.keyOrder.index('index')) + self.fields.keyOrder.insert( + self.fields.keyOrder.index('year') + 1, 'index') + + def clean(self, *args, **kwargs): + super(TreatmentFileModifyForm, self).clean(*args, **kwargs) + cleaned_data = self.cleaned_data + year = cleaned_data.get('year') + pk = cleaned_data.get('id') + index = cleaned_data.get('index') + q = models.TreatmentFile.objects \ + .filter(year=year, index=index).exclude(pk=pk) + if index and q.count(): + raise forms.ValidationError( + _(u"Another treatment request with this index exists for {}." + ).format(year)) + return cleaned_data + + +class TreatmentFileDeletionForm(FinalForm): + confirm_msg = _(u"Are you sure you want to delete this treatment request?") + confirm_end_msg = _(u"Would you like to delete this treatment request?") + + +class AdministrativeActTreatmentFileSelect(TableSelect): + year = forms.IntegerField(label=_("Year")) + index = forms.IntegerField(label=_("Index")) + act_type = forms.ChoiceField(label=_("Act type"), choices=[]) + indexed = forms.NullBooleanField(label=_(u"Indexed?")) + act_object = forms.CharField(label=_(u"Object"), + max_length=300) + + signature_date_after = forms.DateField( + label=_(u"Signature date after"), widget=widgets.JQueryDate) + signature_date_before = forms.DateField( + label=_(u"Signature date before"), widget=widgets.JQueryDate) + treatment_file__name = forms.CharField( + label=_(u"Treatment request name"), max_length=200) + treatment_file__year = forms.IntegerField( + label=_(u"Treatment request year")) + treatment_file__index = forms.IntegerField( + label=_(u"Treatment request index")) + treatment_file__internal_reference = forms.CharField( + max_length=200, label=_(u"Treatment request internal reference")) + treatment_file__type = forms.ChoiceField(label=_(u"Treatment request type"), + choices=[]) + history_modifier = forms.IntegerField( + label=_(u"Modified by"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-person', + args=['0', 'user']), + associated_model=Person), + validators=[valid_id(Person)]) + + def __init__(self, *args, **kwargs): + super(AdministrativeActTreatmentFileSelect, self).__init__(*args, + **kwargs) + self.fields['act_type'].choices = ActType.get_types( + dct={'intented_to': 'TF'}) + self.fields['act_type'].help_text = ActType.get_help( + dct={'intented_to': 'TF'}) + self.fields['treatment_file__type'].choices = \ + models.TreatmentFileType.get_types() + self.fields['treatment_file__type'].help_text = \ + models.TreatmentFileType.get_help() + + +class AdministrativeActTreatmentFileFormSelection( + AdministrativeActOpeFormSelection): + pk = forms.IntegerField( + label="", required=False, + widget=widgets.JQueryJqGrid( + reverse_lazy('get-administrativeacttreatmentfile'), + AdministrativeActTreatmentFileSelect, AdministrativeAct), + validators=[valid_id(AdministrativeAct)]) + + +class AdministrativeActTreatmentFileForm(AdministrativeActOpeForm): + act_type = forms.ChoiceField(label=_(u"Act type"), choices=[]) + + def __init__(self, *args, **kwargs): + super(AdministrativeActTreatmentFileForm, self).__init__(*args, + **kwargs) + self.fields['act_type'].choices = ActType.get_types( + initial=self.init_data.get('act_type'), + dct={'intented_to': 'TF'}) + self.fields['act_type'].help_text = ActType.get_help( + dct={'intented_to': 'TF'}) + + +class AdministrativeActTreatmentFileModifForm( + AdministrativeActModifForm, AdministrativeActTreatmentFileForm): + pk = forms.IntegerField(required=False, widget=forms.HiddenInput) + index = forms.IntegerField(label=_("Index"), required=False) + +SourceTreatmentFormSelection = get_form_selection( + 'SourceTreatmentFormSelection', _(u"Treatment search"), 'treatment', + models.Treatment, TreatmentSelect, 'get-treatment', + _(u"You should select a treatment.")) + +SourceTreatmentFileFormSelection = get_form_selection( + 'SourceTreatmentFileFormSelection', _(u"Treatment request search"), + 'treatment_file', + models.TreatmentFile, TreatmentFileSelect, 'get-treatmentfile', + _(u"You should select a treatment request.")) + + +class TreatmentSourceSelect(SourceSelect): + treatment__name = forms.CharField( + label=_(u"Treatment name"), max_length=200) + treatment__year = forms.IntegerField(label=_(u"Treatment year")) + treatment__index = forms.IntegerField(label=_(u"Treatment index")) + treatment__internal_reference = forms.CharField( + max_length=200, label=_(u"Treatment internal reference")) + treatment__treatment_types = forms.ChoiceField(label=_(u"Treatment type"), + choices=[]) + + def __init__(self, *args, **kwargs): + super(TreatmentSourceSelect, self).__init__(*args, **kwargs) + self.fields['treatment__treatment_types'].choices = \ + models.TreatmentType.get_types() + self.fields['treatment__treatment_types'].help_text = \ + models.TreatmentType.get_help() + + +TreatmentSourceFormSelection = get_form_selection( + 'TreatmentSourceFormSelection', _(u"Documentation search"), 'pk', + models.TreatmentSource, TreatmentSourceSelect, 'get-treatmentsource', + _(u"You should select a document.")) + + +class TreatmentFileSourceSelect(SourceSelect): + treatment_file__name = forms.CharField( + label=_(u"Treatment request name"), max_length=200) + treatment_file__year = forms.IntegerField( + label=_(u"Treatment request year")) + treatment_file__index = forms.IntegerField( + label=_(u"Treatment request index")) + treatment_file__internal_reference = forms.CharField( + max_length=200, label=_(u"Treatment request internal reference")) + treatment_file__type = forms.ChoiceField(label=_(u"Treatment request type"), + choices=[]) + + def __init__(self, *args, **kwargs): + super(TreatmentFileSourceSelect, self).__init__(*args, **kwargs) + self.fields['treatment_file__type'].choices = \ + models.TreatmentFileType.get_types() + self.fields['treatment_file__type'].help_text = \ + models.TreatmentFileType.get_help() + + +TreatmentFileSourceFormSelection = get_form_selection( + 'TreatmentFileSourceFormSelection', _(u"Documentation search"), 'pk', + models.TreatmentFileSource, TreatmentFileSourceSelect, + 'get-treatmentfilesource', _(u"You should select a document.")) diff --git a/archaeological_finds/ishtar_menu.py b/archaeological_finds/ishtar_menu.py index f638a60b2..12bcfc19d 100644 --- a/archaeological_finds/ishtar_menu.py +++ b/archaeological_finds/ishtar_menu.py @@ -21,6 +21,7 @@ from django.utils.translation import ugettext_lazy as _ from ishtar_common.menu_base import SectionItem, MenuItem +from archaeological_operations.models import AdministrativeAct import models # be carreful: each access_controls must be relevant with check_rights in urls @@ -46,11 +47,6 @@ MENU_SECTIONS = [ model=models.Find, access_controls=['change_find', 'change_own_find']), - # MenuItem( - # 'treatment_creation', _(u"Add a treatment"), - # model=models.Treatment, - # access_controls=['change_find', - # 'change_own_find']), MenuItem( 'find_deletion', _(u"Deletion"), model=models.Find, @@ -99,6 +95,167 @@ MENU_SECTIONS = [ model=models.FindSource, access_controls=['change_find', 'change_own_find']), - ]) - ])) + ]), + # MenuItem( + # 'treatment_creation', _(u"Add a treatment"), + # model=models.Treatment, + # access_controls=['change_find', + # 'change_own_find']), + ])), + (60, + SectionItem( + 'treatmentfle_management', _(u"Treatment request"), + profile_restriction='warehouse', + childs=[ + MenuItem('treatmentfle_search', + _(u"Search"), + model=models.TreatmentFile, + access_controls=['view_find', + 'view_own_find']), + MenuItem('treatmentfle_creation', + _(u"Creation"), + model=models.TreatmentFile, + access_controls=['change_find', + 'change_own_find']), + MenuItem('treatmentfle_modification', + _(u"Modification"), + model=models.TreatmentFile, + access_controls=['change_find', + 'change_own_find']), + MenuItem('treatmentfle_deletion', + _(u"Deletion"), + model=models.TreatmentFile, + access_controls=['change_find', + 'change_own_find']), + SectionItem( + 'admin_act_fletreatments', _(u"Administrative act"), + childs=[ + MenuItem('treatmentfle_admacttreatmentfle_search', + _(u"Search"), + model=AdministrativeAct, + access_controls=['change_administrativeact']), + MenuItem('treatmentfle_admacttreatmentfle', + _(u"Creation"), + model=AdministrativeAct, + access_controls=['change_administrativeact']), + MenuItem('treatmentfle_admacttreatmentfle_modification', + _(u"Modification"), model=AdministrativeAct, + access_controls=['change_administrativeact']), + MenuItem('treatmentfle_admacttreatmentfle_deletion', + _(u"Deletion"), + model=AdministrativeAct, + access_controls=['change_administrativeact']), + MenuItem('treatmentfle_administrativeact_document', + _(u"Documents"), + model=AdministrativeAct, + access_controls=['change_administrativeact']), + ] + ), + SectionItem( + 'treatmentfile_source', _(u"Source"), + childs=[ + MenuItem('treatmentfile_source_search', + _(u"Search"), + model=models.TreatmentFileSource, + access_controls=['view_treatmentfile', + 'view_own_treatmentfile']), + MenuItem('treatmentfile_source_creation', + _(u"Creation"), + model=models.TreatmentFileSource, + access_controls=['change_treatmentfile', + 'change_own_treatmentfile']), + MenuItem('treatmentfile_source_modification', + _(u"Modification"), + model=models.TreatmentFileSource, + access_controls=['change_treatmentfile', + 'change_own_treatmentfile']), + MenuItem('treatmentfile_source_deletion', + _(u"Deletion"), + model=models.TreatmentFileSource, + access_controls=['change_treatmentfile', + 'change_own_treatmentfile']), + ] + ), + ] + )), + (70, + SectionItem( + 'treatment_management', _(u"Treatment"), + profile_restriction='warehouse', + childs=[ + SectionItem( + 'find_treatments', _(u"Simple treatments"), + childs=[ + MenuItem('treatment_search', + _(u"Search"), + model=models.Treatment, + access_controls=['view_find', + 'view_own_find']), + MenuItem('treatment_creation', + _(u"Creation"), + model=models.Treatment, + access_controls=['change_find', + 'change_own_find']), + MenuItem('treatment_modification', + _(u"Modification"), + model=models.Treatment, + access_controls=['change_find', + 'change_own_find']), + MenuItem('treatment_deletion', + _(u"Deletion"), + model=models.Treatment, + access_controls=['change_find', + 'change_own_find']), + ]), + SectionItem( + 'admin_act_treatments', _(u"Administrative act"), + childs=[ + MenuItem('treatment_admacttreatment_search', + _(u"Search"), + model=AdministrativeAct, + access_controls=['change_administrativeact']), + MenuItem('treatment_admacttreatment', + _(u"Creation"), + model=AdministrativeAct, + access_controls=['change_administrativeact']), + MenuItem( + 'treatment_admacttreatment_modification', + _(u"Modification"), model=AdministrativeAct, + access_controls=['change_administrativeact']), + MenuItem('treatment_admacttreatment_deletion', + _(u"Deletion"), + model=AdministrativeAct, + access_controls=['change_administrativeact']), + MenuItem('treatment_administrativeact_document', + _(u"Documents"), + model=AdministrativeAct, + access_controls=['change_administrativeact']), + ]), + SectionItem( + 'treatment_source', _(u"Source"), + childs=[ + MenuItem('treatment_source_search', + _(u"Search"), + model=models.TreatmentSource, + access_controls=['view_treatment', + 'view_own_treatment']), + MenuItem('treatment_source_creation', + _(u"Creation"), + model=models.TreatmentSource, + access_controls=['change_treatment', + 'change_own_treatment']), + MenuItem('treatment_source_modification', + _(u"Modification"), + model=models.TreatmentSource, + access_controls=['change_treatment', + 'change_own_treatment']), + MenuItem('treatment_source_deletion', + _(u"Deletion"), + model=models.TreatmentSource, + access_controls=['change_treatment', + 'change_own_treatment']), + ] + ), + ] + )), ] diff --git a/archaeological_finds/locale/django.pot b/archaeological_finds/locale/django.pot index 93a83eb05..1291d8491 100644 --- a/archaeological_finds/locale/django.pot +++ b/archaeological_finds/locale/django.pot @@ -2,756 +2,1139 @@ # Copyright (C) 2010-2015 # This file is distributed under the same license as the Ishtar package. # Étienne Loks <etienne.loks at peacefrogs net>, 2010-2015. -# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata # Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata -# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata +# Valérie-Emma Leroux <emma@iggdrasil.net>, 2017. #zanata msgid "" msgstr "" -#: forms.py:50 forms.py:54 wizards.py:60 +#: forms.py:88 forms.py:92 wizards.py:64 msgid "Context record" msgstr "" -#: forms.py:83 ishtar_menu.py:31 models.py:439 models.py:750 models.py:850 -#: models.py:1000 templates/ishtar/sheet_find.html:5 +#: forms.py:121 ishtar_menu.py:32 models_finds.py:466 models_finds.py:791 +#: models_finds.py:800 models_treatments.py:265 +#: templates/ishtar/sheet_find.html:5 msgid "Find" msgstr "" -#: forms.py:94 forms.py:218 forms.py:425 models.py:127 models.py:376 +#: forms.py:132 forms.py:263 forms.py:487 models_finds.py:127 +#: models_finds.py:394 msgid "Free ID" msgstr "" -#: forms.py:96 models.py:425 +#: forms.py:134 models_finds.py:449 msgid "Previous ID" msgstr "" -#: forms.py:97 forms.py:250 forms.py:591 models.py:131 models.py:377 -#: models.py:784 +#: forms.py:135 forms.py:295 forms_treatments.py:133 models_finds.py:131 +#: models_finds.py:395 models_treatments.py:123 msgid "Description" msgstr "" -#: forms.py:100 forms.py:252 models.py:142 +#: forms.py:138 forms.py:297 models_finds.py:142 msgid "Batch/object" msgstr "" -#: forms.py:102 models.py:405 +#: forms.py:140 models_finds.py:423 msgid "Is complete?" msgstr "" -#: forms.py:105 forms.py:240 forms.py:429 models.py:50 +#: forms.py:143 forms.py:285 forms.py:491 models_finds.py:50 msgid "Material type" msgstr "" -#: forms.py:106 forms.py:244 models.py:62 models.py:381 +#: forms.py:144 forms.py:289 models_finds.py:62 models_finds.py:399 msgid "Conservatory state" msgstr "" -#: forms.py:109 models.py:383 +#: forms.py:147 models_finds.py:401 msgid "Conservatory comment" msgstr "" -#: forms.py:112 models.py:102 models.py:408 +#: forms.py:150 models_finds.py:102 models_finds.py:426 msgid "Object types" msgstr "" -#: forms.py:114 forms.py:243 models.py:71 +#: forms.py:152 forms.py:288 models_finds.py:71 msgid "Preservation type" msgstr "" -#: forms.py:117 forms.py:246 models.py:410 +#: forms.py:155 forms.py:291 models_finds.py:428 msgid "Integrity / interest" msgstr "" -#: forms.py:120 forms.py:248 models.py:413 +#: forms.py:158 forms.py:293 models_finds.py:431 msgid "Remarkability" msgstr "" -#: forms.py:122 models.py:415 +#: forms.py:161 models_finds.py:441 +msgid "Point of topographic reference" +msgstr "" + +#: forms.py:164 models_finds.py:435 msgid "Length (cm)" msgstr "" -#: forms.py:123 models.py:416 +#: forms.py:165 models_finds.py:436 msgid "Width (cm)" msgstr "" -#: forms.py:124 models.py:417 +#: forms.py:166 models_finds.py:437 msgid "Height (cm)" msgstr "" -#: forms.py:125 models.py:418 +#: forms.py:167 models_finds.py:438 msgid "Diameter (cm)" msgstr "" -#: forms.py:126 forms.py:430 models.py:388 +#: forms.py:168 models_finds.py:439 +msgid "Thickness (cm)" +msgstr "" + +#: forms.py:169 forms.py:492 models_finds.py:406 msgid "Volume (l)" msgstr "" -#: forms.py:127 forms.py:431 models.py:389 +#: forms.py:170 forms.py:493 models_finds.py:407 msgid "Weight (g)" msgstr "" -#: forms.py:129 models.py:419 +#: forms.py:172 models_finds.py:443 msgid "Dimensions comment" msgstr "" -#: forms.py:130 forms.py:432 models.py:392 +#: forms.py:173 forms.py:494 models_finds.py:410 msgid "Find number" msgstr "" -#: forms.py:131 models.py:421 +#: forms.py:175 models_finds.py:434 +msgid "Minimum number of individuals (MNI)" +msgstr "" + +#: forms.py:176 models_finds.py:445 msgid "Mark" msgstr "" -#: forms.py:132 forms.py:254 models.py:427 +#: forms.py:177 forms.py:299 models_finds.py:451 msgid "Check" msgstr "" -#: forms.py:134 models.py:429 +#: forms.py:179 models_finds.py:453 msgid "Check date" msgstr "" -#: forms.py:135 models.py:132 models.py:422 models.py:785 +#: forms.py:180 forms_treatments.py:131 forms_treatments.py:418 +#: models_finds.py:132 models_finds.py:446 models_treatments.py:122 +#: models_treatments.py:468 msgid "Comment" msgstr "" -#: forms.py:138 models.py:423 +#: forms.py:183 models_finds.py:447 msgid "Comment on dating" msgstr "" -#: forms.py:139 models.py:431 +#: forms.py:184 models_finds.py:455 msgid "Estimated value" msgstr "" -#: forms.py:141 +#: forms.py:186 forms_treatments.py:142 msgid "Image" msgstr "" -#: forms.py:142 +#: forms.py:187 forms_treatments.py:143 #, python-format msgid "" "<p>Heavy images are resized to: %(width)dx%(height)d (ratio is preserved).</" "p>" msgstr "" -#: forms.py:181 forms.py:212 models.py:400 +#: forms.py:226 forms.py:257 models_finds.py:418 msgid "Dating" msgstr "" -#: forms.py:186 forms.py:238 +#: forms.py:231 forms.py:283 msgid "Period" msgstr "" -#: forms.py:187 forms.py:593 models.py:798 models.py:863 models.py:1005 -#: templates/ishtar/sheet_find.html:92 templates/ishtar/sheet_find.html:121 +#: forms.py:232 forms_treatments.py:137 forms_treatments.py:420 +#: models_finds.py:805 models_treatments.py:125 models_treatments.py:276 +#: templates/ishtar/sheet_find.html:102 templates/ishtar/sheet_find.html:142 msgid "Start date" msgstr "" -#: forms.py:189 forms.py:595 models.py:799 models.py:864 models.py:1006 -#: templates/ishtar/sheet_find.html:93 templates/ishtar/sheet_find.html:122 +#: forms.py:234 models_finds.py:806 models_treatments.py:277 +#: templates/ishtar/sheet_find.html:103 templates/ishtar/sheet_find.html:143 msgid "End date" msgstr "" -#: forms.py:190 +#: forms.py:235 msgid "Quality" msgstr "" -#: forms.py:192 +#: forms.py:237 msgid "Dating type" msgstr "" -#: forms.py:194 +#: forms.py:239 msgid "Precise dating" msgstr "" -#: forms.py:216 models.py:150 +#: forms.py:261 models_finds.py:150 msgid "Short ID" msgstr "" -#: forms.py:217 models.py:153 +#: forms.py:262 models_finds.py:153 msgid "Complete ID" msgstr "" -#: forms.py:221 +#: forms.py:266 forms_treatments.py:53 forms_treatments.py:95 +#: forms_treatments.py:268 forms_treatments.py:340 forms_treatments.py:390 +#: forms_treatments.py:473 models_treatments.py:98 models_treatments.py:440 msgid "Year" msgstr "" -#: forms.py:223 +#: forms.py:268 msgid "Operation's number (index by year)" msgstr "" -#: forms.py:226 +#: forms.py:271 msgid "Code PATRIARCHE" msgstr "" -#: forms.py:230 -msgid "Archaelogical site" +#: forms.py:275 +msgid "Archaeological site" msgstr "" -#: forms.py:236 -msgid "Search within operation relations" +#: forms.py:281 +msgid "Search within related operations" msgstr "" -#: forms.py:241 models.py:101 +#: forms.py:286 models_finds.py:101 msgid "Object type" msgstr "" -#: forms.py:255 +#: forms.py:300 forms_treatments.py:56 msgid "Has an image?" msgstr "" -#: forms.py:297 forms.py:310 views.py:66 +#: forms.py:342 forms.py:355 views.py:129 msgid "Find search" msgstr "" -#: forms.py:324 +#: forms.py:369 templates/ishtar/sheet_treatment.html:42 msgid "Upstream finds" msgstr "" -#: forms.py:326 models.py:440 +#: forms.py:371 models_finds.py:467 msgid "Finds" msgstr "" -#: forms.py:336 +#: forms.py:381 msgid "You should at least select one archaeological find." msgstr "" -#: forms.py:422 +#: forms.py:484 msgid "Resulting find" msgstr "" -#: forms.py:427 +#: forms.py:489 msgid "Precise description" msgstr "" -#: forms.py:442 +#: forms.py:504 msgid "Resulting finds" msgstr "" -#: forms.py:447 +#: forms.py:509 msgid "Would you like to delete this find?" msgstr "" -#: forms.py:451 +#: forms.py:513 models_treatments.py:90 msgid "Upstream find" msgstr "" -#: forms.py:462 +#: forms.py:526 msgid "Archaeological find search" msgstr "" -#: forms.py:464 +#: forms.py:528 msgid "You should select an archaeological find." msgstr "" -#: forms.py:469 +#: forms.py:533 msgid "Year of the operation" msgstr "" -#: forms.py:471 +#: forms.py:535 msgid "Numeric reference" msgstr "" -#: forms.py:478 -msgid "Period of the archaelogical find" +#: forms.py:542 +msgid "Period of the archaeological find" msgstr "" -#: forms.py:480 -msgid "Material type of the archaelogical find" +#: forms.py:544 +msgid "Material type of the archaeological find" msgstr "" -#: forms.py:482 -msgid "Description of the archaelogical find" +#: forms.py:546 +msgid "Description of the archaeological find" msgstr "" -#: forms.py:494 +#: forms.py:558 forms_treatments.py:574 forms_treatments.py:600 msgid "Documentation search" msgstr "" -#: forms.py:496 +#: forms.py:560 forms_treatments.py:576 forms_treatments.py:602 msgid "You should select a document." msgstr "" -#: forms.py:513 -msgid "Another basket already exist with this name." +#: forms.py:577 +msgid "Another basket already exists with this name." msgstr "" -#: forms.py:523 ishtar_menu.py:60 +#: forms.py:587 forms.py:591 forms_treatments.py:159 ishtar_menu.py:56 msgid "Basket" msgstr "" -#: forms.py:573 -msgid "Base treatment" +#: forms_treatments.py:51 forms_treatments.py:91 models_treatments.py:94 +#: templates/ishtar/sheet_find.html:97 templates/ishtar/sheet_find.html:137 +msgid "Label" msgstr "" -#: forms.py:578 models.py:772 models.py:787 models.py:862 +#: forms_treatments.py:52 forms_treatments.py:94 models_treatments.py:96 +msgid "Other ref." +msgstr "" + +#: forms_treatments.py:54 forms_treatments.py:221 forms_treatments.py:269 +#: forms_treatments.py:332 forms_treatments.py:341 forms_treatments.py:443 +#: forms_treatments.py:474 forms_treatments.py:541 models_treatments.py:100 +#: models_treatments.py:442 +msgid "Index" +msgstr "" + +#: forms_treatments.py:55 forms_treatments.py:100 forms_treatments.py:285 +#: forms_treatments.py:562 models_treatments.py:56 models_treatments.py:105 +#: models_treatments.py:275 msgid "Treatment type" msgstr "" -#: forms.py:580 models.py:796 models.py:867 -#: templates/ishtar/sheet_find.html:90 templates/ishtar/sheet_find.html:119 -msgid "Doer" +#: forms_treatments.py:67 forms_treatments.py:544 views.py:359 +msgid "Treatment search" +msgstr "" + +#: forms_treatments.py:79 +msgid "Base treatment" msgstr "" -#: forms.py:586 models.py:789 models.py:865 +#: forms_treatments.py:102 models_treatments.py:107 +msgid "State" +msgstr "" + +#: forms_treatments.py:104 +msgid "Target" +msgstr "" + +#: forms_treatments.py:106 forms_treatments.py:401 models_treatments.py:115 +msgid "Responsible" +msgstr "" + +#: forms_treatments.py:112 models_treatments.py:118 +msgid "Organization" +msgstr "" + +#: forms_treatments.py:118 models_treatments.py:110 models_treatments.py:278 msgid "Location" msgstr "" -#: forms.py:607 -msgid "Leave it blank if you want to select a single item" +#: forms_treatments.py:124 +msgid "Container (relevant for packaging)" +msgstr "" + +#: forms_treatments.py:130 forms_treatments.py:397 +msgid "External ref." msgstr "" -#: forms.py:614 -msgid "This treatment type is not available." +#: forms_treatments.py:135 models_treatments.py:124 +msgid "Goal" msgstr "" -#: forms.py:618 -msgid "This treatment needs a basket." +#: forms_treatments.py:139 forms_treatments.py:426 models_treatments.py:126 +#: models_treatments.py:462 +msgid "Closing date" msgstr "" -#: ishtar_menu.py:35 ishtar_menu.py:83 +#: forms_treatments.py:159 +msgid "Single find" +msgstr "" + +#: forms_treatments.py:193 +msgid "" +"The container field is attached to the treatment. If no packaging treatment " +"is done it is not relevant." +msgstr "" + +#: forms_treatments.py:198 +msgid "If a packaging treatment is done, the container field must be filled." +msgstr "" + +#: forms_treatments.py:202 +msgid "A responsible or an organization must be defined." +msgstr "" + +#: forms_treatments.py:240 +msgid "Another treatment with this index exists for {}." +msgstr "" + +#: forms_treatments.py:246 models_treatments.py:103 +msgid "Associated request" +msgstr "" + +#: forms_treatments.py:250 forms_treatments.py:381 ishtar_menu.py:107 +#: models_treatments.py:473 models_treatments.py:495 models_treatments.py:556 +#: wizards.py:183 templates/ishtar/sheet_treatmentfile.html:5 +msgid "Treatment request" +msgstr "" + +#: forms_treatments.py:259 +msgid "" +"Are you sure you want to delete this treatment? All changes made to the " +"associated finds since this treatment record will be lost!" +msgstr "" + +#: forms_treatments.py:262 +msgid "Would you like to delete this treatment?" +msgstr "" + +#: forms_treatments.py:270 forms_treatments.py:318 forms_treatments.py:475 +#: forms_treatments.py:526 +msgid "Act type" +msgstr "" + +#: forms_treatments.py:271 forms_treatments.py:476 +msgid "Indexed?" +msgstr "" + +#: forms_treatments.py:272 forms_treatments.py:477 models_finds.py:120 +msgid "Object" +msgstr "" + +#: forms_treatments.py:276 forms_treatments.py:481 +msgid "Signature date after" +msgstr "" + +#: forms_treatments.py:278 forms_treatments.py:483 +msgid "Signature date before" +msgstr "" + +#: forms_treatments.py:280 forms_treatments.py:557 +msgid "Treatment name" +msgstr "" + +#: forms_treatments.py:281 forms_treatments.py:558 +msgid "Treatment year" +msgstr "" + +#: forms_treatments.py:282 forms_treatments.py:559 +msgid "Treatment index" +msgstr "" + +#: forms_treatments.py:284 forms_treatments.py:561 +msgid "Treatment internal reference" +msgstr "" + +#: forms_treatments.py:288 forms_treatments.py:495 +msgid "Modified by" +msgstr "" + +#: forms_treatments.py:338 forms_treatments.py:388 models_treatments.py:447 +msgid "Name" +msgstr "" + +#: forms_treatments.py:339 forms_treatments.py:395 +msgid "Internal ref." +msgstr "" + +#: forms_treatments.py:342 forms_treatments.py:399 +#: templates/ishtar/sheet_find.html:98 templates/ishtar/sheet_find.html:138 +#: templates/ishtar/sheet_find.html:216 +msgid "Type" +msgstr "" + +#: forms_treatments.py:344 +msgid "In charge" +msgstr "" + +#: forms_treatments.py:350 forms_treatments.py:407 models_treatments.py:456 +#: templates/ishtar/sheet_treatmentfile.html:31 +msgid "Applicant" +msgstr "" + +#: forms_treatments.py:356 forms_treatments.py:413 models_treatments.py:460 +#: templates/ishtar/sheet_treatmentfile.html:38 +msgid "Applicant organisation" +msgstr "" + +#: forms_treatments.py:369 forms_treatments.py:549 views.py:463 +msgid "Treatment request search" +msgstr "" + +#: forms_treatments.py:423 models_treatments.py:466 +msgid "Reception date" +msgstr "" + +#: forms_treatments.py:462 +msgid "Another treatment request with this index exists for {}." +msgstr "" + +#: forms_treatments.py:468 +msgid "Are you sure you want to delete this treatment request?" +msgstr "" + +#: forms_treatments.py:469 +msgid "Would you like to delete this treatment request?" +msgstr "" + +#: forms_treatments.py:485 forms_treatments.py:581 +msgid "Treatment request name" +msgstr "" + +#: forms_treatments.py:487 forms_treatments.py:583 +msgid "Treatment request year" +msgstr "" + +#: forms_treatments.py:489 forms_treatments.py:585 +msgid "Treatment request index" +msgstr "" + +#: forms_treatments.py:491 forms_treatments.py:587 +msgid "Treatment request internal reference" +msgstr "" + +#: forms_treatments.py:492 forms_treatments.py:588 models_treatments.py:425 +#: models_treatments.py:449 +msgid "Treatment request type" +msgstr "" + +#: forms_treatments.py:546 +msgid "You should select a treatment." +msgstr "" + +#: forms_treatments.py:552 +msgid "You should select a treatment request." +msgstr "" + +#: ishtar_menu.py:36 ishtar_menu.py:79 ishtar_menu.py:111 ishtar_menu.py:134 +#: ishtar_menu.py:158 ishtar_menu.py:190 ishtar_menu.py:214 ishtar_menu.py:238 msgid "Search" msgstr "" -#: ishtar_menu.py:40 ishtar_menu.py:63 ishtar_menu.py:88 +#: ishtar_menu.py:41 ishtar_menu.py:59 ishtar_menu.py:84 ishtar_menu.py:116 +#: ishtar_menu.py:138 ishtar_menu.py:163 ishtar_menu.py:195 ishtar_menu.py:218 +#: ishtar_menu.py:243 msgid "Creation" msgstr "" -#: ishtar_menu.py:45 ishtar_menu.py:93 +#: ishtar_menu.py:46 ishtar_menu.py:89 ishtar_menu.py:121 ishtar_menu.py:142 +#: ishtar_menu.py:168 ishtar_menu.py:200 ishtar_menu.py:223 ishtar_menu.py:248 msgid "Modification" msgstr "" -#: ishtar_menu.py:55 ishtar_menu.py:74 ishtar_menu.py:98 +#: ishtar_menu.py:51 ishtar_menu.py:70 ishtar_menu.py:94 ishtar_menu.py:126 +#: ishtar_menu.py:145 ishtar_menu.py:173 ishtar_menu.py:205 ishtar_menu.py:226 +#: ishtar_menu.py:253 msgid "Deletion" msgstr "" -#: ishtar_menu.py:68 +#: ishtar_menu.py:64 msgid "Manage items" msgstr "" -#: ishtar_menu.py:80 +#: ishtar_menu.py:76 msgid "Documentation" msgstr "" -#: models.py:43 +#: ishtar_menu.py:131 ishtar_menu.py:211 models_finds.py:802 +msgid "Administrative act" +msgstr "" + +#: ishtar_menu.py:149 ishtar_menu.py:230 templates/ishtar/sheet_find.html:211 +#: templates/ishtar/sheet_find.html:213 +msgid "Documents" +msgstr "" + +#: ishtar_menu.py:155 ishtar_menu.py:235 +msgid "Source" +msgstr "" + +#: ishtar_menu.py:183 models_treatments.py:135 models_treatments.py:267 +#: models_treatments.py:540 templates/ishtar/sheet_treatment.html:5 +msgid "Treatment" +msgstr "" + +#: ishtar_menu.py:187 +msgid "Simple treatments" +msgstr "" + +#: models_finds.py:43 msgid "Code" msgstr "" -#: models.py:44 +#: models_finds.py:44 msgid "Recommendation" msgstr "" -#: models.py:47 +#: models_finds.py:47 msgid "Parent material" msgstr "" -#: models.py:51 models.py:379 +#: models_finds.py:51 models_finds.py:397 msgid "Material types" msgstr "" -#: models.py:59 +#: models_finds.py:59 msgid "Parent conservatory state" msgstr "" -#: models.py:63 +#: models_finds.py:63 msgid "Conservatory states" msgstr "" -#: models.py:72 +#: models_finds.py:72 msgid "Preservation types" msgstr "" -#: models.py:80 +#: models_finds.py:80 msgid "Integrity / interest type" msgstr "" -#: models.py:81 +#: models_finds.py:81 msgid "Integrity / interest types" msgstr "" -#: models.py:89 +#: models_finds.py:89 msgid "Remarkability type" msgstr "" -#: models.py:90 +#: models_finds.py:90 msgid "Remarkability types" msgstr "" -#: models.py:98 +#: models_finds.py:98 msgid "Parent" msgstr "" -#: models.py:119 +#: models_finds.py:119 msgid "Unknow" msgstr "" -#: models.py:120 -msgid "Object" -msgstr "" - -#: models.py:121 +#: models_finds.py:121 msgid "Batch" msgstr "" -#: models.py:128 models.py:372 models.py:780 +#: models_finds.py:128 models_finds.py:390 models_treatments.py:120 +#: models_treatments.py:445 msgid "External ID" msgstr "" -#: models.py:130 models.py:374 +#: models_finds.py:130 models_finds.py:392 msgid "External ID is set automatically" msgstr "" -#: models.py:134 +#: models_finds.py:134 msgid "Topographic localisation" msgstr "" -#: models.py:135 +#: models_finds.py:135 msgid "Special interest" msgstr "" -#: models.py:139 +#: models_finds.py:139 msgid "Context Record" msgstr "" -#: models.py:140 +#: models_finds.py:140 msgid "Discovery date" msgstr "" -#: models.py:145 +#: models_finds.py:145 msgid "Material index" msgstr "" -#: models.py:146 +#: models_finds.py:146 msgid "Point" msgstr "" -#: models.py:147 +#: models_finds.py:147 msgid "Line" msgstr "" -#: models.py:148 +#: models_finds.py:148 msgid "Polygon" msgstr "" -#: models.py:151 models.py:154 +#: models_finds.py:151 models_finds.py:154 msgid "Cached value - do not edit" msgstr "" -#: models.py:159 models.py:370 +#: models_finds.py:159 models_finds.py:388 msgid "Base find" msgstr "" -#: models.py:160 +#: models_finds.py:160 msgid "Base finds" msgstr "" -#: models.py:162 +#: models_finds.py:162 msgid "Can view all Base finds" msgstr "" -#: models.py:163 +#: models_finds.py:163 msgid "Can view own Base find" msgstr "" -#: models.py:164 +#: models_finds.py:164 msgid "Can add own Base find" msgstr "" -#: models.py:165 +#: models_finds.py:165 msgid "Can change own Base find" msgstr "" -#: models.py:166 +#: models_finds.py:166 msgid "Can delete own Base find" msgstr "" -#: models.py:275 +#: models_finds.py:276 msgid "g" msgstr "" -#: models.py:276 +#: models_finds.py:277 msgid "kg" msgstr "" -#: models.py:278 +#: models_finds.py:279 msgid "Not checked" msgstr "" -#: models.py:279 +#: models_finds.py:280 msgid "Checked but incorrect" msgstr "" -#: models.py:280 +#: models_finds.py:281 msgid "Checked and correct" msgstr "" -#: models.py:320 +#: models_finds.py:315 +msgid "Periods" +msgstr "" + +#: models_finds.py:316 models_finds.py:421 models_treatments.py:127 +#: models_treatments.py:279 templates/ishtar/sheet_find.html:101 +#: templates/ishtar/sheet_find.html:141 +msgid "Container" +msgstr "" + +#: models_finds.py:326 msgid "Base find - Short ID" msgstr "" -#: models.py:321 +#: models_finds.py:327 msgid "Base find - Complete ID" msgstr "" -#: models.py:322 +#: models_finds.py:328 msgid "Base find - Comment" msgstr "" -#: models.py:323 +#: models_finds.py:329 msgid "Base find - Description" msgstr "" -#: models.py:324 +#: models_finds.py:330 msgid "Base find - Topographic localisation" msgstr "" -#: models.py:326 +#: models_finds.py:332 msgid "Base find - Special interest" msgstr "" -#: models.py:327 +#: models_finds.py:333 msgid "Base find - Discovery date" msgstr "" -#: models.py:375 models.py:856 +#: models_finds.py:393 models_treatments.py:40 models_treatments.py:271 msgid "Order" msgstr "" -#: models.py:386 +#: models_finds.py:404 msgid "Type of preservation to consider" msgstr "" -#: models.py:390 +#: models_finds.py:408 msgid "Weight unit" msgstr "" -#: models.py:396 templates/ishtar/sheet_find.html:83 +#: models_finds.py:414 templates/ishtar/sheet_find.html:90 msgid "Upstream treatment" msgstr "" -#: models.py:399 templates/ishtar/sheet_find.html:112 +#: models_finds.py:417 templates/ishtar/sheet_find.html:130 msgid "Downstream treatment" msgstr "" -#: models.py:403 models.py:782 models.py:866 -#: templates/ishtar/sheet_find.html:91 templates/ishtar/sheet_find.html:120 -msgid "Container" +#: models_finds.py:458 +msgid "Collection" msgstr "" -#: models.py:433 +#: models_finds.py:460 models_treatments.py:131 models_treatments.py:469 msgid "Cached name" msgstr "" -#: models.py:442 +#: models_finds.py:469 msgid "Can view all Finds" msgstr "" -#: models.py:443 +#: models_finds.py:470 msgid "Can view own Find" msgstr "" -#: models.py:444 +#: models_finds.py:471 msgid "Can add own Find" msgstr "" -#: models.py:445 +#: models_finds.py:472 msgid "Can change own Find" msgstr "" -#: models.py:446 +#: models_finds.py:473 msgid "Can delete own Find" msgstr "" -#: models.py:452 +#: models_finds.py:479 msgid "FIND" msgstr "" -#: models.py:748 +#: models_finds.py:789 msgid "Find documentation" msgstr "" -#: models.py:749 +#: models_finds.py:790 msgid "Find documentations" msgstr "" -#: models.py:759 +#: models_finds.py:803 +msgid "Person" +msgstr "" + +#: models_finds.py:809 +msgid "Property" +msgstr "" + +#: models_finds.py:810 +msgid "Properties" +msgstr "" + +#: models_treatments.py:41 +msgid "Parent type" +msgstr "" + +#: models_treatments.py:43 msgid "Virtual" msgstr "" -#: models.py:761 +#: models_treatments.py:45 msgid "Upstream is many" msgstr "" -#: models.py:763 +#: models_treatments.py:47 msgid "Check this if for this treatment from many finds you'll get one." msgstr "" -#: models.py:766 +#: models_treatments.py:50 msgid "Downstream is many" msgstr "" -#: models.py:768 +#: models_treatments.py:52 msgid "Check this if for this treatment from one find you'll get many." msgstr "" -#: models.py:773 +#: models_treatments.py:57 msgid "Treatment types" msgstr "" -#: models.py:791 -msgid "Location where the treatment is done. Target warehouse for a move." +#: models_treatments.py:65 +msgid "Treatment state type" msgstr "" -#: models.py:793 -msgid "Other location" +#: models_treatments.py:66 +msgid "Treatment state types" msgstr "" -#: models.py:803 models.py:852 models.py:992 -msgid "Treatment" +#: models_treatments.py:89 +msgid "Downstream find" msgstr "" -#: models.py:804 templates/ishtar/sheet_find.html:80 +#: models_treatments.py:112 +msgid "Location where the treatment is done. Target warehouse for a move." +msgstr "" + +#: models_treatments.py:129 +msgid "Target a basket" +msgstr "" + +#: models_treatments.py:136 templates/ishtar/sheet_find.html:87 +#: templates/ishtar/sheet_treatmentfile.html:45 msgid "Treatments" msgstr "" -#: models.py:806 +#: models_treatments.py:139 msgid "Can view all Treatments" msgstr "" -#: models.py:807 +#: models_treatments.py:140 msgid "Can view own Treatment" msgstr "" -#: models.py:808 +#: models_treatments.py:141 msgid "Can add own Treatment" msgstr "" -#: models.py:809 +#: models_treatments.py:142 msgid "Can change own Treatment" msgstr "" -#: models.py:810 +#: models_treatments.py:143 msgid "Can delete own Treatment" msgstr "" -#: models.py:816 -msgid "by" +#: models_treatments.py:155 +msgid "TREATMENT" +msgstr "" + +#: models_treatments.py:280 templates/ishtar/sheet_find.html:100 +#: templates/ishtar/sheet_find.html:140 +msgid "Doer" msgstr "" -#: models.py:868 models.py:869 templates/ishtar/sheet_find.html:89 -#: templates/ishtar/sheet_find.html:118 +#: models_treatments.py:281 models_treatments.py:282 +#: templates/ishtar/sheet_find.html:99 templates/ishtar/sheet_find.html:139 msgid "Related finds" msgstr "" -#: models.py:978 +#: models_treatments.py:414 msgid "Is upstream" msgstr "" -#: models.py:989 -msgid "Treatment documentation" +#: models_treatments.py:426 +msgid "Treatment request types" msgstr "" -#: models.py:990 -msgid "Treament documentations" +#: models_treatments.py:443 +msgid "Internal reference" msgstr "" -#: models.py:1002 -msgid "Administrative act" +#: models_treatments.py:452 +msgid "Person in charge" msgstr "" -#: models.py:1003 -msgid "Person" +#: models_treatments.py:464 +msgid "Creation date" msgstr "" -#: models.py:1009 -msgid "Property" +#: models_treatments.py:474 +msgid "Treatment requests" msgstr "" -#: models.py:1010 -msgid "Properties" +#: models_treatments.py:478 +msgid "Can view all Treatment requests" +msgstr "" + +#: models_treatments.py:480 +msgid "Can view own Treatment request" +msgstr "" + +#: models_treatments.py:482 +msgid "Can add own Treatment request" +msgstr "" + +#: models_treatments.py:484 +msgid "Can change own Treatment request" +msgstr "" + +#: models_treatments.py:486 +msgid "Can delete own Treatment request" +msgstr "" + +#: models_treatments.py:546 +msgid "Treatment documentation" +msgstr "" + +#: models_treatments.py:547 +msgid "Treament documentations" +msgstr "" + +#: models_treatments.py:563 +msgid "Treatment request documentation" +msgstr "" + +#: models_treatments.py:564 +msgid "Treatment request documentations" msgstr "" -#: views.py:61 +#: views.py:124 msgid "New find" msgstr "" -#: views.py:75 +#: views.py:138 msgid "Find modification" msgstr "" -#: views.py:90 +#: views.py:153 msgid "Find deletion" msgstr "" -#: views.py:95 +#: views.py:158 msgid "Find: source search" msgstr "" -#: views.py:103 +#: views.py:166 msgid "Find: new source" msgstr "" -#: views.py:111 +#: views.py:174 msgid "Find: source modification" msgstr "" -#: views.py:126 +#: views.py:189 msgid "Find: source deletion" msgstr "" -#: views.py:140 +#: views.py:203 msgid "New basket" msgstr "" -#: views.py:159 +#: views.py:222 msgid "Manage items in basket" msgstr "" -#: views.py:179 +#: views.py:242 msgid "Manage basket" msgstr "" -#: views.py:267 +#: views.py:330 msgid "Delete basket" msgstr "" -#: views.py:303 +#: views.py:380 msgid "New treatment" msgstr "" -#: wizards.py:59 +#: views.py:388 views.py:480 +msgid "Modify" +msgstr "" + +#: views.py:405 +msgid "Treatment deletion" +msgstr "" + +#: views.py:412 +msgid "Treatment: search administrative act" +msgstr "" + +#: views.py:421 +msgid "Treatment: new administrative act" +msgstr "" + +#: views.py:431 +msgid "Treatment: administrative act modification" +msgstr "" + +#: views.py:440 +msgid "Treatment: administrative act deletion" +msgstr "" + +#: views.py:473 +msgid "New treatment request" +msgstr "" + +#: views.py:496 +msgid "Treatment request deletion" +msgstr "" + +#: views.py:503 +msgid "Treatment request: search administrative act" +msgstr "" + +#: views.py:513 +msgid "Treatment request: new administrative act" +msgstr "" + +#: views.py:523 +msgid "Treatment request: administrative act modification" +msgstr "" + +#: views.py:532 +msgid "Treatment request: administrative act deletion" +msgstr "" + +#: views.py:558 +msgid "Treatment: source search" +msgstr "" + +#: views.py:573 +msgid "Treatment: source modification" +msgstr "" + +#: views.py:588 +msgid "Treatment: source deletion" +msgstr "" + +#: views.py:601 +msgid "Treatment request: source search" +msgstr "" + +#: views.py:617 +msgid "Treatment request: source modification" +msgstr "" + +#: views.py:635 +msgid "Treatment request: source deletion" +msgstr "" + +#: wizards.py:63 wizards.py:195 msgid "Operation" msgstr "" -#: templates/ishtar/sheet_find.html:88 templates/ishtar/sheet_find.html:117 -#: templates/ishtar/sheet_find.html:187 -msgid "Type" +#: templates/ishtar/sheet_find.html:79 +msgid "Warehouse" +msgstr "" + +#: templates/ishtar/sheet_find.html:96 templates/ishtar/sheet_find.html:136 +msgid "Year - index" msgstr "" -#: templates/ishtar/sheet_find.html:108 +#: templates/ishtar/sheet_find.html:126 msgid "Export as CSV" msgstr "" -#: templates/ishtar/sheet_find.html:108 templates/ishtar/sheet_find.html:138 +#: templates/ishtar/sheet_find.html:126 templates/ishtar/sheet_find.html:167 msgid "CSV" msgstr "" -#: templates/ishtar/sheet_find.html:143 +#: templates/ishtar/sheet_find.html:172 msgid "Associated base finds" msgstr "" -#: templates/ishtar/sheet_find.html:182 templates/ishtar/sheet_find.html:184 -msgid "Documents" -msgstr "" - -#: templates/ishtar/sheet_find.html:186 +#: templates/ishtar/sheet_find.html:215 msgid "Title" msgstr "" -#: templates/ishtar/sheet_find.html:188 +#: templates/ishtar/sheet_find.html:217 msgid "Authors" msgstr "" -#: templates/ishtar/sheet_find.html:189 +#: templates/ishtar/sheet_find.html:218 msgid "Link" msgstr "" @@ -762,3 +1145,35 @@ msgstr "" #: templates/ishtar/sheet_findsource.html:4 msgid "Find source" msgstr "" + +#: templates/ishtar/sheet_treatment.html:20 +msgctxt "Treatment" +msgid "Closed" +msgstr "" + +#: templates/ishtar/sheet_treatment.html:22 +msgctxt "Treatment" +msgid "Active" +msgstr "" + +#: templates/ishtar/sheet_treatment.html:47 +msgid "Downstream finds" +msgstr "" + +#: templates/ishtar/sheet_treatmentfile.html:16 +msgctxt "Treatment request" +msgid "Closed" +msgstr "" + +#: templates/ishtar/sheet_treatmentfile.html:18 +msgctxt "Treatment request" +msgid "Active" +msgstr "" + +#: templates/ishtar/sheet_treatmentfilesource.html:4 +msgid "Treatment request source" +msgstr "" + +#: templates/ishtar/sheet_treatmentsource.html:4 +msgid "Treatment source" +msgstr "" diff --git a/archaeological_finds/migrations/0001_initial.py b/archaeological_finds/migrations/0001_initial.py index 4b23372c0..a34da2d69 100644 --- a/archaeological_finds/migrations/0001_initial.py +++ b/archaeological_finds/migrations/0001_initial.py @@ -7,6 +7,12 @@ from django.db import models class Migration(SchemaMigration): + depends_on = ( + ('archaeological_context_records', '0001_initial.py'), + ('archaeological_warehouse', + '0003_auto__add_warehousedivisionlink__add_unique_warehousedivisionlink_ware.py'), + ) + def forwards(self, orm): # Adding model 'MaterialType' db.create_table('archaeological_finds_materialtype', ( @@ -1331,4 +1337,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['archaeological_finds']
\ No newline at end of file + complete_apps = ['archaeological_finds'] diff --git a/archaeological_finds/migrations/0013_auto__add_treatmentfilesource__add_treatmentfile__add_unique_treatment.py b/archaeological_finds/migrations/0013_auto__add_treatmentfilesource__add_treatmentfile__add_unique_treatment.py new file mode 100644 index 000000000..fedb39be8 --- /dev/null +++ b/archaeological_finds/migrations/0013_auto__add_treatmentfilesource__add_treatmentfile__add_unique_treatment.py @@ -0,0 +1,1641 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'TreatmentFileSource' + db.create_table('archaeological_finds_treatmentfilesource', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('image', self.gf('django.db.models.fields.files.ImageField')(max_length=255, null=True, blank=True)), + ('thumbnail', self.gf('django.db.models.fields.files.ImageField')(max_length=255, null=True, blank=True)), + ('title', self.gf('django.db.models.fields.CharField')(max_length=300)), + ('external_id', self.gf('django.db.models.fields.CharField')(max_length=12, null=True, blank=True)), + ('source_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ishtar_common.SourceType'])), + ('support_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ishtar_common.SupportType'], null=True, blank=True)), + ('format_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ishtar_common.Format'], null=True, blank=True)), + ('scale', self.gf('django.db.models.fields.CharField')(max_length=30, null=True, blank=True)), + ('associated_url', self.gf('django.db.models.fields.URLField')(max_length=200, null=True, blank=True)), + ('receipt_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)), + ('creation_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)), + ('receipt_date_in_documentation', self.gf('django.db.models.fields.DateField')(null=True, blank=True)), + ('item_number', self.gf('django.db.models.fields.IntegerField')(default=1)), + ('reference', self.gf('django.db.models.fields.CharField')(max_length=100, null=True, blank=True)), + ('internal_reference', self.gf('django.db.models.fields.CharField')(max_length=100, null=True, blank=True)), + ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('comment', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('additional_information', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('duplicate', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('treatment_file', self.gf('django.db.models.fields.related.ForeignKey')(related_name='source', to=orm['archaeological_finds.TreatmentFile'])), + )) + db.send_create_signal('archaeological_finds', ['TreatmentFileSource']) + + # Adding M2M table for field authors on 'TreatmentFileSource' + db.create_table('archaeological_finds_treatmentfilesource_authors', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('treatmentfilesource', models.ForeignKey(orm['archaeological_finds.treatmentfilesource'], null=False)), + ('author', models.ForeignKey(orm['ishtar_common.author'], null=False)) + )) + db.create_unique('archaeological_finds_treatmentfilesource_authors', ['treatmentfilesource_id', 'author_id']) + + # Adding model 'TreatmentFile' + db.create_table('archaeological_finds_treatmentfile', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('history_modifier', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='+', null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('history_creator', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='+', null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('year', self.gf('django.db.models.fields.IntegerField')(default=2017)), + ('index', self.gf('django.db.models.fields.IntegerField')(default=1)), + ('internal_reference', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)), + ('external_id', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)), + ('name', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['archaeological_finds.TreatmentFileType'])), + ('in_charge', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='treatmentfile_responsability', null=True, on_delete=models.SET_NULL, to=orm['ishtar_common.Person'])), + ('applicant', self.gf('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', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='treatmentfile_applicant', null=True, on_delete=models.SET_NULL, to=orm['ishtar_common.Organization'])), + ('end_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)), + ('creation_date', self.gf('django.db.models.fields.DateField')(default=datetime.date.today, null=True, blank=True)), + ('reception_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)), + ('comment', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('cached_label', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + )) + db.send_create_signal('archaeological_finds', ['TreatmentFile']) + + # Adding M2M table for field imports on 'TreatmentFile' + db.create_table('archaeological_finds_treatmentfile_imports', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('treatmentfile', models.ForeignKey(orm['archaeological_finds.treatmentfile'], null=False)), + ('import', models.ForeignKey(orm['ishtar_common.import'], null=False)) + )) + db.create_unique('archaeological_finds_treatmentfile_imports', ['treatmentfile_id', 'import_id']) + + # Adding unique constraint on 'TreatmentFile', fields ['year', 'index'] + db.create_unique('archaeological_finds_treatmentfile', ['year', 'index']) + + # Adding model 'HistoricalTreatmentFile' + db.create_table('archaeological_finds_historicaltreatmentfile', ( + ('id', self.gf('django.db.models.fields.IntegerField')(db_index=True, blank=True)), + ('history_modifier_id', self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True)), + ('history_creator_id', self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True)), + ('year', self.gf('django.db.models.fields.IntegerField')(default=2017)), + ('index', self.gf('django.db.models.fields.IntegerField')(default=1)), + ('internal_reference', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)), + ('external_id', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)), + ('name', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('type_id', self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True)), + ('in_charge_id', self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True)), + ('applicant_id', self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True)), + ('applicant_organisation_id', self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True)), + ('end_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)), + ('creation_date', self.gf('django.db.models.fields.DateField')(default=datetime.date.today, null=True, blank=True)), + ('reception_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)), + ('comment', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('cached_label', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('history_id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('history_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('history_user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True)), + ('history_type', self.gf('django.db.models.fields.CharField')(max_length=1)), + )) + db.send_create_signal('archaeological_finds', ['HistoricalTreatmentFile']) + + # Adding model 'TreatmentState' + db.create_table('archaeological_finds_treatmentstate', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('label', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('txt_idx', self.gf('django.db.models.fields.CharField')(unique=True, max_length=100)), + ('comment', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('available', self.gf('django.db.models.fields.BooleanField')(default=True)), + )) + db.send_create_signal('archaeological_finds', ['TreatmentState']) + + # Adding model 'TreatmentFileType' + db.create_table('archaeological_finds_treatmentfiletype', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('label', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('txt_idx', self.gf('django.db.models.fields.CharField')(unique=True, max_length=100)), + ('comment', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('available', self.gf('django.db.models.fields.BooleanField')(default=True)), + )) + db.send_create_signal('archaeological_finds', ['TreatmentFileType']) + + # Adding field 'HistoricalFind.min_number_of_individuals' + db.add_column('archaeological_finds_historicalfind', 'min_number_of_individuals', + self.gf('django.db.models.fields.IntegerField')(null=True, blank=True), + keep_default=False) + + # Adding field 'HistoricalFind.thickness' + db.add_column('archaeological_finds_historicalfind', 'thickness', + self.gf('django.db.models.fields.FloatField')(null=True, blank=True), + keep_default=False) + + # Adding field 'HistoricalFind.topographic_reference_point' + db.add_column('archaeological_finds_historicalfind', 'topographic_reference_point', + self.gf('django.db.models.fields.CharField')(max_length=20, null=True, blank=True), + keep_default=False) + + # Adding field 'HistoricalFind.collection_id' + db.add_column('archaeological_finds_historicalfind', 'collection_id', + self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True), + keep_default=False) + + # Adding field 'TreatmentType.order' + db.add_column('archaeological_finds_treatmenttype', 'order', + self.gf('django.db.models.fields.IntegerField')(default=10), + keep_default=False) + + # Adding field 'TreatmentType.parent' + db.add_column('archaeological_finds_treatmenttype', 'parent', + self.gf('django.db.models.fields.related.ForeignKey')(to=orm['archaeological_finds.TreatmentType'], null=True, blank=True), + keep_default=False) + + # Adding field 'Find.min_number_of_individuals' + db.add_column('archaeological_finds_find', 'min_number_of_individuals', + self.gf('django.db.models.fields.IntegerField')(null=True, blank=True), + keep_default=False) + + # Adding field 'Find.thickness' + db.add_column('archaeological_finds_find', 'thickness', + self.gf('django.db.models.fields.FloatField')(null=True, blank=True), + keep_default=False) + + # Adding field 'Find.topographic_reference_point' + db.add_column('archaeological_finds_find', 'topographic_reference_point', + self.gf('django.db.models.fields.CharField')(max_length=20, null=True, blank=True), + keep_default=False) + + # Adding field 'Find.collection' + db.add_column('archaeological_finds_find', 'collection', + self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='finds', null=True, on_delete=models.SET_NULL, to=orm['archaeological_warehouse.Collection']), + keep_default=False) + + + # Changing field 'Find.upstream_treatment' + db.alter_column('archaeological_finds_find', 'upstream_treatment_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm['archaeological_finds.Treatment'])) + + # Changing field 'Find.downstream_treatment' + db.alter_column('archaeological_finds_find', 'downstream_treatment_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm['archaeological_finds.Treatment'])) + + # Changing field 'Find.conservatory_state' + db.alter_column('archaeological_finds_find', 'conservatory_state_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['archaeological_finds.ConservatoryState'], null=True, on_delete=models.SET_NULL)) + + # Changing field 'Find.container' + db.alter_column('archaeological_finds_find', 'container_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm['archaeological_warehouse.Container'])) + # Deleting field 'HistoricalTreatment.treatment_type_id' + db.delete_column('archaeological_finds_historicaltreatment', 'treatment_type_id') + + # Deleting field 'HistoricalTreatment.other_location' + db.delete_column('archaeological_finds_historicaltreatment', 'other_location') + + # Adding field 'HistoricalTreatment.image' + db.add_column('archaeological_finds_historicaltreatment', 'image', + self.gf('django.db.models.fields.files.ImageField')(max_length=255, null=True, blank=True), + keep_default=False) + + # Adding field 'HistoricalTreatment.thumbnail' + db.add_column('archaeological_finds_historicaltreatment', 'thumbnail', + self.gf('django.db.models.fields.files.ImageField')(max_length=255, null=True, blank=True), + keep_default=False) + + # Adding field 'HistoricalTreatment.label' + db.add_column('archaeological_finds_historicaltreatment', 'label', + self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True), + keep_default=False) + + # Adding field 'HistoricalTreatment.other_reference' + db.add_column('archaeological_finds_historicaltreatment', 'other_reference', + self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True), + keep_default=False) + + # Adding field 'HistoricalTreatment.year' + db.add_column('archaeological_finds_historicaltreatment', 'year', + self.gf('django.db.models.fields.IntegerField')(default=2017), + keep_default=False) + + # Adding field 'HistoricalTreatment.index' + db.add_column('archaeological_finds_historicaltreatment', 'index', + self.gf('django.db.models.fields.IntegerField')(default=1), + keep_default=False) + + # Adding field 'HistoricalTreatment.file_id' + db.add_column('archaeological_finds_historicaltreatment', 'file_id', + self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True), + keep_default=False) + + # Adding field 'HistoricalTreatment.treatment_state_id' + db.add_column('archaeological_finds_historicaltreatment', 'treatment_state_id', + self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True), + keep_default=False) + + # Adding field 'HistoricalTreatment.organization_id' + db.add_column('archaeological_finds_historicaltreatment', 'organization_id', + self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True), + keep_default=False) + + # Adding field 'HistoricalTreatment.goal' + db.add_column('archaeological_finds_historicaltreatment', 'goal', + self.gf('django.db.models.fields.TextField')(null=True, blank=True), + keep_default=False) + + # Adding field 'HistoricalTreatment.target_is_basket' + db.add_column('archaeological_finds_historicaltreatment', 'target_is_basket', + self.gf('django.db.models.fields.BooleanField')(default=False), + keep_default=False) + + # Adding field 'HistoricalTreatment.cached_label' + db.add_column('archaeological_finds_historicaltreatment', 'cached_label', + self.gf('django.db.models.fields.TextField')(null=True, blank=True), + keep_default=False) + + + # Changing field 'HistoricalTreatment.external_id' + db.alter_column('archaeological_finds_historicaltreatment', 'external_id', self.gf('django.db.models.fields.CharField')(max_length=200, null=True)) + # Deleting field 'Treatment.treatment_type' + db.delete_column('archaeological_finds_treatment', 'treatment_type_id') + + # Deleting field 'Treatment.other_location' + db.delete_column('archaeological_finds_treatment', 'other_location') + + # Adding field 'Treatment.image' + db.add_column('archaeological_finds_treatment', 'image', + self.gf('django.db.models.fields.files.ImageField')(max_length=255, null=True, blank=True), + keep_default=False) + + # Adding field 'Treatment.thumbnail' + db.add_column('archaeological_finds_treatment', 'thumbnail', + self.gf('django.db.models.fields.files.ImageField')(max_length=255, null=True, blank=True), + keep_default=False) + + # Adding field 'Treatment.label' + db.add_column('archaeological_finds_treatment', 'label', + self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True), + keep_default=False) + + # Adding field 'Treatment.other_reference' + db.add_column('archaeological_finds_treatment', 'other_reference', + self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True), + keep_default=False) + + # Adding field 'Treatment.year' + db.add_column('archaeological_finds_treatment', 'year', + self.gf('django.db.models.fields.IntegerField')(default=2017), + keep_default=False) + + # Adding field 'Treatment.index' + db.add_column('archaeological_finds_treatment', 'index', + self.gf('django.db.models.fields.IntegerField')(default=1), + keep_default=False) + + # Adding field 'Treatment.file' + db.add_column('archaeological_finds_treatment', 'file', + self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='treatments', null=True, to=orm['archaeological_finds.TreatmentFile']), + keep_default=False) + + # Adding field 'Treatment.treatment_state' + db.add_column('archaeological_finds_treatment', 'treatment_state', + self.gf('django.db.models.fields.related.ForeignKey')(to=orm['archaeological_finds.TreatmentState'], null=True, blank=True), + keep_default=False) + + # Adding field 'Treatment.organization' + db.add_column('archaeological_finds_treatment', 'organization', + self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='treatments', null=True, on_delete=models.SET_NULL, to=orm['ishtar_common.Organization']), + keep_default=False) + + # Adding field 'Treatment.goal' + db.add_column('archaeological_finds_treatment', 'goal', + self.gf('django.db.models.fields.TextField')(null=True, blank=True), + keep_default=False) + + # Adding field 'Treatment.target_is_basket' + db.add_column('archaeological_finds_treatment', 'target_is_basket', + self.gf('django.db.models.fields.BooleanField')(default=False), + keep_default=False) + + # Adding field 'Treatment.cached_label' + db.add_column('archaeological_finds_treatment', 'cached_label', + self.gf('django.db.models.fields.TextField')(null=True, blank=True), + keep_default=False) + + # Adding M2M table for field treatment_types on 'Treatment' + db.create_table('archaeological_finds_treatment_treatment_types', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('treatment', models.ForeignKey(orm['archaeological_finds.treatment'], null=False)), + ('treatmenttype', models.ForeignKey(orm['archaeological_finds.treatmenttype'], null=False)) + )) + db.create_unique('archaeological_finds_treatment_treatment_types', ['treatment_id', 'treatmenttype_id']) + + + # Changing field 'Treatment.external_id' + db.alter_column('archaeological_finds_treatment', 'external_id', self.gf('django.db.models.fields.CharField')(max_length=200, null=True)) + + def backwards(self, orm): + # Removing unique constraint on 'TreatmentFile', fields ['year', 'index'] + db.delete_unique('archaeological_finds_treatmentfile', ['year', 'index']) + + # Deleting model 'TreatmentFileSource' + db.delete_table('archaeological_finds_treatmentfilesource') + + # Removing M2M table for field authors on 'TreatmentFileSource' + db.delete_table('archaeological_finds_treatmentfilesource_authors') + + # Deleting model 'TreatmentFile' + db.delete_table('archaeological_finds_treatmentfile') + + # Removing M2M table for field imports on 'TreatmentFile' + db.delete_table('archaeological_finds_treatmentfile_imports') + + # Deleting model 'HistoricalTreatmentFile' + db.delete_table('archaeological_finds_historicaltreatmentfile') + + # Deleting model 'TreatmentState' + db.delete_table('archaeological_finds_treatmentstate') + + # Deleting model 'TreatmentFileType' + db.delete_table('archaeological_finds_treatmentfiletype') + + # Deleting field 'HistoricalFind.min_number_of_individuals' + db.delete_column('archaeological_finds_historicalfind', 'min_number_of_individuals') + + # Deleting field 'HistoricalFind.thickness' + db.delete_column('archaeological_finds_historicalfind', 'thickness') + + # Deleting field 'HistoricalFind.topographic_reference_point' + db.delete_column('archaeological_finds_historicalfind', 'topographic_reference_point') + + # Deleting field 'HistoricalFind.collection_id' + db.delete_column('archaeological_finds_historicalfind', 'collection_id') + + # Deleting field 'TreatmentType.order' + db.delete_column('archaeological_finds_treatmenttype', 'order') + + # Deleting field 'TreatmentType.parent' + db.delete_column('archaeological_finds_treatmenttype', 'parent_id') + + # Deleting field 'Find.min_number_of_individuals' + db.delete_column('archaeological_finds_find', 'min_number_of_individuals') + + # Deleting field 'Find.thickness' + db.delete_column('archaeological_finds_find', 'thickness') + + # Deleting field 'Find.topographic_reference_point' + db.delete_column('archaeological_finds_find', 'topographic_reference_point') + + # Deleting field 'Find.collection' + db.delete_column('archaeological_finds_find', 'collection_id') + + + # Changing field 'Find.upstream_treatment' + db.alter_column('archaeological_finds_find', 'upstream_treatment_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['archaeological_finds.Treatment'])) + + # Changing field 'Find.downstream_treatment' + db.alter_column('archaeological_finds_find', 'downstream_treatment_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['archaeological_finds.Treatment'])) + + # Changing field 'Find.conservatory_state' + db.alter_column('archaeological_finds_find', 'conservatory_state_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['archaeological_finds.ConservatoryState'], null=True)) + + # Changing field 'Find.container' + db.alter_column('archaeological_finds_find', 'container_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['archaeological_warehouse.Container'])) + # Adding field 'HistoricalTreatment.treatment_type_id' + db.add_column('archaeological_finds_historicaltreatment', 'treatment_type_id', + self.gf('django.db.models.fields.IntegerField')(blank=True, null=True, db_index=True), + keep_default=False) + + # Adding field 'HistoricalTreatment.other_location' + db.add_column('archaeological_finds_historicaltreatment', 'other_location', + self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True), + keep_default=False) + + # Deleting field 'HistoricalTreatment.image' + db.delete_column('archaeological_finds_historicaltreatment', 'image') + + # Deleting field 'HistoricalTreatment.thumbnail' + db.delete_column('archaeological_finds_historicaltreatment', 'thumbnail') + + # Deleting field 'HistoricalTreatment.label' + db.delete_column('archaeological_finds_historicaltreatment', 'label') + + # Deleting field 'HistoricalTreatment.other_reference' + db.delete_column('archaeological_finds_historicaltreatment', 'other_reference') + + # Deleting field 'HistoricalTreatment.year' + db.delete_column('archaeological_finds_historicaltreatment', 'year') + + # Deleting field 'HistoricalTreatment.index' + db.delete_column('archaeological_finds_historicaltreatment', 'index') + + # Deleting field 'HistoricalTreatment.file_id' + db.delete_column('archaeological_finds_historicaltreatment', 'file_id') + + # Deleting field 'HistoricalTreatment.treatment_state_id' + db.delete_column('archaeological_finds_historicaltreatment', 'treatment_state_id') + + # Deleting field 'HistoricalTreatment.organization_id' + db.delete_column('archaeological_finds_historicaltreatment', 'organization_id') + + # Deleting field 'HistoricalTreatment.goal' + db.delete_column('archaeological_finds_historicaltreatment', 'goal') + + # Deleting field 'HistoricalTreatment.target_is_basket' + db.delete_column('archaeological_finds_historicaltreatment', 'target_is_basket') + + # Deleting field 'HistoricalTreatment.cached_label' + db.delete_column('archaeological_finds_historicaltreatment', 'cached_label') + + + # Changing field 'HistoricalTreatment.external_id' + db.alter_column('archaeological_finds_historicaltreatment', 'external_id', self.gf('django.db.models.fields.CharField')(max_length=120, null=True)) + + # User chose to not deal with backwards NULL issues for 'Treatment.treatment_type' + raise RuntimeError("Cannot reverse this migration. 'Treatment.treatment_type' and its values cannot be restored.") + # Adding field 'Treatment.other_location' + db.add_column('archaeological_finds_treatment', 'other_location', + self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True), + keep_default=False) + + # Deleting field 'Treatment.image' + db.delete_column('archaeological_finds_treatment', 'image') + + # Deleting field 'Treatment.thumbnail' + db.delete_column('archaeological_finds_treatment', 'thumbnail') + + # Deleting field 'Treatment.label' + db.delete_column('archaeological_finds_treatment', 'label') + + # Deleting field 'Treatment.other_reference' + db.delete_column('archaeological_finds_treatment', 'other_reference') + + # Deleting field 'Treatment.year' + db.delete_column('archaeological_finds_treatment', 'year') + + # Deleting field 'Treatment.index' + db.delete_column('archaeological_finds_treatment', 'index') + + # Deleting field 'Treatment.file' + db.delete_column('archaeological_finds_treatment', 'file_id') + + # Deleting field 'Treatment.treatment_state' + db.delete_column('archaeological_finds_treatment', 'treatment_state_id') + + # Deleting field 'Treatment.organization' + db.delete_column('archaeological_finds_treatment', 'organization_id') + + # Deleting field 'Treatment.goal' + db.delete_column('archaeological_finds_treatment', 'goal') + + # Deleting field 'Treatment.target_is_basket' + db.delete_column('archaeological_finds_treatment', 'target_is_basket') + + # Deleting field 'Treatment.cached_label' + db.delete_column('archaeological_finds_treatment', 'cached_label') + + # Removing M2M table for field treatment_types on 'Treatment' + db.delete_table('archaeological_finds_treatment_treatment_types') + + + # Changing field 'Treatment.external_id' + db.alter_column('archaeological_finds_treatment', 'external_id', self.gf('django.db.models.fields.CharField')(max_length=120, null=True)) + + 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.CharField', [], {'max_length': '200', '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',)", '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.CharField', [], {'default': "'U'", 'max_length': '1'}), + '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'}), + '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'}), + 'polygon': ('django.contrib.gis.db.models.fields.PolygonField', [], {'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'}) + }, + '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'}), + 'topographic_reference_point': ('django.db.models.fields.CharField', [], {'max_length': '20', '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': ('django.db.models.fields.CharField', [], {'default': "'U'", 'max_length': '1'}), + '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'}), + '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'}), + 'polygon': ('django.contrib.gis.db.models.fields.PolygonField', [], {'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'}) + }, + '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'}), + 'topographic_reference_point': ('django.db.models.fields.CharField', [], {'max_length': '20', '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'}), + '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'}), + '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'}), + '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': {'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'}), + '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'}), + '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']"}), + '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'}, + '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']"}), + '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', [], {'blank': 'True', 'related_name': "'owned_containers'", 'null': 'True', '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.IntegerField', [], {'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'}), + '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'}), + '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': {'object_name': 'AuthorType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.canton': { + 'Meta': {'object_name': 'Canton'}, + 'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}) + }, + 'ishtar_common.department': { + 'Meta': {'ordering': "['number']", 'object_name': 'Department'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}), + 'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.State']", 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.documenttemplate': { + 'Meta': {'ordering': "['associated_object_name', 'name']", 'object_name': 'DocumentTemplate'}, + 'associated_object_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'template': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}) + }, + 'ishtar_common.format': { + 'Meta': {'object_name': 'Format'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.import': { + 'Meta': {'object_name': 'Import'}, + 'conservative_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'encoding': ('django.db.models.fields.CharField', [], {'default': "'utf-8'", 'max_length': '15'}), + 'end_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'error_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.ImporterType']"}), + 'match_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'seconds_remaining': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'skip_lines': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'state': ('django.db.models.fields.CharField', [], {'default': "'C'", 'max_length': '2'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']"}) + }, + 'ishtar_common.importertype': { + 'Meta': {'object_name': 'ImporterType'}, + 'associated_models': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_template': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '100', 'unique': 'True', 'null': 'True', 'blank': 'True'}), + 'unicity_keys': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.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': {'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_finds']
\ No newline at end of file diff --git a/archaeological_finds/migrations/0014_treats_generate_year_index.py b/archaeological_finds/migrations/0014_treats_generate_year_index.py new file mode 100644 index 000000000..399a27c90 --- /dev/null +++ b/archaeological_finds/migrations/0014_treats_generate_year_index.py @@ -0,0 +1,1163 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + for idx, t in enumerate(orm["archaeological_finds.treatment"].objects.all()): + year = 2016 + if t.start_date: + year = t.start_date.year + t.index = idx + 1 + t.year = year + t.save() + + def backwards(self, orm): + pass + + 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.CharField', [], {'max_length': '200', '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',)", '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.CharField', [], {'default': "'U'", 'max_length': '1'}), + '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'}), + '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'}), + 'polygon': ('django.contrib.gis.db.models.fields.PolygonField', [], {'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'}) + }, + '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'}), + 'topographic_reference_point': ('django.db.models.fields.CharField', [], {'max_length': '20', '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': ('django.db.models.fields.CharField', [], {'default': "'U'", 'max_length': '1'}), + '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'}), + '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'}), + 'polygon': ('django.contrib.gis.db.models.fields.PolygonField', [], {'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'}) + }, + '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'}), + 'topographic_reference_point': ('django.db.models.fields.CharField', [], {'max_length': '20', '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'}), + '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'}), + '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'}), + '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': {'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'}), + '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'}), + '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']"}), + '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'}, + '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']"}), + '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', [], {'blank': 'True', 'related_name': "'owned_containers'", 'null': 'True', '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.IntegerField', [], {'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'}), + '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'}), + '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': {'object_name': 'AuthorType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.canton': { + 'Meta': {'object_name': 'Canton'}, + 'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}) + }, + 'ishtar_common.department': { + 'Meta': {'ordering': "['number']", 'object_name': 'Department'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}), + 'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.State']", 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.documenttemplate': { + 'Meta': {'ordering': "['associated_object_name', 'name']", 'object_name': 'DocumentTemplate'}, + 'associated_object_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'template': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}) + }, + 'ishtar_common.format': { + 'Meta': {'object_name': 'Format'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.import': { + 'Meta': {'object_name': 'Import'}, + 'conservative_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'encoding': ('django.db.models.fields.CharField', [], {'default': "'utf-8'", 'max_length': '15'}), + 'end_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'error_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.ImporterType']"}), + 'match_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'seconds_remaining': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'skip_lines': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'state': ('django.db.models.fields.CharField', [], {'default': "'C'", 'max_length': '2'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']"}) + }, + 'ishtar_common.importertype': { + 'Meta': {'object_name': 'ImporterType'}, + 'associated_models': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_template': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '100', 'unique': 'True', 'null': 'True', 'blank': 'True'}), + 'unicity_keys': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.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': {'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_finds']
\ No newline at end of file diff --git a/archaeological_finds/migrations/0015_auto__add_unique_treatment_index_year.py b/archaeological_finds/migrations/0015_auto__add_unique_treatment_index_year.py new file mode 100644 index 000000000..0e3843b43 --- /dev/null +++ b/archaeological_finds/migrations/0015_auto__add_unique_treatment_index_year.py @@ -0,0 +1,1161 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding unique constraint on 'Treatment', fields ['index', 'year'] + db.create_unique('archaeological_finds_treatment', ['index', 'year']) + + + def backwards(self, orm): + # Removing unique constraint on 'Treatment', fields ['index', 'year'] + db.delete_unique('archaeological_finds_treatment', ['index', 'year']) + + + 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.CharField', [], {'max_length': '200', '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',)", '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.CharField', [], {'default': "'U'", 'max_length': '1'}), + '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'}), + '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'}), + 'polygon': ('django.contrib.gis.db.models.fields.PolygonField', [], {'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'}) + }, + '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'}), + 'topographic_reference_point': ('django.db.models.fields.CharField', [], {'max_length': '20', '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': ('django.db.models.fields.CharField', [], {'default': "'U'", 'max_length': '1'}), + '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'}), + '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'}), + 'polygon': ('django.contrib.gis.db.models.fields.PolygonField', [], {'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'}) + }, + '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'}), + 'topographic_reference_point': ('django.db.models.fields.CharField', [], {'max_length': '20', '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'}), + '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'}), + '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'}), + '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'}), + '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'}), + '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']"}), + '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'}, + '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']"}), + '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', [], {'blank': 'True', 'related_name': "'owned_containers'", 'null': 'True', '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.IntegerField', [], {'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'}), + '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'}), + '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': {'object_name': 'AuthorType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.canton': { + 'Meta': {'object_name': 'Canton'}, + 'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}) + }, + 'ishtar_common.department': { + 'Meta': {'ordering': "['number']", 'object_name': 'Department'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}), + 'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.State']", 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.documenttemplate': { + 'Meta': {'ordering': "['associated_object_name', 'name']", 'object_name': 'DocumentTemplate'}, + 'associated_object_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'template': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}) + }, + 'ishtar_common.format': { + 'Meta': {'object_name': 'Format'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.import': { + 'Meta': {'object_name': 'Import'}, + 'conservative_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'encoding': ('django.db.models.fields.CharField', [], {'default': "'utf-8'", 'max_length': '15'}), + 'end_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'error_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.ImporterType']"}), + 'match_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'seconds_remaining': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'skip_lines': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'state': ('django.db.models.fields.CharField', [], {'default': "'C'", 'max_length': '2'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']"}) + }, + 'ishtar_common.importertype': { + 'Meta': {'object_name': 'ImporterType'}, + 'associated_models': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_template': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '100', 'unique': 'True', 'null': 'True', 'blank': 'True'}), + 'unicity_keys': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.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': {'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_finds']
\ No newline at end of file diff --git a/archaeological_finds/migrations/0016_on_delete_for_views.py b/archaeological_finds/migrations/0016_on_delete_for_views.py new file mode 100644 index 000000000..2a56a7738 --- /dev/null +++ b/archaeological_finds/migrations/0016_on_delete_for_views.py @@ -0,0 +1,1166 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + sql = """ + CREATE RULE find_uptreatments_del AS ON DELETE TO find_uptreatments + DO INSTEAD DELETE FROM archaeological_finds_find where id=NULL; + + CREATE RULE find_downtreatments_del AS ON DELETE TO find_downtreatments + DO INSTEAD DELETE FROM archaeological_finds_find where id=NULL; + CREATE RULE find_treatments_del AS ON DELETE TO find_treatments + DO INSTEAD DELETE FROM archaeological_finds_find where id=NULL; + """ + db.execute(sql) + + def backwards(self, orm): + pass + + 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.CharField', [], {'max_length': '200', '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',)", '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.CharField', [], {'default': "'U'", 'max_length': '1'}), + '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'}), + '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'}), + 'polygon': ('django.contrib.gis.db.models.fields.PolygonField', [], {'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'}) + }, + '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'}), + 'topographic_reference_point': ('django.db.models.fields.CharField', [], {'max_length': '20', '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': ('django.db.models.fields.CharField', [], {'default': "'U'", 'max_length': '1'}), + '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'}), + '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'}), + 'polygon': ('django.contrib.gis.db.models.fields.PolygonField', [], {'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'}) + }, + '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'}), + 'topographic_reference_point': ('django.db.models.fields.CharField', [], {'max_length': '20', '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'}), + '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'}), + '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'}), + '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'}), + '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'}), + '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']"}), + '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'}, + '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']"}), + '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', [], {'blank': 'True', 'related_name': "'owned_containers'", 'null': 'True', '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.IntegerField', [], {'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'}), + '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'}), + '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': {'object_name': 'AuthorType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.canton': { + 'Meta': {'object_name': 'Canton'}, + 'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}) + }, + 'ishtar_common.department': { + 'Meta': {'ordering': "['number']", 'object_name': 'Department'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}), + 'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.State']", 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.documenttemplate': { + 'Meta': {'ordering': "['associated_object_name', 'name']", 'object_name': 'DocumentTemplate'}, + 'associated_object_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'template': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}) + }, + 'ishtar_common.format': { + 'Meta': {'object_name': 'Format'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.import': { + 'Meta': {'object_name': 'Import'}, + 'conservative_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'encoding': ('django.db.models.fields.CharField', [], {'default': "'utf-8'", 'max_length': '15'}), + 'end_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'error_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.ImporterType']"}), + 'match_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'seconds_remaining': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'skip_lines': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'state': ('django.db.models.fields.CharField', [], {'default': "'C'", 'max_length': '2'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']"}) + }, + 'ishtar_common.importertype': { + 'Meta': {'object_name': 'ImporterType'}, + 'associated_models': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_template': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '100', 'unique': 'True', 'null': 'True', 'blank': 'True'}), + 'unicity_keys': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.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': {'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_finds']
\ No newline at end of file diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py index aa5eacc30..50c42ef30 100644 --- a/archaeological_finds/models.py +++ b/archaeological_finds/models.py @@ -1,1017 +1,16 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# Copyright (C) 2012-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. - -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# See the file COPYING for details. - -import datetime - -from django.conf import settings -from django.contrib.gis.db import models -from django.core.urlresolvers import reverse -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 - -from ishtar_common.utils import cached_label_changed - -from ishtar_common.models import GeneralType, ImageModel, BaseHistorizedItem, \ - ShortMenuItem, LightHistorizedItem, HistoricalRecords, OwnPerms, Source, \ - Person, Basket, get_external_id, post_save_cache - -from archaeological_operations.models import AdministrativeAct -from archaeological_context_records.models import ContextRecord, Dating - -from ishtar_common.models import PRIVATE_FIELDS -from archaeological_warehouse.models import Warehouse, Container - - -class MaterialType(GeneralType): - code = models.CharField(_(u"Code"), max_length=10, blank=True, null=True) - recommendation = models.TextField(_(u"Recommendation"), blank=True, - null=True) - parent = models.ForeignKey("MaterialType", blank=True, null=True, - verbose_name=_(u"Parent material")) - - class Meta: - verbose_name = _(u"Material type") - verbose_name_plural = _(u"Material types") - ordering = ('label',) -post_save.connect(post_save_cache, sender=MaterialType) -post_delete.connect(post_save_cache, sender=MaterialType) - - -class ConservatoryState(GeneralType): - parent = models.ForeignKey("ConservatoryState", blank=True, null=True, - verbose_name=_(u"Parent conservatory state")) - - class Meta: - verbose_name = _(u"Conservatory state") - verbose_name_plural = _(u"Conservatory states") - ordering = ('label',) -post_save.connect(post_save_cache, sender=ConservatoryState) -post_delete.connect(post_save_cache, sender=ConservatoryState) - - -class PreservationType(GeneralType): - class Meta: - verbose_name = _(u"Preservation type") - verbose_name_plural = _(u"Preservation types") - ordering = ('label',) -post_save.connect(post_save_cache, sender=PreservationType) -post_delete.connect(post_save_cache, sender=PreservationType) - - -class IntegrityType(GeneralType): - class Meta: - verbose_name = _(u"Integrity / interest type") - verbose_name_plural = _(u"Integrity / interest types") - ordering = ('label',) -post_save.connect(post_save_cache, sender=IntegrityType) -post_delete.connect(post_save_cache, sender=IntegrityType) - - -class RemarkabilityType(GeneralType): - class Meta: - verbose_name = _(u"Remarkability type") - verbose_name_plural = _(u"Remarkability types") - ordering = ('label',) -post_save.connect(post_save_cache, sender=RemarkabilityType) -post_delete.connect(post_save_cache, sender=RemarkabilityType) - - -class ObjectType(GeneralType): - parent = models.ForeignKey("ObjectType", blank=True, null=True, - verbose_name=_(u"Parent")) - - class Meta: - verbose_name = _(u"Object type") - verbose_name_plural = _(u"Object types") - ordering = ('parent__label', 'label',) - - def full_label(self): - lbls = [self.label] - item = self - while item.parent: - item = item.parent - lbls.append(item.label) - return u" > ".join(reversed(lbls)) - - def __unicode__(self): - return self.label -post_save.connect(post_save_cache, sender=ObjectType) -post_delete.connect(post_save_cache, sender=ObjectType) - -IS_ISOLATED_CHOICES = ( - ('U', _(u"Unknow")), - ('O', _(u"Object")), - ('B', _(u"Batch")) -) - - -class BaseFind(BaseHistorizedItem, OwnPerms): - IS_ISOLATED_DICT = dict(IS_ISOLATED_CHOICES) - label = models.TextField(_(u"Free ID")) - external_id = models.TextField(_(u"External ID"), blank=True, null=True) - auto_external_id = models.BooleanField( - _(u"External ID is set automatically"), default=False) - description = models.TextField(_(u"Description"), blank=True, null=True) - comment = models.TextField(_(u"Comment"), blank=True, null=True) - topographic_localisation = models.CharField( - _(u"Topographic localisation"), blank=True, null=True, max_length=120) - special_interest = models.CharField(_(u"Special interest"), blank=True, - null=True, max_length=120) - context_record = models.ForeignKey( - ContextRecord, related_name='base_finds', - verbose_name=_(u"Context Record")) - discovery_date = models.DateField(_(u"Discovery date"), - blank=True, null=True) - batch = models.CharField(_(u"Batch/object"), max_length=1, default="U", - choices=IS_ISOLATED_CHOICES) - index = models.IntegerField(u"Index", default=0) - material_index = models.IntegerField(_(u"Material index"), default=0) - point = models.PointField(_(u"Point"), blank=True, null=True, dim=3) - line = models.LineStringField(_(u"Line"), blank=True, null=True) - polygon = models.PolygonField(_(u"Polygon"), blank=True, null=True) - cache_short_id = models.TextField( - _(u"Short ID"), blank=True, null=True, - help_text=_(u"Cached value - do not edit")) - cache_complete_id = models.TextField( - _(u"Complete ID"), blank=True, null=True, - help_text=_(u"Cached value - do not edit")) - history = HistoricalRecords() - RELATED_POST_PROCESS = ['find'] - - class Meta: - verbose_name = _(u"Base find") - verbose_name_plural = _(u"Base finds") - permissions = ( - ("view_basefind", ugettext(u"Can view all Base finds")), - ("view_own_basefind", ugettext(u"Can view own Base find")), - ("add_own_basefind", ugettext(u"Can add own Base find")), - ("change_own_basefind", ugettext(u"Can change own Base find")), - ("delete_own_basefind", ugettext(u"Can delete own Base find")), - ) - - def __unicode__(self): - return self.label - - def get_last_find(self): - # TODO: manage virtuals - property(last_find) ? - finds = self.find.filter().order_by("-order").all() - return finds and finds[0] - - @classmethod - def get_max_index(cls, operation): - q = BaseFind.objects\ - .filter(context_record__operation=operation) - if q.count(): - return q.aggregate(Max('index'))['index__max'] - return 0 - - def complete_id(self): - # OPE|MAT.CODE|UE|FIND_index - if not self.context_record.operation: - return - # find = self.get_last_find() - ope = self.context_record.operation - c_id = [unicode(ope.code_patriarche) if ope.code_patriarche else - (unicode(ope.year) + "-" + unicode(ope.operation_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)) - 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)) - return settings.JOINT.join(c_id) - - def full_label(self): - return self._real_label() or self._temp_label() or u"" - - def material_type_label(self): - find = self.get_last_find() - finds = [find and find.material_type.code or ''] - ope = self.context_record.operation - finds += [unicode(ope.code_patriarche) or - (unicode(ope.year) + "-" + unicode(ope.operation_code))] - finds += [self.context_record.label, unicode(self.material_index)] - return settings.JOINT.join(finds) - - def _real_label(self): - if not self.context_record.parcel \ - or not self.context_record.operation \ - or not self.context_record.operation.code_patriarche: - return - find = self.get_last_find() - lbl = find.label or self.label - return settings.JOINT.join( - [unicode(it) for it in ( - self.context_record.operation.code_patriarche, - self.context_record.label, lbl) if it]) - - def _temp_label(self): - if not self.context_record.parcel: - return - find = self.get_last_find() - lbl = find.label or self.label - return settings.JOINT.join( - [unicode(it) for it in ( - self.context_record.parcel.year, self.index, - self.context_record.label, lbl) if it]) - - @property - def name(self): - return self.label - - @classmethod - def get_extra_fields(cls): - fields = {} - for field in Find._meta.many_to_many: - if field.name == 'base_finds': - fields['find'] = field.related.model - return fields - - def save(self, *args, **kwargs): - returned = super(BaseFind, self).save(*args, **kwargs) - - updated = False - if not self.external_id or self.auto_external_id: - external_id = get_external_id('base_find_external_id', self) - if external_id != self.external_id: - updated = True - self.auto_external_id = True - self.external_id = external_id - if updated: - self._cached_label_checked = False - self.save() - return returned - -WEIGHT_UNIT = (('g', _(u"g")), - ('kg', _(u"kg")),) - -CHECK_CHOICES = (('NC', _(u"Not checked")), - ('CI', _(u"Checked but incorrect")), - ('CC', _(u"Checked and correct")), - ) - - -class FindBasket(Basket): - items = models.ManyToManyField('Find', blank=True, null=True, - related_name='basket') - - -class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem): - CHECK_DICT = dict(CHECK_CHOICES) - SHOW_URL = 'show-find' - SLUG = 'find' - TABLE_COLS = ['label', 'material_types', 'datings.period', - 'base_finds.context_record.parcel.town', - 'base_finds.context_record.operation.year', - 'base_finds.context_record.operation.operation_code', - 'container.reference', 'container.location', - 'base_finds.batch', - 'base_finds.context_record.parcel.town', - 'base_finds.context_record.parcel', ] - if settings.COUNTRY == 'fr': - TABLE_COLS.insert( - 6, 'base_finds.context_record.operation.code_patriarche') - TABLE_COLS_FOR_OPE = [ - 'base_finds.cache_short_id', - 'base_finds.cache_complete_id', - 'previous_id', 'label', 'material_types', - 'datings.period', 'find_number', 'object_types', - 'description', - 'base_finds.context_record.parcel.town', - 'base_finds.context_record.parcel', ] - - EXTRA_FULL_FIELDS = [ - 'base_finds.cache_short_id', 'base_finds.cache_complete_id', - 'base_finds.comment', 'base_finds.description', - 'base_finds.topographic_localisation', - 'base_finds.special_interest', - 'base_finds.discovery_date'] - EXTRA_FULL_FIELDS_LABELS = { - 'base_finds.cache_short_id': _(u"Base find - Short ID"), - 'base_finds.cache_complete_id': _(u"Base find - Complete ID"), - 'base_finds.comment': _(u"Base find - Comment"), - 'base_finds.description': _(u"Base find - Description"), - 'base_finds.topographic_localisation': _(u"Base find - " - u"Topographic localisation"), - 'base_finds.special_interest': _(u"Base find - Special interest"), - 'base_finds.discovery_date': _(u"Base find - Discovery date"), - } - ATTRS_EQUIV = {'get_first_base_find': 'base_finds'} - - # search parameters - REVERSED_BOOL_FIELDS = ['image__isnull'] - RELATION_TYPES_PREFIX = { - 'ope_relation_types': - 'base_finds__context_record__operation__'} - RELATIVE_SESSION_NAMES = [ - ('contextrecord', 'base_finds__context_record__pk'), - ('operation', 'base_finds__context_record__operation__pk'), - ('file', 'base_finds__context_record__operation__associated_file__pk') - ] - BASE_REQUEST = {'downstream_treatment__isnull': True} - EXTRA_REQUEST_KEYS = { - 'base_finds__cache_short_id': - 'base_finds__cache_short_id__icontains', - 'base_finds__cache_complete_id': - 'base_finds__cache_complete_id__icontains', - 'label': - 'label__icontains', - 'base_finds__context_record': - 'base_finds__context_record__pk', - 'base_finds__context_record__parcel__town': - 'base_finds__context_record__parcel__town', - 'base_finds__context_record__operation__year': - 'base_finds__context_record__operation__year__contains', - 'base_finds__context_record__operation': - 'base_finds__context_record__operation__pk', - 'archaeological_sites': - 'base_finds__context_record__operation__archaeological_sites__pk', - 'base_finds__context_record__operation__code_patriarche': - 'base_finds__context_record__operation__code_patriarche', - 'datings__period': 'datings__period__pk', - 'base_finds__find__description': - 'base_finds__find__description__icontains', - 'base_finds__batch': 'base_finds__batch', - 'basket': 'basket', - 'cached_label': 'cached_label__icontains', - 'image': 'image__isnull'} - - # fields - base_finds = models.ManyToManyField(BaseFind, verbose_name=_(u"Base find"), - related_name='find') - external_id = models.TextField(_(u"External ID"), blank=True, null=True) - auto_external_id = models.BooleanField( - _(u"External ID is set automatically"), default=False) - order = models.IntegerField(_(u"Order"), default=1) - label = models.TextField(_(u"Free ID")) - description = models.TextField(_(u"Description"), blank=True, null=True) - material_types = models.ManyToManyField( - MaterialType, verbose_name=_(u"Material types"), related_name='finds') - conservatory_state = models.ForeignKey( - ConservatoryState, verbose_name=_(u"Conservatory state"), blank=True, - null=True) - conservatory_comment = models.TextField(_(u"Conservatory comment"), - blank=True, null=True) - preservation_to_considers = models.ManyToManyField( - PreservationType, verbose_name=_(u"Type of preservation to consider"), - related_name='finds') - volume = models.FloatField(_(u"Volume (l)"), blank=True, null=True) - weight = models.FloatField(_(u"Weight (g)"), blank=True, null=True) - weight_unit = models.CharField(_(u"Weight unit"), max_length=4, - blank=True, null=True, choices=WEIGHT_UNIT) - find_number = models.IntegerField(_("Find number"), blank=True, null=True) - upstream_treatment = models.ForeignKey( - "Treatment", blank=True, null=True, - related_name='downstream', - verbose_name=_("Upstream treatment")) - downstream_treatment = models.ForeignKey( - "Treatment", blank=True, null=True, related_name='upstream', - verbose_name=_("Downstream treatment")) - datings = models.ManyToManyField(Dating, verbose_name=_(u"Dating"), - related_name='find') - container = models.ForeignKey( - Container, verbose_name=_(u"Container"), blank=True, null=True, - related_name='finds') - is_complete = models.NullBooleanField(_(u"Is complete?"), blank=True, - null=True) - object_types = models.ManyToManyField( - ObjectType, verbose_name=_(u"Object types"), related_name='find') - integrities = models.ManyToManyField( - IntegrityType, verbose_name=_(u"Integrity / interest"), - related_name='find') - remarkabilities = models.ManyToManyField( - RemarkabilityType, verbose_name=_(u"Remarkability"), - related_name='find') - length = models.FloatField(_(u"Length (cm)"), blank=True, null=True) - width = models.FloatField(_(u"Width (cm)"), blank=True, null=True) - height = models.FloatField(_(u"Height (cm)"), blank=True, null=True) - diameter = models.FloatField(_(u"Diameter (cm)"), blank=True, null=True) - dimensions_comment = models.TextField(_(u"Dimensions comment"), - blank=True, null=True) - mark = models.TextField(_(u"Mark"), blank=True, null=True) - comment = models.TextField(_(u"Comment"), blank=True, null=True) - dating_comment = models.TextField(_(u"Comment on dating"), blank=True, - null=True) - previous_id = models.TextField(_(u"Previous ID"), blank=True, null=True) - index = models.IntegerField(u"Index", default=0) - checked = models.CharField(_(u"Check"), max_length=2, default='NC', - choices=CHECK_CHOICES) - check_date = models.DateField(_(u"Check date"), - default=datetime.date.today) - estimated_value = models.FloatField(_(u"Estimated value"), blank=True, - null=True) - cached_label = models.TextField(_(u"Cached name"), null=True, blank=True) - history = HistoricalRecords() - BASKET_MODEL = FindBasket - IMAGE_PREFIX = 'finds/' - - class Meta: - verbose_name = _(u"Find") - verbose_name_plural = _(u"Finds") - permissions = ( - ("view_find", ugettext(u"Can view all Finds")), - ("view_own_find", ugettext(u"Can view own Find")), - ("add_own_find", ugettext(u"Can add own Find")), - ("change_own_find", ugettext(u"Can change own Find")), - ("delete_own_find", ugettext(u"Can delete own Find")), - ) - ordering = ('cached_label',) - - @property - def short_class_name(self): - return _(u"FIND") - - def __unicode__(self): - lbl = settings.JOINT.join([ - getattr(self, attr) - for attr in ('administrative_index', 'label') - if getattr(self, attr)]) - return lbl - - @property - def short_label(self): - return self.reference - - @property - def dating(self): - return u" ; ".join([unicode(dating) for dating in self.datings.all()]) - - @property - def show_url(self): - return reverse('show-find', args=[self.pk, '']) - - @property - def name(self): - return u" - ".join([base_find.name - for base_find in self.base_finds.all()]) - - @property - def full_label(self): - lbl = u" - ".join([ - getattr(self, attr) - for attr in ('label', 'administrative_index') - if getattr(self, attr)]) - base = u" - ".join([base_find.complete_id() - for base_find in self.base_finds.all()]) - if base: - lbl += u' ({})'.format(base) - return lbl - - def get_first_base_find(self): - q = self.base_finds - if not q.count(): - return - return q.order_by('-pk').all()[0] - - @property - def reference(self): - bf = self.get_first_base_find() - if not bf: - return "00" - return bf.short_id() - - @property - def administrative_index(self): - bf = self.get_first_base_find() - if not bf or not bf.context_record or not bf.context_record.operation: - return "" - return "{}-{}".format( - bf.context_record.operation.get_reference(), - self.index) - - def _get_treatments(self, model, rel='upstream'): - treatments, findtreats = [], [] - for findtreat in model.objects.filter( - find_id=self.pk).order_by( - 'treatment_nb', 'treatment__start_date', - 'treatment__end_date').distinct().all(): - if findtreat.pk in findtreats: - continue - findtreats.append(findtreat.pk) - q = getattr(findtreat.treatment, rel).distinct().order_by( - 'label') - treatments.append((q.all(), findtreat.treatment)) - return treatments - - def upstream_treatments(self): - return self._get_treatments(FindUpstreamTreatments, 'upstream') - - def downstream_treatments(self): - return self._get_treatments(FindDownstreamTreatments, 'downstream') - - def all_treatments(self): - return self.upstream_treatments() + self.downstream_treatments() - - def get_department(self): - bf = self.get_first_base_find() - if not bf: - return "00" - return bf.context_record.operation.get_department() - - def get_town_label(self): - bf = self.get_first_base_find() - if not bf: - return "00" - return bf.context_record.operation.get_town_label() - - @classmethod - def get_periods(cls, slice='year', fltr={}): - q = cls.objects - if fltr: - q = q.filter(**fltr) - if slice == 'year': - years = set() - finds = q.filter(downstream_treatment__isnull=True) - for find in finds: - bi = find.base_finds.all() - if not bi: - continue - bi = bi[0] - if bi.context_record.operation.start_date: - yr = bi.context_record.operation.start_date.year - years.add(yr) - return list(years) - - @classmethod - def get_by_year(cls, year, fltr={}): - q = cls.objects - if fltr: - q = q.filter(**fltr) - return q.filter( - downstream_treatment__isnull=True, - base_finds__context_record__operation__start_date__year=year) - - @classmethod - def get_operations(cls): - operations = set() - finds = cls.objects.filter(downstream_treatment__isnull=True) - for find in finds: - bi = find.base_finds.all() - if not bi: - continue - bi = bi[0] - pk = bi.context_record.operation.pk - operations.add(pk) - return list(operations) - - @classmethod - def get_by_operation(cls, operation_id): - return cls.objects.filter( - downstream_treatment__isnull=True, - base_finds__context_record__operation__pk=operation_id) - - @classmethod - def get_total_number(cls, fltr={}): - q = cls.objects - if fltr: - q = q.filter(**fltr) - return q.filter(downstream_treatment__isnull=True).count() - - def duplicate(self, user): - model = self.__class__ - # base fields - table_cols = [field.name for field in model._meta.fields - if field.name not in PRIVATE_FIELDS or - field.name == 'order'] - dct = dict([(attr, getattr(self, attr)) for attr in - table_cols]) - dct['order'] += 1 - dct['history_modifier'] = user - new = self.__class__(**dct) - new.save() - - # m2m fields - m2m = [field.name for field in model._meta.many_to_many - if field.name not in PRIVATE_FIELDS] - for field in m2m: - for val in getattr(self, field).all(): - getattr(new, field).add(val) - return new - - @classmethod - def get_query_owns(cls, user): - return Q(base_finds__context_record__operation__scientist=user. - ishtaruser.person) |\ - Q(base_finds__context_record__operation__in_charge=user. - ishtaruser.person) |\ - Q(history_creator=user) - - @classmethod - def get_owns(cls, user, menu_filtr=None, limit=None): - replace_query = {} - if menu_filtr: - replace_query = {'base_finds__context_record': menu_filtr} - owns = super(Find, cls).get_owns( - user, replace_query=replace_query, - limit=limit) - return sorted( - owns, key=lambda x: x.cached_label - if hasattr(x, 'cached_label') else unicode(x)) - - def _generate_cached_label(self): - return unicode(self) - - def save(self, *args, **kwargs): - super(Find, self).save(*args, **kwargs) - - updated = False - self.skip_history_when_saving = True - if not self.external_id or self.auto_external_id: - external_id = get_external_id('find_external_id', self) - if external_id != self.external_id: - updated = True - self.auto_external_id = True - self.external_id = external_id - if updated: - self._cached_label_checked = False - self.save() - return - - q = self.base_finds - if not self.index and q.count(): - operation = q.filter( - context_record__operation__pk__isnull=False).order_by( - '-context_record__operation__start_date') - if operation.count(): - operation = operation.all()[0].context_record.operation - q = Find.objects\ - .filter(base_finds__context_record__operation=operation) - if self.pk: - q = q.exclude(pk=self.pk) - if q.count(): - self.index = q.aggregate(Max('index'))['index__max'] + 1 - else: - self.index = 1 - self._cached_label_checked = False - self.save() - for base_find in self.base_finds.filter( - context_record__operation__pk__isnull=False).all(): - modified = False - if not base_find.index: - modified = True - base_find.index = BaseFind.get_max_index( - base_find.context_record.operation) + 1 - short_id = base_find.short_id() - if base_find.cache_short_id != short_id: - base_find.cache_short_id = short_id - modified = True - complete_id = base_find.complete_id() - if base_find.cache_complete_id != complete_id: - base_find.cache_complete_id = complete_id - modified = True - if modified: - base_find.skip_history_when_saving = True - base_find._cached_label_checked = False - base_find.save() - # if not base_find.material_index: - # idx = BaseFind.objects\ - # .filter(context_record=base_find.context_record, - # find__material_types=self.material_type)\ - # .aggregate(Max('material_index')) - # base_find.material_index = \ - # idx and idx['material_index__max'] + 1 or 1 - - -post_save.connect(cached_label_changed, sender=Find) - - -def base_find_find_changed(sender, **kwargs): - obj = kwargs.get('instance', None) - if not obj: - return - # recalculate complete id and external id - obj.save() - -m2m_changed.connect(base_find_find_changed, sender=Find.base_finds.through) - - -class FindSource(Source): - SHOW_URL = 'show-findsource' - MODIFY_URL = 'find_source_modify' - TABLE_COLS = ['find__base_finds__context_record__operation', - 'find__base_finds__context_record', 'find'] + \ - Source.TABLE_COLS - - # search parameters - BOOL_FIELDS = ['duplicate'] - RELATIVE_SESSION_NAMES = [ - ('find', 'find__pk'), - ('contextrecord', 'find__base_finds__context_record__pk'), - ('operation', 'find__base_finds__context_record__operation__pk'), - ('file', - 'find__base_finds__context_record__operation__associated_file__pk') - ] - EXTRA_REQUEST_KEYS = { - 'title': 'title__icontains', - 'description': 'description__icontains', - 'comment': 'comment__icontains', - 'additional_information': 'additional_information__icontains', - 'person': 'authors__person__pk', - 'find__base_finds__context_record__operation__year': - 'find__base_finds__context_record__operation__year', - 'find__base_finds__context_record__operation__operation_code': - 'find__base_finds__context_record__operation__operation_code', - 'find__base_finds__context_record__operation__code_patriarche': - 'find__base_finds__context_record__operation__code_patriarche', - 'find__datings__period': 'find__datings__period__pk', - 'find__description': 'find__description__icontains', - } - - class Meta: - verbose_name = _(u"Find documentation") - verbose_name_plural = _(u"Find documentations") - find = models.ForeignKey(Find, verbose_name=_(u"Find"), - related_name="source") - - @property - def owner(self): - return self.find - - -class TreatmentType(GeneralType): - virtual = models.BooleanField(_(u"Virtual")) - upstream_is_many = models.BooleanField( - _(u"Upstream is many"), default=False, - help_text=_( - u"Check this if for this treatment from many finds you'll get " - u"one.")) - downstream_is_many = models.BooleanField( - _(u"Downstream is many"), default=False, - help_text=_( - u"Check this if for this treatment from one find you'll get " - u"many.")) - - class Meta: - verbose_name = _(u"Treatment type") - verbose_name_plural = _(u"Treatment types") - ordering = ('label',) -post_save.connect(post_save_cache, sender=TreatmentType) -post_delete.connect(post_save_cache, sender=TreatmentType) - - -class Treatment(BaseHistorizedItem, OwnPerms): - external_id = models.CharField(_(u"External ID"), blank=True, null=True, - max_length=120) - container = models.ForeignKey(Container, verbose_name=_(u"Container"), - blank=True, null=True) - description = models.TextField(_(u"Description"), blank=True, null=True) - comment = models.TextField(_(u"Comment"), blank=True, null=True) - treatment_type = models.ForeignKey(TreatmentType, - verbose_name=_(u"Treatment type")) - location = models.ForeignKey( - Warehouse, verbose_name=_(u"Location"), blank=True, null=True, - help_text=_( - u"Location where the treatment is done. Target warehouse for " - u"a move.")) - other_location = models.CharField(_(u"Other location"), max_length=200, - blank=True, null=True) - person = models.ForeignKey( - Person, verbose_name=_(u"Doer"), blank=True, null=True, - on_delete=models.SET_NULL, related_name='treatments') - start_date = models.DateField(_(u"Start date"), blank=True, null=True) - end_date = models.DateField(_(u"End date"), blank=True, null=True) - history = HistoricalRecords() - - class Meta: - verbose_name = _(u"Treatment") - verbose_name_plural = _(u"Treatments") - permissions = ( - ("view_treatment", ugettext(u"Can view all Treatments")), - ("view_own_treatment", ugettext(u"Can view own Treatment")), - ("add_own_treatment", ugettext(u"Can add own Treatment")), - ("change_own_treatment", ugettext(u"Can change own Treatment")), - ("delete_own_treatment", ugettext(u"Can delete own Treatment")), - ) - - def __unicode__(self): - lbl = unicode(self.treatment_type) - if self.person: - lbl += u" %s %s" % (_(u"by"), unicode(self.person)) - return lbl - - def save(self, *args, **kwargs): - items, user, extra_args_for_new = [], None, [] - if "items" in kwargs: - items = kwargs.pop('items') - if "user" in kwargs: - user = kwargs.pop('user') - if "extra_args_for_new" in kwargs: - extra_args_for_new = kwargs.pop('extra_args_for_new') - is_new = self.pk is None - super(Treatment, self).save(*args, **kwargs) - if not is_new or not items: - return - basket = None - if hasattr(items, "items"): - basket = items - items = basket.items.all() - for item in items: - new = item.duplicate(user) - item.downstream_treatment = self - item.save() - new.upstream_treatment = self - for k in extra_args_for_new: - setattr(new, k, extra_args_for_new[k]) - new.save() - # update baskets - for basket in FindBasket.objects.filter(items__pk=item.pk).all(): - basket.items.remove(item) - basket.items.add(new) - - -class AbsFindTreatments(models.Model): - find = models.ForeignKey(Find, verbose_name=_(u"Find"), - related_name='%(class)s_related') - treatment = models.ForeignKey(Treatment, verbose_name=_(u"Treatment"), - primary_key=True) - # primary_key is set to prevent django to ask for an id column - # treatment is not a primary key - treatment_nb = models.IntegerField(_(u"Order")) - TABLE_COLS = ['treatment__treatment_type', - 'treatment__start_date', 'treatment__end_date', - 'treatment__location', 'treatment__container', - 'treatment__person', 'treatment_nb'] - EXTRA_FULL_FIELDS_LABELS = { - 'treatment__treatment_type': _(u"Treatment type"), - 'treatment__start_date': _(u"Start date"), - 'treatment__end_date': _(u"End date"), - 'treatment__location': _(u"Location"), - 'treatment__container': _(u"Container"), - 'treatment__person': _(u"Doer"), - 'treatment__upstream': _(u"Related finds"), - 'treatment__downstream': _(u"Related finds"), - } - - class Meta: - abstract = True - - def __unicode__(self): - return u"{} - {} [{}]".format( - self.find, self.treatment, self.treatment_nb) - - -class FindUpstreamTreatments(AbsFindTreatments): - """ - CREATE VIEW find_uptreatments_tree AS - WITH RECURSIVE rel_tree AS ( - SELECT id AS find_id, upstream_treatment_id, downstream_treatment_id, - 1 AS level, - array[upstream_treatment_id] AS path_info - FROM archaeological_finds_find - WHERE upstream_treatment_id is null - UNION ALL - SELECT c.id AS find_id, c.upstream_treatment_id, - c.downstream_treatment_id, - p.level + 1, p.path_info||c.upstream_treatment_id - FROM archaeological_finds_find c - JOIN rel_tree p - ON c.upstream_treatment_id = p.downstream_treatment_id - ) - SELECT DISTINCT find_id, path_info, level - FROM rel_tree ORDER BY find_id; - - CREATE VIEW find_uptreatments AS - SELECT DISTINCT find_id, - path_info[nb] AS treatment_id, level - nb + 1 AS treatment_nb - FROM (SELECT *, generate_subscripts(path_info, 1) AS nb - FROM find_uptreatments_tree) y - WHERE path_info[nb] is not NULL - ORDER BY find_id, treatment_id; - """ - TABLE_COLS = ['treatment__treatment_type', - 'treatment__upstream', - 'treatment__start_date', 'treatment__end_date', - 'treatment__location', 'treatment__container', - 'treatment__person', 'treatment_nb'] - - # search parameters - EXTRA_REQUEST_KEYS = {'find_id': 'find_id'} - - class Meta: - managed = False - db_table = 'find_uptreatments' - unique_together = ('find', 'treatment') - ordering = ('find', '-treatment_nb') - - -class FindDownstreamTreatments(AbsFindTreatments): - """ - CREATE VIEW find_downtreatments_tree AS - WITH RECURSIVE rel_tree AS ( - SELECT id AS find_id, downstream_treatment_id, upstream_treatment_id, - 1 AS level, - array[downstream_treatment_id] AS path_info - FROM archaeological_finds_find - WHERE downstream_treatment_id is null - UNION ALL - SELECT c.id AS find_id, c.downstream_treatment_id, - c.upstream_treatment_id, - p.level + 1, p.path_info||c.downstream_treatment_id - FROM archaeological_finds_find c - JOIN rel_tree p - ON c.downstream_treatment_id = p.upstream_treatment_id - ) - SELECT DISTINCT find_id, path_info, level - FROM rel_tree ORDER BY find_id; - - CREATE VIEW find_downtreatments AS - SELECT DISTINCT find_id, - path_info[nb] AS treatment_id, level - nb + 1 AS treatment_nb - FROM (SELECT *, generate_subscripts(path_info, 1) AS nb - FROM find_downtreatments_tree) y - WHERE path_info[nb] is not NULL - ORDER BY find_id, treatment_id; - """ - TABLE_COLS = ['treatment__treatment_type', - 'treatment__downstream', - 'treatment__start_date', 'treatment__end_date', - 'treatment__location', 'treatment__container', - 'treatment__person', 'treatment_nb'] - - # search parameters - EXTRA_REQUEST_KEYS = {'find_id': 'find_id'} - - class Meta: - managed = False - db_table = 'find_downtreatments' - unique_together = ('find', 'treatment') - ordering = ('find', '-treatment_nb') - - -class FindTreatments(AbsFindTreatments): - """ - CREATE VIEW find_treatments AS - SELECT find_id, treatment_id, treatment_nb, TRUE as upstream - FROM find_uptreatments - UNION - SELECT find_id, treatment_id, treatment_nb, FALSE as upstream - FROM find_downtreatments - ORDER BY find_id, treatment_id, upstream; - """ - upstream = models.BooleanField(_(u"Is upstream")) - - class Meta: - managed = False - db_table = 'find_treatments' - unique_together = ('find', 'treatment') - ordering = ('find', 'upstream', '-treatment_nb') - - -class TreatmentSource(Source): - class Meta: - verbose_name = _(u"Treatment documentation") - verbose_name_plural = _(u"Treament documentations") - treatment = models.ForeignKey( - Treatment, verbose_name=_(u"Treatment"), related_name="source") - - @property - def owner(self): - return self.treatment - - -class Property(LightHistorizedItem): - find = models.ForeignKey(Find, verbose_name=_(u"Find")) - administrative_act = models.ForeignKey( - AdministrativeAct, verbose_name=_(u"Administrative act")) - person = models.ForeignKey(Person, verbose_name=_(u"Person"), - related_name='properties') - start_date = models.DateField(_(u"Start date")) - end_date = models.DateField(_(u"End date")) - - class Meta: - verbose_name = _(u"Property") - verbose_name_plural = _(u"Properties") - - def __unicode__(self): - return self.person + settings.JOINT + self.find +from archaeological_finds.models_finds import MaterialType, ConservatoryState,\ + PreservationType, IntegrityType, RemarkabilityType, ObjectType, BaseFind, \ + FindBasket, Find, FindSource, Property, IS_ISOLATED_CHOICES, CHECK_CHOICES +from archaeological_finds.models_treatments import TreatmentType, Treatment, \ + AbsFindTreatments, FindUpstreamTreatments, FindDownstreamTreatments, \ + FindTreatments, TreatmentSource, TreatmentFile, TreatmentFileType, \ + TreatmentFileSource, TreatmentState + +__all__ = ['MaterialType', 'ConservatoryState', 'PreservationType', + 'IntegrityType', 'RemarkabilityType', 'ObjectType', + 'BaseFind', 'FindBasket', 'Find', 'FindSource', 'Property', + 'IS_ISOLATED_CHOICES', 'CHECK_CHOICES', + 'TreatmentType', 'TreatmentState', 'Treatment', 'AbsFindTreatments', + 'FindUpstreamTreatments', 'FindDownstreamTreatments', + 'FindTreatments', 'TreatmentSource', 'TreatmentFile', + 'TreatmentFileType', 'TreatmentFileSource'] diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py new file mode 100644 index 000000000..e29669773 --- /dev/null +++ b/archaeological_finds/models_finds.py @@ -0,0 +1,813 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (C) 2012-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# See the file COPYING for details. + +import datetime + +from django.conf import settings +from django.contrib.gis.db import models +from django.core.urlresolvers import reverse +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 + +from ishtar_common.utils import cached_label_changed + +from ishtar_common.models import GeneralType, ImageModel, BaseHistorizedItem, \ + ShortMenuItem, LightHistorizedItem, HistoricalRecords, OwnPerms, Source, \ + Person, Basket, get_external_id, post_save_cache + +from archaeological_operations.models import AdministrativeAct +from archaeological_context_records.models import ContextRecord, Dating + +from ishtar_common.models import PRIVATE_FIELDS +from archaeological_warehouse.models import Container, Collection + + +class MaterialType(GeneralType): + code = models.CharField(_(u"Code"), max_length=10, blank=True, null=True) + recommendation = models.TextField(_(u"Recommendation"), blank=True, + null=True) + parent = models.ForeignKey("MaterialType", blank=True, null=True, + verbose_name=_(u"Parent material")) + + class Meta: + verbose_name = _(u"Material type") + verbose_name_plural = _(u"Material types") + ordering = ('label',) +post_save.connect(post_save_cache, sender=MaterialType) +post_delete.connect(post_save_cache, sender=MaterialType) + + +class ConservatoryState(GeneralType): + parent = models.ForeignKey("ConservatoryState", blank=True, null=True, + verbose_name=_(u"Parent conservatory state")) + + class Meta: + verbose_name = _(u"Conservatory state") + verbose_name_plural = _(u"Conservatory states") + ordering = ('label',) +post_save.connect(post_save_cache, sender=ConservatoryState) +post_delete.connect(post_save_cache, sender=ConservatoryState) + + +class PreservationType(GeneralType): + class Meta: + verbose_name = _(u"Preservation type") + verbose_name_plural = _(u"Preservation types") + ordering = ('label',) +post_save.connect(post_save_cache, sender=PreservationType) +post_delete.connect(post_save_cache, sender=PreservationType) + + +class IntegrityType(GeneralType): + class Meta: + verbose_name = _(u"Integrity / interest type") + verbose_name_plural = _(u"Integrity / interest types") + ordering = ('label',) +post_save.connect(post_save_cache, sender=IntegrityType) +post_delete.connect(post_save_cache, sender=IntegrityType) + + +class RemarkabilityType(GeneralType): + class Meta: + verbose_name = _(u"Remarkability type") + verbose_name_plural = _(u"Remarkability types") + ordering = ('label',) +post_save.connect(post_save_cache, sender=RemarkabilityType) +post_delete.connect(post_save_cache, sender=RemarkabilityType) + + +class ObjectType(GeneralType): + parent = models.ForeignKey("ObjectType", blank=True, null=True, + verbose_name=_(u"Parent")) + + class Meta: + verbose_name = _(u"Object type") + verbose_name_plural = _(u"Object types") + ordering = ('parent__label', 'label',) + + def full_label(self): + lbls = [self.label] + item = self + while item.parent: + item = item.parent + lbls.append(item.label) + return u" > ".join(reversed(lbls)) + + def __unicode__(self): + return self.label +post_save.connect(post_save_cache, sender=ObjectType) +post_delete.connect(post_save_cache, sender=ObjectType) + +IS_ISOLATED_CHOICES = ( + ('U', _(u"Unknow")), + ('O', _(u"Object")), + ('B', _(u"Batch")) +) + + +class BaseFind(BaseHistorizedItem, OwnPerms): + IS_ISOLATED_DICT = dict(IS_ISOLATED_CHOICES) + label = models.TextField(_(u"Free ID")) + external_id = models.TextField(_(u"External ID"), blank=True, null=True) + auto_external_id = models.BooleanField( + _(u"External ID is set automatically"), default=False) + description = models.TextField(_(u"Description"), blank=True, null=True) + comment = models.TextField(_(u"Comment"), blank=True, null=True) + topographic_localisation = models.CharField( + _(u"Topographic localisation"), blank=True, null=True, max_length=120) + special_interest = models.CharField(_(u"Special interest"), blank=True, + null=True, max_length=120) + context_record = models.ForeignKey( + ContextRecord, related_name='base_finds', + verbose_name=_(u"Context Record")) + discovery_date = models.DateField(_(u"Discovery date"), + blank=True, null=True) + batch = models.CharField(_(u"Batch/object"), max_length=1, default="U", + choices=IS_ISOLATED_CHOICES) + index = models.IntegerField(u"Index", default=0) + material_index = models.IntegerField(_(u"Material index"), default=0) + point = models.PointField(_(u"Point"), blank=True, null=True, dim=3) + line = models.LineStringField(_(u"Line"), blank=True, null=True) + polygon = models.PolygonField(_(u"Polygon"), blank=True, null=True) + cache_short_id = models.TextField( + _(u"Short ID"), blank=True, null=True, + help_text=_(u"Cached value - do not edit")) + cache_complete_id = models.TextField( + _(u"Complete ID"), blank=True, null=True, + help_text=_(u"Cached value - do not edit")) + history = HistoricalRecords() + RELATED_POST_PROCESS = ['find'] + + class Meta: + verbose_name = _(u"Base find") + verbose_name_plural = _(u"Base finds") + permissions = ( + ("view_basefind", ugettext(u"Can view all Base finds")), + ("view_own_basefind", ugettext(u"Can view own Base find")), + ("add_own_basefind", ugettext(u"Can add own Base find")), + ("change_own_basefind", ugettext(u"Can change own Base find")), + ("delete_own_basefind", ugettext(u"Can delete own Base find")), + ) + + def __unicode__(self): + return self.label + + def get_last_find(self): + # TODO: manage virtuals - property(last_find) ? + finds = self.find.filter().order_by("-order").all() + return finds and finds[0] + + @classmethod + def get_max_index(cls, operation): + q = BaseFind.objects \ + .filter(context_record__operation=operation) + if q.count(): + return q.aggregate(Max('index'))['index__max'] + return 0 + + def complete_id(self): + # OPE|MAT.CODE|UE|FIND_index + if not self.context_record.operation: + return + # find = self.get_last_find() + ope = self.context_record.operation + c_id = [unicode(ope.code_patriarche) if ope.code_patriarche else + (unicode(ope.year) + "-" + unicode(ope.operation_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)) + 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)) + return settings.JOINT.join(c_id) + + def full_label(self): + return self._real_label() or self._temp_label() or u"" + + def material_type_label(self): + find = self.get_last_find() + finds = [find and find.material_type.code or ''] + ope = self.context_record.operation + finds += [unicode(ope.code_patriarche) or + (unicode(ope.year) + "-" + unicode(ope.operation_code))] + finds += [self.context_record.label, unicode(self.material_index)] + return settings.JOINT.join(finds) + + def _real_label(self): + if not self.context_record.parcel \ + or not self.context_record.operation \ + or not self.context_record.operation.code_patriarche: + return + find = self.get_last_find() + lbl = find.label or self.label + return settings.JOINT.join( + [unicode(it) for it in ( + self.context_record.operation.code_patriarche, + self.context_record.label, lbl) if it]) + + def _temp_label(self): + if not self.context_record.parcel: + return + find = self.get_last_find() + lbl = find.label or self.label + return settings.JOINT.join( + [unicode(it) for it in ( + self.context_record.parcel.year, self.index, + self.context_record.label, lbl) if it]) + + @property + def name(self): + return self.label + + @classmethod + def get_extra_fields(cls): + fields = {} + for field in Find._meta.many_to_many: + if field.name == 'base_finds': + fields['find'] = field.related.model + return fields + + def save(self, *args, **kwargs): + returned = super(BaseFind, self).save(*args, **kwargs) + + updated = False + if not self.external_id or self.auto_external_id: + external_id = get_external_id('base_find_external_id', self) + if external_id != self.external_id: + updated = True + self.auto_external_id = True + self.external_id = external_id + if updated: + self._cached_label_checked = False + self.save() + return returned + +WEIGHT_UNIT = (('g', _(u"g")), + ('kg', _(u"kg")),) + +CHECK_CHOICES = (('NC', _(u"Not checked")), + ('CI', _(u"Checked but incorrect")), + ('CC', _(u"Checked and correct")), + ) + + +class FindBasket(Basket): + items = models.ManyToManyField('Find', blank=True, null=True, + related_name='basket') + + +class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem): + CHECK_DICT = dict(CHECK_CHOICES) + SHOW_URL = 'show-find' + SLUG = 'find' + TABLE_COLS = ['label', 'material_types', 'datings__period__label', + 'base_finds__context_record__parcel__town', + 'base_finds__context_record__operation__year', + 'base_finds__context_record__operation__operation_code', + 'container__cached_label', + 'base_finds__batch', + 'base_finds__context_record__parcel__town', + 'base_finds__context_record__parcel', ] + if settings.COUNTRY == 'fr': + TABLE_COLS.insert( + 6, 'base_finds__context_record__operation__code_patriarche') + TABLE_COLS_FOR_OPE = [ + 'base_finds__cache_short_id', + 'base_finds__cache_complete_id', + 'previous_id', 'label', 'material_types', + 'datings__period__label', 'find_number', 'object_types', + 'container__cached_label', + 'description', + 'base_finds__context_record__parcel__town', + 'base_finds__context_record__parcel', ] + COL_LABELS = { + 'datings__period__label': _(u"Periods"), + 'container__cached_label': _(u"Container"), + } + + EXTRA_FULL_FIELDS = [ + 'base_finds__cache_short_id', 'base_finds__cache_complete_id', + 'base_finds__comment', 'base_finds__description', + 'base_finds__topographic_localisation', + 'base_finds__special_interest', + 'base_finds__discovery_date'] + EXTRA_FULL_FIELDS_LABELS = { + 'base_finds__cache_short_id': _(u"Base find - Short ID"), + 'base_finds__cache_complete_id': _(u"Base find - Complete ID"), + 'base_finds__comment': _(u"Base find - Comment"), + 'base_finds__description': _(u"Base find - Description"), + 'base_finds__topographic_localisation': _(u"Base find - " + u"Topographic localisation"), + 'base_finds__special_interest': _(u"Base find - Special interest"), + 'base_finds__discovery_date': _(u"Base find - Discovery date"), + } + ATTRS_EQUIV = {'get_first_base_find': 'base_finds'} + + # search parameters + REVERSED_BOOL_FIELDS = ['image__isnull'] + RELATION_TYPES_PREFIX = { + 'ope_relation_types': + 'base_finds__context_record__operation__'} + RELATIVE_SESSION_NAMES = [ + ('contextrecord', 'base_finds__context_record__pk'), + ('operation', 'base_finds__context_record__operation__pk'), + ('file', 'base_finds__context_record__operation__associated_file__pk') + ] + BASE_REQUEST = {'downstream_treatment__isnull': True} + EXTRA_REQUEST_KEYS = { + 'base_finds__cache_short_id': + 'base_finds__cache_short_id__icontains', + 'base_finds__cache_complete_id': + 'base_finds__cache_complete_id__icontains', + 'label': + 'label__icontains', + 'base_finds__context_record': + 'base_finds__context_record__pk', + 'base_finds__context_record__parcel__town': + 'base_finds__context_record__parcel__town', + 'base_finds__context_record__operation__year': + 'base_finds__context_record__operation__year__contains', + 'base_finds__context_record__operation': + 'base_finds__context_record__operation__pk', + 'archaeological_sites': + 'base_finds__context_record__operation__archaeological_sites__pk', + 'base_finds__context_record__operation__code_patriarche': + 'base_finds__context_record__operation__code_patriarche', + 'datings__period': 'datings__period__pk', + 'base_finds__find__description': + 'base_finds__find__description__icontains', + 'base_finds__batch': 'base_finds__batch', + 'basket': 'basket', + 'cached_label': 'cached_label__icontains', + 'image': 'image__isnull'} + EXTRA_REQUEST_KEYS.update( + dict( + [(key, key) for key in TABLE_COLS + if key not in EXTRA_REQUEST_KEYS] + ) + ) + EXTRA_REQUEST_KEYS.update( + dict( + [(key, key) for key in TABLE_COLS_FOR_OPE + if key not in EXTRA_REQUEST_KEYS] + ) + ) + + # fields + base_finds = models.ManyToManyField(BaseFind, verbose_name=_(u"Base find"), + related_name='find') + external_id = models.TextField(_(u"External ID"), blank=True, null=True) + auto_external_id = models.BooleanField( + _(u"External ID is set automatically"), default=False) + order = models.IntegerField(_(u"Order"), default=1) + label = models.TextField(_(u"Free ID")) + description = models.TextField(_(u"Description"), blank=True, null=True) + material_types = models.ManyToManyField( + MaterialType, verbose_name=_(u"Material types"), related_name='finds') + conservatory_state = models.ForeignKey( + ConservatoryState, verbose_name=_(u"Conservatory state"), blank=True, + null=True, on_delete=models.SET_NULL) + conservatory_comment = models.TextField(_(u"Conservatory comment"), + blank=True, null=True) + preservation_to_considers = models.ManyToManyField( + PreservationType, verbose_name=_(u"Type of preservation to consider"), + related_name='finds') + volume = models.FloatField(_(u"Volume (l)"), blank=True, null=True) + weight = models.FloatField(_(u"Weight (g)"), blank=True, null=True) + weight_unit = models.CharField(_(u"Weight unit"), max_length=4, + blank=True, null=True, choices=WEIGHT_UNIT) + find_number = models.IntegerField(_(u"Find number"), blank=True, null=True) + upstream_treatment = models.ForeignKey( + "Treatment", blank=True, null=True, + related_name='downstream', on_delete=models.SET_NULL, + verbose_name=_(u"Upstream treatment")) + downstream_treatment = models.ForeignKey( + "Treatment", blank=True, null=True, related_name='upstream', + verbose_name=_(u"Downstream treatment"), on_delete=models.SET_NULL) + datings = models.ManyToManyField(Dating, verbose_name=_(u"Dating"), + related_name='find') + container = models.ForeignKey( + Container, verbose_name=_(u"Container"), blank=True, null=True, + related_name='finds', on_delete=models.SET_NULL) + is_complete = models.NullBooleanField(_(u"Is complete?"), blank=True, + null=True) + object_types = models.ManyToManyField( + ObjectType, verbose_name=_(u"Object types"), related_name='find') + integrities = models.ManyToManyField( + IntegrityType, verbose_name=_(u"Integrity / interest"), + related_name='find') + remarkabilities = models.ManyToManyField( + RemarkabilityType, verbose_name=_(u"Remarkability"), + related_name='find') + min_number_of_individuals = models.IntegerField( + _(u"Minimum number of individuals (MNI)"), blank=True, null=True) + length = models.FloatField(_(u"Length (cm)"), blank=True, null=True) + width = models.FloatField(_(u"Width (cm)"), blank=True, null=True) + height = models.FloatField(_(u"Height (cm)"), blank=True, null=True) + diameter = models.FloatField(_(u"Diameter (cm)"), blank=True, null=True) + thickness = models.FloatField(_(u"Thickness (cm)"), blank=True, null=True) + topographic_reference_point = models.CharField( + _(u"Point of topographic reference"), max_length=20, + blank=True, null=True) + dimensions_comment = models.TextField(_(u"Dimensions comment"), + blank=True, null=True) + mark = models.TextField(_(u"Mark"), blank=True, null=True) + comment = models.TextField(_(u"Comment"), blank=True, null=True) + dating_comment = models.TextField(_(u"Comment on dating"), blank=True, + null=True) + previous_id = models.TextField(_(u"Previous ID"), blank=True, null=True) + index = models.IntegerField(u"Index", default=0) + checked = models.CharField(_(u"Check"), max_length=2, default='NC', + choices=CHECK_CHOICES) + check_date = models.DateField(_(u"Check date"), + default=datetime.date.today) + estimated_value = models.FloatField(_(u"Estimated value"), blank=True, + null=True) + collection = models.ForeignKey( + Collection, verbose_name=_(u"Collection"), blank=True, null=True, + related_name='finds', on_delete=models.SET_NULL) + cached_label = models.TextField(_(u"Cached name"), null=True, blank=True) + history = HistoricalRecords() + BASKET_MODEL = FindBasket + IMAGE_PREFIX = 'finds/' + + class Meta: + verbose_name = _(u"Find") + verbose_name_plural = _(u"Finds") + permissions = ( + ("view_find", ugettext(u"Can view all Finds")), + ("view_own_find", ugettext(u"Can view own Find")), + ("add_own_find", ugettext(u"Can add own Find")), + ("change_own_find", ugettext(u"Can change own Find")), + ("delete_own_find", ugettext(u"Can delete own Find")), + ) + ordering = ('cached_label',) + + @property + def short_class_name(self): + return _(u"FIND") + + def __unicode__(self): + lbl = settings.JOINT.join( + [getattr(self, attr) for attr in ('administrative_index', 'label') + if getattr(self, attr)]) + return lbl + + @property + def short_label(self): + return self.reference + + @property + def dating(self): + return u" ; ".join([unicode(dating) for dating in self.datings.all()]) + + @property + def show_url(self): + return reverse('show-find', args=[self.pk, '']) + + @property + def name(self): + return u" - ".join([base_find.name + for base_find in self.base_finds.all()]) + + @property + def full_label(self): + lbl = u" - ".join([getattr(self, attr) + for attr in ('label', 'administrative_index') + if getattr(self, attr)]) + base = u" - ".join([base_find.complete_id() + for base_find in self.base_finds.all()]) + if base: + lbl += u' ({})'.format(base) + return lbl + + def get_first_base_find(self): + q = self.base_finds + if not q.count(): + return + return q.order_by('-pk').all()[0] + + @property + def reference(self): + bf = self.get_first_base_find() + if not bf: + return "00" + return bf.short_id() + + @property + def administrative_index(self): + bf = self.get_first_base_find() + if not bf or not bf.context_record or not bf.context_record.operation: + return "" + return "{}-{}".format( + bf.context_record.operation.get_reference(), + self.index) + + def _get_treatments(self, model, rel='upstream'): + treatments, findtreats = [], [] + for findtreat in model.objects.filter( + find_id=self.pk).order_by( + 'treatment_nb', 'treatment__start_date', + 'treatment__end_date').distinct().all(): + if findtreat.pk in findtreats: + continue + findtreats.append(findtreat.pk) + q = getattr(findtreat.treatment, rel).distinct().order_by( + 'label') + treatments.append((q.all(), findtreat.treatment)) + return treatments + + @property + def weight_string(self): + if not self.weight: + return "" + return "{} {}".format(self.weight, self.weight_unit or "") + + def upstream_treatments(self): + from archaeological_finds.models_treatments import \ + FindUpstreamTreatments + return self._get_treatments(FindUpstreamTreatments, 'upstream') + + def downstream_treatments(self): + from archaeological_finds.models_treatments import \ + FindDownstreamTreatments + return self._get_treatments(FindDownstreamTreatments, 'downstream') + + def all_treatments(self): + return self.upstream_treatments() + self.downstream_treatments() + + def get_department(self): + bf = self.get_first_base_find() + if not bf: + return "00" + return bf.context_record.operation.get_department() + + def get_town_label(self): + bf = self.get_first_base_find() + if not bf: + return "00" + return bf.context_record.operation.get_town_label() + + @classmethod + def get_periods(cls, slice='year', fltr={}): + q = cls.objects + if fltr: + q = q.filter(**fltr) + if slice == 'year': + years = set() + finds = q.filter(downstream_treatment__isnull=True) + for find in finds: + bi = find.base_finds.all() + if not bi: + continue + bi = bi[0] + if bi.context_record.operation.start_date: + yr = bi.context_record.operation.start_date.year + years.add(yr) + return list(years) + + @classmethod + def get_by_year(cls, year, fltr={}): + q = cls.objects + if fltr: + q = q.filter(**fltr) + return q.filter( + downstream_treatment__isnull=True, + base_finds__context_record__operation__start_date__year=year) + + @classmethod + def get_operations(cls): + operations = set() + finds = cls.objects.filter(downstream_treatment__isnull=True) + for find in finds: + bi = find.base_finds.all() + if not bi: + continue + bi = bi[0] + pk = bi.context_record.operation.pk + operations.add(pk) + return list(operations) + + @classmethod + def get_by_operation(cls, operation_id): + return cls.objects.filter( + downstream_treatment__isnull=True, + base_finds__context_record__operation__pk=operation_id) + + @classmethod + def get_total_number(cls, fltr={}): + q = cls.objects + if fltr: + q = q.filter(**fltr) + return q.filter(downstream_treatment__isnull=True).count() + + def duplicate(self, user): + model = self.__class__ + # base fields + table_cols = [field.name for field in model._meta.fields + if field.name not in PRIVATE_FIELDS or + field.name == 'order'] + dct = dict([(attr, getattr(self, attr)) for attr in + table_cols]) + dct['order'] += 1 + dct['history_modifier'] = user + new = self.__class__(**dct) + new.save() + + # m2m fields + m2m = [field.name for field in model._meta.many_to_many + if field.name not in PRIVATE_FIELDS] + for field in m2m: + for val in getattr(self, field).all(): + getattr(new, field).add(val) + return new + + @classmethod + def get_query_owns(cls, user): + return Q(base_finds__context_record__operation__scientist=user. + ishtaruser.person) | \ + Q(base_finds__context_record__operation__in_charge=user. + ishtaruser.person) | \ + Q(history_creator=user) + + @classmethod + def get_owns(cls, user, menu_filtr=None, limit=None): + replace_query = None + if menu_filtr and 'contextrecord' in menu_filtr: + replace_query = Q( + base_finds__context_record=menu_filtr['contextrecord'] + ) + owns = super(Find, cls).get_owns( + user, replace_query=replace_query, + limit=limit) + return sorted( + owns, key=lambda x: x.cached_label + if hasattr(x, 'cached_label') else unicode(x)) + + def _generate_cached_label(self): + return unicode(self) + + def save(self, *args, **kwargs): + super(Find, self).save(*args, **kwargs) + + updated = False + self.skip_history_when_saving = True + if not self.external_id or self.auto_external_id: + external_id = get_external_id('find_external_id', self) + if external_id != self.external_id: + updated = True + self.auto_external_id = True + self.external_id = external_id + if updated: + self._cached_label_checked = False + self.save() + return + + q = self.base_finds + if not self.index and q.count(): + operation = q.filter( + context_record__operation__pk__isnull=False).order_by( + '-context_record__operation__start_date') + if operation.count(): + operation = operation.all()[0].context_record.operation + q = Find.objects \ + .filter(base_finds__context_record__operation=operation) + if self.pk: + q = q.exclude(pk=self.pk) + if q.count(): + self.index = q.aggregate(Max('index'))['index__max'] + 1 + else: + self.index = 1 + self._cached_label_checked = False + self.save() + for base_find in self.base_finds.filter( + context_record__operation__pk__isnull=False).all(): + modified = False + if not base_find.index: + modified = True + base_find.index = BaseFind.get_max_index( + base_find.context_record.operation) + 1 + short_id = base_find.short_id() + if base_find.cache_short_id != short_id: + base_find.cache_short_id = short_id + modified = True + complete_id = base_find.complete_id() + if base_find.cache_complete_id != complete_id: + base_find.cache_complete_id = complete_id + modified = True + if modified: + base_find.skip_history_when_saving = True + base_find._cached_label_checked = False + base_find.save() + # if not base_find.material_index: + # idx = BaseFind.objects\ + # .filter(context_record=base_find.context_record, + # find__material_types=self.material_type)\ + # .aggregate(Max('material_index')) + # base_find.material_index = \ + # idx and idx['material_index__max'] + 1 or 1 + + +post_save.connect(cached_label_changed, sender=Find) + + +def base_find_find_changed(sender, **kwargs): + obj = kwargs.get('instance', None) + if not obj: + return + # recalculate complete id and external id + obj.save() + +m2m_changed.connect(base_find_find_changed, sender=Find.base_finds.through) + + +class FindSource(Source): + SHOW_URL = 'show-findsource' + MODIFY_URL = 'find_source_modify' + TABLE_COLS = [ + 'find__base_finds__context_record__operation', + 'find__base_finds__context_record', 'find'] + \ + Source.TABLE_COLS + + # search parameters + BOOL_FIELDS = ['duplicate'] + RELATIVE_SESSION_NAMES = [ + ('find', 'find__pk'), + ('contextrecord', 'find__base_finds__context_record__pk'), + ('operation', 'find__base_finds__context_record__operation__pk'), + ('file', + 'find__base_finds__context_record__operation__associated_file__pk') + ] + EXTRA_REQUEST_KEYS = { + 'title': 'title__icontains', + 'description': 'description__icontains', + 'comment': 'comment__icontains', + 'additional_information': 'additional_information__icontains', + 'person': 'authors__person__pk', + 'find__base_finds__context_record__operation__year': + 'find__base_finds__context_record__operation__year', + 'find__base_finds__context_record__operation__operation_code': + 'find__base_finds__context_record__operation__operation_code', + 'find__base_finds__context_record__operation__code_patriarche': + 'find__base_finds__context_record__operation__code_patriarche', + 'find__datings__period': 'find__datings__period__pk', + 'find__description': 'find__description__icontains', + } + + class Meta: + verbose_name = _(u"Find documentation") + verbose_name_plural = _(u"Find documentations") + find = models.ForeignKey(Find, verbose_name=_(u"Find"), + related_name="source") + + @property + def owner(self): + return self.find + + +class Property(LightHistorizedItem): + find = models.ForeignKey(Find, verbose_name=_(u"Find")) + administrative_act = models.ForeignKey( + AdministrativeAct, verbose_name=_(u"Administrative act")) + person = models.ForeignKey(Person, verbose_name=_(u"Person"), + related_name='properties') + start_date = models.DateField(_(u"Start date")) + end_date = models.DateField(_(u"End date")) + + class Meta: + verbose_name = _(u"Property") + verbose_name_plural = _(u"Properties") + + def __unicode__(self): + return self.person + settings.JOINT + self.find diff --git a/archaeological_finds/models_treatments.py b/archaeological_finds/models_treatments.py new file mode 100644 index 000000000..b8ed79a62 --- /dev/null +++ b/archaeological_finds/models_treatments.py @@ -0,0 +1,568 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (C) 2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# See the file COPYING for details. + +import datetime + +from django.conf import settings +from django.contrib.gis.db import models +from django.db.models import Max, Q +from django.db.models.signals import post_save, post_delete, pre_delete +from django.template.defaultfilters import slugify +from django.utils.translation import ugettext_lazy as _, ugettext + + +from ishtar_common.utils import cached_label_changed +from ishtar_common.models import GeneralType, ImageModel, BaseHistorizedItem, \ + OwnPerms, HistoricalRecords, Person, Organization, Source, \ + ValueGetter, post_save_cache, ShortMenuItem +from archaeological_warehouse.models import Warehouse, Container +from archaeological_finds.models_finds import Find, FindBasket +from archaeological_operations.models import ClosedItem + + +class TreatmentType(GeneralType): + order = models.IntegerField(_(u"Order"), default=10) + parent = models.ForeignKey("TreatmentType", verbose_name=_(u"Parent type"), + blank=True, null=True) + virtual = models.BooleanField(_(u"Virtual")) + upstream_is_many = models.BooleanField( + _(u"Upstream is many"), default=False, + help_text=_( + u"Check this if for this treatment from many finds you'll get " + u"one.")) + downstream_is_many = models.BooleanField( + _(u"Downstream is many"), default=False, + help_text=_( + u"Check this if for this treatment from one find you'll get " + u"many.")) + + class Meta: + verbose_name = _(u"Treatment type") + verbose_name_plural = _(u"Treatment types") + ordering = ('label',) +post_save.connect(post_save_cache, sender=TreatmentType) +post_delete.connect(post_save_cache, sender=TreatmentType) + + +class TreatmentState(GeneralType): + class Meta: + verbose_name = _(u"Treatment state type") + verbose_name_plural = _(u"Treatment state types") + ordering = ('label',) +post_save.connect(post_save_cache, sender=TreatmentState) +post_delete.connect(post_save_cache, sender=TreatmentState) + + +class Treatment(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem): + SHOW_URL = 'show-treatment' + TABLE_COLS = ('year', 'index', 'treatment_types__label', + 'treatment_state__label', + 'label', 'person', + 'start_date', 'downstream_cached_label', + 'upstream_cached_label') + REVERSED_BOOL_FIELDS = ['image__isnull'] + EXTRA_REQUEST_KEYS = { + "label": 'label__icontains', + "other_reference": 'other_reference__icontains', + "treatment_types": "treatment_types__pk", + "downstream_cached_label": "downstream__cached_label", + "upstream_cached_label": "upstream__cached_label", + 'image': 'image__isnull', + } + COL_LABELS = { + "downstream_cached_label": _(u"Downstream find"), + "upstream_cached_label": _(u"Upstream find"), + } + IMAGE_PREFIX = 'treatment' + SLUG = 'treatment' + label = models.CharField(_(u"Label"), blank=True, null=True, + max_length=200) + other_reference = models.CharField(_(u"Other ref."), blank=True, null=True, + max_length=200) + year = models.IntegerField(_(u"Year"), + default=lambda: datetime.datetime.now().year) + index = models.IntegerField(_(u"Index"), default=1) + file = models.ForeignKey( + 'TreatmentFile', related_name='treatments', blank=True, null=True, + verbose_name=_(u"Associated request")) + treatment_types = models.ManyToManyField( + TreatmentType, verbose_name=_(u"Treatment type")) + treatment_state = models.ForeignKey( + TreatmentState, verbose_name=_(u"State"), blank=True, null=True, + ) + location = models.ForeignKey( + Warehouse, verbose_name=_(u"Location"), blank=True, null=True, + help_text=_( + u"Location where the treatment is done. Target warehouse for " + u"a move.")) + person = models.ForeignKey( + Person, verbose_name=_(u"Responsible"), blank=True, null=True, + on_delete=models.SET_NULL, related_name='treatments') + organization = models.ForeignKey( + Organization, verbose_name=_(u"Organization"), blank=True, null=True, + on_delete=models.SET_NULL, related_name='treatments') + external_id = models.CharField(_(u"External ID"), blank=True, null=True, + max_length=200) + comment = models.TextField(_(u"Comment"), blank=True, null=True) + description = models.TextField(_(u"Description"), blank=True, null=True) + goal = models.TextField(_(u"Goal"), blank=True, null=True) + start_date = models.DateField(_(u"Start date"), blank=True, null=True) + end_date = models.DateField(_(u"Closing date"), blank=True, null=True) + container = models.ForeignKey(Container, verbose_name=_(u"Container"), + blank=True, null=True) + target_is_basket = models.BooleanField(_(u"Target a basket"), + default=False) + cached_label = models.TextField(_(u"Cached name"), null=True, blank=True) + history = HistoricalRecords() + + class Meta: + verbose_name = _(u"Treatment") + verbose_name_plural = _(u"Treatments") + unique_together = ('year', 'index') + permissions = ( + ("view_treatment", ugettext(u"Can view all Treatments")), + ("view_own_treatment", ugettext(u"Can view own Treatment")), + ("add_own_treatment", ugettext(u"Can add own Treatment")), + ("change_own_treatment", ugettext(u"Can change own Treatment")), + ("delete_own_treatment", ugettext(u"Can delete own Treatment")), + ) + + def __unicode__(self): + if self.cached_label: + return self.cached_label + self.skip_history_when_saving = True + self.save() + return self.cached_label + + @property + def short_class_name(self): + return _(u"TREATMENT") + + @classmethod + def get_query_owns(cls, user): + return (Q(history_creator=user) | + Q(person__ishtaruser=user.ishtaruser)) \ + & Q(end_date__isnull=True) + + @classmethod + def get_owns(cls, user, menu_filtr=None, limit=None): + replace_query = None + if menu_filtr: + if 'treatmentfile' in menu_filtr: + replace_query = Q(file=menu_filtr['treatmentfile']) + if 'find' in menu_filtr: + q = Q(upstream=menu_filtr['find']) | Q( + downstream=menu_filtr['find']) + if replace_query: + replace_query = replace_query | q + else: + replace_query = q + owns = super(Treatment, cls).get_owns( + user, replace_query=replace_query, limit=limit) + return sorted( + owns, key=lambda x: x.cached_label + if hasattr(x, 'cached_label') else unicode(x)) + + def _generate_cached_label(self): + items = [unicode(getattr(self, k)) + for k in ['year', 'index', 'other_reference', 'label'] if + getattr(self, k)] + return u'{} | {}'.format(u"-".join(items), self.treatment_types_lbl()) + + def treatment_types_lbl(self): + """ + Treatment types label + :return: string + """ + return u" ; ".join([unicode(t) for t in self.treatment_types.all()]) + + def pre_save(self): + # is not new + if self.pk is not None: + return + self.index = 1 + q = Treatment.objects.filter(year=self.year) + if q.count(): + self.index = q.all().aggregate(Max('index'))['index__max'] + 1 + + def save(self, *args, **kwargs): + items, user, extra_args_for_new = [], None, [] + if "items" in kwargs: + items = kwargs.pop('items') + if "user" in kwargs: + user = kwargs.pop('user') + if "extra_args_for_new" in kwargs: + extra_args_for_new = kwargs.pop('extra_args_for_new') + self.pre_save() + super(Treatment, self).save(*args, **kwargs) + updated = [] + if hasattr(items, "items"): + items = items.items.all() + for item in items: + new = item.duplicate(user) + item.downstream_treatment = self + item.save() + new.upstream_treatment = self + for k in extra_args_for_new: + setattr(new, k, extra_args_for_new[k]) + new.save() + updated.append(new.pk) + # update baskets + for basket in \ + FindBasket.objects.filter(items__pk=item.pk).all(): + basket.items.remove(item) + basket.items.add(new) + # manage containers + for find in Find.objects.filter(upstream_treatment=self).all(): + if find.container != self.container: + find.container = self.container + if find.pk in updated: + # don't record twice history + find.skip_history_when_saving = True + find.save() + + @property + def associated_filename(self): + return "-".join([str(slugify(getattr(self, attr))) + for attr in ('year', 'index', 'label')]) + +post_save.connect(cached_label_changed, sender=Treatment) + + +def pre_delete_treatment(sender, **kwargs): + treatment = kwargs.get('instance') + for find in Find.objects.filter(upstream_treatment=treatment).all(): + if find.downstream_treatment: + # a new treatment have be done since the deleted treatment + # TODO ! + # raise NotImplemented() + pass + find.delete() + for find in Find.objects.filter(downstream_treatment=treatment).all(): + find.downstream_treatment = None + find.save() + +pre_delete.connect(pre_delete_treatment, sender=Treatment) + + +class AbsFindTreatments(models.Model): + find = models.ForeignKey(Find, verbose_name=_(u"Find"), + related_name='%(class)s_related') + treatment = models.ForeignKey(Treatment, verbose_name=_(u"Treatment"), + primary_key=True) + # primary_key is set to prevent django to ask for an id column + # treatment is not a primary key + treatment_nb = models.IntegerField(_(u"Order")) + TABLE_COLS = ["treatment__" + col for col in Treatment.TABLE_COLS] + \ + ['treatment_nb'] + EXTRA_FULL_FIELDS_LABELS = { + 'treatment__treatment_type': _(u"Treatment type"), + 'treatment__start_date': _(u"Start date"), + 'treatment__end_date': _(u"End date"), + 'treatment__location': _(u"Location"), + 'treatment__container': _(u"Container"), + 'treatment__person': _(u"Doer"), + 'treatment__upstream': _(u"Related finds"), + 'treatment__downstream': _(u"Related finds"), + } + + class Meta: + abstract = True + + def __unicode__(self): + return u"{} - {} [{}]".format( + self.find, self.treatment, self.treatment_nb) + + +class FindUpstreamTreatments(AbsFindTreatments): + CREATE_SQL = """ + CREATE VIEW find_uptreatments_tree AS + WITH RECURSIVE rel_tree AS ( + SELECT id AS find_id, upstream_treatment_id, downstream_treatment_id, + 1 AS level, + array[upstream_treatment_id] AS path_info + FROM archaeological_finds_find + WHERE upstream_treatment_id is null + UNION ALL + SELECT c.id AS find_id, c.upstream_treatment_id, + c.downstream_treatment_id, + p.level + 1, p.path_info||c.upstream_treatment_id + FROM archaeological_finds_find c + JOIN rel_tree p + ON c.upstream_treatment_id = p.downstream_treatment_id + ) + SELECT DISTINCT find_id, path_info, level + FROM rel_tree ORDER BY find_id; + + CREATE VIEW find_uptreatments AS + SELECT DISTINCT find_id, + path_info[nb] AS treatment_id, level - nb + 1 AS treatment_nb + FROM (SELECT *, generate_subscripts(path_info, 1) AS nb + FROM find_uptreatments_tree) y + WHERE path_info[nb] is not NULL + ORDER BY find_id, treatment_id; + + -- deactivate deletion + CREATE RULE find_uptreatments_del AS ON DELETE TO find_uptreatments + DO INSTEAD DELETE FROM archaeological_finds_find where id=NULL; + """ + DELETE_SQL = """ + DROP VIEW find_uptreatments; + DROP VIEW find_uptreatments_tree; + """ + TABLE_COLS = ['treatment__treatment_type', + 'treatment__upstream', + 'treatment__start_date', 'treatment__end_date', + 'treatment__location', 'treatment__container', + 'treatment__person', 'treatment_nb'] + + # search parameters + EXTRA_REQUEST_KEYS = {'find_id': 'find_id'} + + class Meta: + managed = False + db_table = 'find_uptreatments' + unique_together = ('find', 'treatment') + ordering = ('find', '-treatment_nb') + + +class FindDownstreamTreatments(AbsFindTreatments): + CREATE_SQL = """ + CREATE VIEW find_downtreatments_tree AS + WITH RECURSIVE rel_tree AS ( + SELECT id AS find_id, downstream_treatment_id, upstream_treatment_id, + 1 AS level, + array[downstream_treatment_id] AS path_info + FROM archaeological_finds_find + WHERE downstream_treatment_id is null + UNION ALL + SELECT c.id AS find_id, c.downstream_treatment_id, + c.upstream_treatment_id, + p.level + 1, p.path_info||c.downstream_treatment_id + FROM archaeological_finds_find c + JOIN rel_tree p + ON c.downstream_treatment_id = p.upstream_treatment_id + ) + SELECT DISTINCT find_id, path_info, level + FROM rel_tree ORDER BY find_id; + + CREATE VIEW find_downtreatments AS + SELECT DISTINCT find_id, + path_info[nb] AS treatment_id, level - nb + 1 AS treatment_nb + FROM (SELECT *, generate_subscripts(path_info, 1) AS nb + FROM find_downtreatments_tree) y + WHERE path_info[nb] is not NULL + ORDER BY find_id, treatment_id; + + -- deactivate deletion + CREATE RULE find_downtreatments_del AS ON DELETE TO find_downtreatments + DO INSTEAD DELETE FROM archaeological_finds_find where id=NULL; + """ + DELETE_SQL = """ + DROP VIEW find_downtreatments; + DROP VIEW find_downtreatments_tree; + """ + TABLE_COLS = ['treatment__treatment_type', + 'treatment__downstream', + 'treatment__start_date', 'treatment__end_date', + 'treatment__location', 'treatment__container', + 'treatment__person', 'treatment_nb'] + + # search parameters + EXTRA_REQUEST_KEYS = {'find_id': 'find_id'} + + class Meta: + managed = False + db_table = 'find_downtreatments' + unique_together = ('find', 'treatment') + ordering = ('find', '-treatment_nb') + + +class FindTreatments(AbsFindTreatments): + CREATE_SQL = """ + CREATE VIEW find_treatments AS + SELECT find_id, treatment_id, treatment_nb, TRUE as upstream + FROM find_uptreatments + UNION + SELECT find_id, treatment_id, treatment_nb, FALSE as upstream + FROM find_downtreatments + ORDER BY find_id, treatment_id, upstream; + + -- deactivate deletion + CREATE RULE find_treatments_del AS ON DELETE TO find_treatments + DO INSTEAD DELETE FROM archaeological_finds_find where id=NULL; + """ + DELETE_SQL = """ + DROP VIEW find_treatments; + """ + upstream = models.BooleanField(_(u"Is upstream")) + + class Meta: + managed = False + db_table = 'find_treatments' + unique_together = ('find', 'treatment') + ordering = ('find', 'upstream', '-treatment_nb') + + +class TreatmentFileType(GeneralType): + class Meta: + verbose_name = _(u"Treatment request type") + verbose_name_plural = _(u"Treatment request types") + ordering = ('label',) +post_save.connect(post_save_cache, sender=TreatmentFileType) +post_delete.connect(post_save_cache, sender=TreatmentFileType) + + +class TreatmentFile(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter, + ShortMenuItem): + SLUG = 'treatmentfile' + SHOW_URL = 'show-treatmentfile' + TABLE_COLS = ['type', 'year', 'index', 'internal_reference', 'name'] + SLUG = 'treatmentfile' + + # fields + year = models.IntegerField(_(u"Year"), + default=lambda: datetime.datetime.now().year) + index = models.IntegerField(_(u"Index"), default=1) + internal_reference = models.CharField(_(u"Internal reference"), blank=True, + null=True, max_length=200) + external_id = models.CharField(_(u"External ID"), blank=True, null=True, + max_length=200) + name = models.TextField(_(u"Name"), blank=True, null=True) + type = models.ForeignKey(TreatmentFileType, + verbose_name=_(u"Treatment request type")) + in_charge = models.ForeignKey( + Person, related_name='treatmentfile_responsability', + verbose_name=_(u"Person in charge"), on_delete=models.SET_NULL, + blank=True, null=True) + applicant = models.ForeignKey( + Person, related_name='treatmentfile_applicant', + verbose_name=_(u"Applicant"), on_delete=models.SET_NULL, + blank=True, null=True) + applicant_organisation = models.ForeignKey( + Organization, related_name='treatmentfile_applicant', + verbose_name=_(u"Applicant organisation"), on_delete=models.SET_NULL, + blank=True, null=True) + end_date = models.DateField(_(u"Closing date"), null=True, blank=True) + creation_date = models.DateField( + _(u"Creation date"), default=datetime.date.today, blank=True, + null=True) + reception_date = models.DateField(_(u'Reception date'), blank=True, + null=True) + comment = models.TextField(_(u"Comment"), null=True, blank=True) + cached_label = models.TextField(_(u"Cached name"), null=True, blank=True) + history = HistoricalRecords() + + class Meta: + verbose_name = _(u"Treatment request") + verbose_name_plural = _(u"Treatment requests") + unique_together = ('year', 'index') + permissions = ( + ("view_filetreatment", + ugettext(u"Can view all Treatment requests")), + ("view_own_filetreatment", + ugettext(u"Can view own Treatment request")), + ("add_own_filetreatment", + ugettext(u"Can add own Treatment request")), + ("change_own_filetreatment", + ugettext(u"Can change own Treatment request")), + ("delete_own_filetreatment", + ugettext(u"Can delete own Treatment request")), + ) + ordering = ('cached_label',) + + def __unicode__(self): + return self.cached_label + + @property + def short_class_name(self): + return _(u"Treatment request") + + @classmethod + def get_query_owns(cls, user): + return (Q(history_creator=user) | + Q(in_charge__ishtaruser=user.ishtaruser)) \ + & Q(end_date__isnull=True) + + @property + def associated_filename(self): + return "-".join([str(slugify(getattr(self, attr))) + for attr in ('year', 'index', 'internal_reference', + 'name') if getattr(self, attr)]) + + @classmethod + def get_owns(cls, user, menu_filtr=None, limit=None): + owns = super(TreatmentFile, cls).get_owns(user, limit=limit) + return sorted( + owns, key=lambda x: x.cached_label + if hasattr(x, 'cached_label') else unicode(x)) + + def _generate_cached_label(self): + items = [unicode(getattr(self, k)) + for k in ['year', 'index', 'internal_reference', 'name'] if + getattr(self, k)] + return settings.JOINT.join(items) + + def pre_save(self): + # is not new + if self.pk is not None: + return + self.index = 1 + q = TreatmentFile.objects.filter(year=self.year) + if q.count(): + self.index = q.all().aggregate(Max('index'))['index__max'] + 1 + + def save(self, *args, **kwargs): + self.pre_save() + super(TreatmentFile, self).save(*args, **kwargs) + +post_save.connect(cached_label_changed, sender=TreatmentFile) + + +class TreatmentSource(Source): + treatment = models.ForeignKey( + Treatment, verbose_name=_(u"Treatment"), related_name="source") + BOOL_FIELDS = ['duplicate'] + TABLE_COLS = ['treatment__cached_label'] + Source.TABLE_COLS + SHOW_URL = 'show-treatmentsource' + + class Meta: + verbose_name = _(u"Treatment documentation") + verbose_name_plural = _(u"Treament documentations") + + @property + def owner(self): + return self.treatment + + +class TreatmentFileSource(Source): + treatment_file = models.ForeignKey( + TreatmentFile, verbose_name=_(u"Treatment request"), + related_name="source") + BOOL_FIELDS = ['duplicate'] + TABLE_COLS = ['treatment_file__cached_label'] + Source.TABLE_COLS + SHOW_URL = 'show-treatmentfilesource' + + class Meta: + verbose_name = _(u"Treatment request documentation") + verbose_name_plural = _(u"Treatment request documentations") + + @property + def owner(self): + return self.treatment_file diff --git a/archaeological_finds/templates/ishtar/sheet_find.html b/archaeological_finds/templates/ishtar/sheet_find.html index 00470906d..05a796a9f 100644 --- a/archaeological_finds/templates/ishtar/sheet_find.html +++ b/archaeological_finds/templates/ishtar/sheet_find.html @@ -44,11 +44,9 @@ {% field_li "Width (cm)" item.width %} {% field_li "Height (cm)" item.height %} {% field_li "Diameter (cm)" item.diameter %} +{% field_li "Thickness (cm)" item.thickness %} {% field_li "Volume (l)" item.volume %} - -{% if item.weight %}{% with item.weight|add:' '|add:item.weight_unit as weight %} -{% field_li "Weight" weight %} -{% endwith %}{% endif %} +{% field_li "Weight" item.weight_string %} {% if item.dimensions_comment %} </ul> {% field "Dimensions comment" item.dimensions_comment "<pre>" "</pre>" %} @@ -56,6 +54,8 @@ {% endif %} {% field_li "Find number" item.find_number %} +{% field_li "Minimum number of individuals (MNI)" item.min_number_of_individuals %} +{% field_li "Point of topographic reference" item.topographic_reference_point %} {% field_li "Conservatory state" item.conservatory_state %} {% if item.conservatory_comment %} </ul> @@ -73,9 +73,16 @@ {% if item.history_object and item.history_object.CHECK_DICT %} {% field_li "Checked" item.checked|from_dict:item.history_object.CHECK_DICT %} {% endif%} -{% field_li "Container" item.container %} </ul> +{% if item.container %} +<h3>{% trans "Warehouse"%}</h3> +{% field_detail "Container" item.container %} +{% field_detail "Responsible warehouse" item.container.responsible %} +{% field_detail "Location (warehouse)" item.container.location %} +{% field "Precise localisation" item.container.divisions_lbl %} +{% endif %} + {% if item.upstream_treatment or item.downstream_treatment %} <h3>{% trans "Treatments"%}</h3> @@ -85,6 +92,9 @@ <div class='clean-table-wrap'> <table id='{{window_id}}-upstream'> <tr> + <th> </th> + <th>{% trans "Year - index" %}</th> + <th>{% trans "Label" %}</th> <th>{% trans "Type" %}</th> <th>{% trans "Related finds" %}</th> <th>{% trans "Doer" %}</th> @@ -94,7 +104,15 @@ </tr> {% for items, treatment in item.upstream_treatments %} <tr> - <td class='string'>{{ treatment.treatment_type }}</td> + <td> + <a class="display_details" href="#" + onclick="load_window('{% url 'show-treatment' treatment.id %}/');"> + <i class="fa fa-info-circle" aria-hidden="true"></i> + </a> + </td> + <td class='string'>{{ treatment.year }} - {{treatment.index}}</td> + <td class='string'>{{ treatment.label }}</td> + <td class='string'>{{ treatment.treatment_types_lbl }}</td> <td class='item-list'>{% for item in items %}<span>{{item}} {{ item|link_to_window}}</span>{% endfor %}</td> <td class='string'>{{ treatment.person|default_if_none:"-" }}</td> <td class='string'>{{ treatment.container|default_if_none:"-" }}</td> @@ -114,6 +132,9 @@ <div class='clean-table-wrap'> <table id='{{window_id}}-downstream'> <tr> + <th> </th> + <th>{% trans "Year - index" %}</th> + <th>{% trans "Label" %}</th> <th>{% trans "Type" %}</th> <th>{% trans "Related finds" %}</th> <th>{% trans "Doer" %}</th> @@ -123,7 +144,15 @@ </tr> {% for items, treatment in item.downstream_treatments %} <tr> - <td class='string'>{{ treatment.treatment_type }}</td> + <td> + <a class="display_details" href="#" + onclick="load_window('{% url 'show-treatment' treatment.id %}/');"> + <i class="fa fa-info-circle" aria-hidden="true"></i> + </a> + </td> + <td class='string'>{{ treatment.year }} - {{treatment.index}}</td> + <td class='string'>{{ treatment.label }}</td> + <td class='string'>{{ treatment.treatment_types_lbl }}</td> <td class='item-list'>{% for item in items %}<span>{{item}} {{ item|link_to_window}}</span>{% endfor %}</td> <td class='string'>{{ treatment.person|default_if_none:"" }}</td> <td class='string'>{{ treatment.container|default_if_none:"-" }}</td> diff --git a/archaeological_finds/templates/ishtar/sheet_treatment.html b/archaeological_finds/templates/ishtar/sheet_treatment.html new file mode 100644 index 000000000..9ec9db754 --- /dev/null +++ b/archaeological_finds/templates/ishtar/sheet_treatment.html @@ -0,0 +1,53 @@ +{% extends "ishtar/sheet.html" %} +{% load i18n window_field from_dict link_to_window window_tables window_header humanize %} +{% load url from future %} + +{% block head_title %}{% trans "Treatment" %}{% endblock %} +{% block content %} +{% window_nav item window_id 'show-treatment' 'treatment_modify' %} + +{% if item.image %} +<a href='{{item.image.url}}' rel="prettyPhoto" title="{{item.label}}" class='photo'><img src='{{item.thumbnail.url}}'/></a> +{% endif%} + +<p class="window-refs">{{ item.label|default:"" }}</p> +{% if item.other_reference %} +<p class="window-refs">{{ item.other_reference }}</p>{% endif %} +<p class="window-refs">{{ item.year }} - {{ item.index }}</p> +{% if item.external_id %} +<p class="window-refs">{{ item.external_id }}</p>{% endif %} +{% if item.end_date %} +<p class="window-refs">{% trans "Closed" context "Treatment" %} ({{item.end_date}})</p> +{% else %} +<p class="window-refs">{% trans "Active" context "Treatment" %}</p> +{% endif %} + +<ul class='form-flex'> + {% field_li_multiple "Treatment type" item.treatment_types %} + {% field_li "State" item.treatment_state %} + {% field_li_detail "Associated request" item.file %} + {% field_li "Location" item.location %} + {% field_li "Container" item.container %} + {% field_li "Responsible" item.person %} + {% field_li "Organization" item.organization %} + {% field_li "Start date" item.start_date %} + {% field_li "Closing date" item.end_date %} +</ul> +{% if item.description or item.comment or item.goal %} +{% field "Comment" item.comment "<pre>" "</pre>" %} +{% field "Description" item.description "<pre>" "</pre>" %} +{% field "Goal" item.goal "<pre>" "</pre>" %} +{% endif %} + +{% trans "Upstream finds" as finds %} +{% if item.upstream.count %} +{% dynamic_table_document finds 'finds_for_treatment' 'downstream_treatment' item.pk 'TABLE_COLS_FOR_OPE' output %} +{% endif %} + +{% trans "Downstream finds" as finds %} +{% if item.downstream.count %} +{% dynamic_table_document finds 'finds_for_treatment' 'upstream_treatment' item.pk 'TABLE_COLS_FOR_OPE' output %} +{% endif %} + + +{% endblock %} diff --git a/archaeological_finds/templates/ishtar/sheet_treatment_pdf.html b/archaeological_finds/templates/ishtar/sheet_treatment_pdf.html new file mode 100644 index 000000000..08df52e97 --- /dev/null +++ b/archaeological_finds/templates/ishtar/sheet_treatment_pdf.html @@ -0,0 +1,18 @@ +{% extends "ishtar/sheet_treatment.html" %} +{% block header %} +<link rel="stylesheet" href="{{STATIC_URL}}/media/style_basic.css?ver={{VERSION}}" /> +{% endblock %} +{% block main_head %} +{{ block.super }} +<div id="pdfheader"> + Ishtar – {{APP_NAME}} – {{item}} +</div> +{% endblock %} +{%block head_sheet%}{%endblock%} +{%block main_foot%} +<div id="pdffooter"> + – <pdf:pagenumber/> – +</div> +</body> +</html> +{%endblock%} diff --git a/archaeological_finds/templates/ishtar/sheet_treatment_window.html b/archaeological_finds/templates/ishtar/sheet_treatment_window.html new file mode 100644 index 000000000..fb0757d10 --- /dev/null +++ b/archaeological_finds/templates/ishtar/sheet_treatment_window.html @@ -0,0 +1,3 @@ +{% extends "ishtar/sheet_treatment.html" %} +{% block main_head %}{%endblock%} +{% block main_foot %}{%endblock%} diff --git a/archaeological_finds/templates/ishtar/sheet_treatmentfile.html b/archaeological_finds/templates/ishtar/sheet_treatmentfile.html new file mode 100644 index 000000000..097f5defd --- /dev/null +++ b/archaeological_finds/templates/ishtar/sheet_treatmentfile.html @@ -0,0 +1,50 @@ +{% extends "ishtar/sheet.html" %} +{% load i18n window_field from_dict link_to_window window_tables window_header humanize %} +{% load url from future %} + +{% block head_title %}{% trans "Treatment request" %}{% endblock %} +{% block content %} +{% window_nav item window_id 'show-treatmentfile' 'treatmentfile_modify' %} + +<p class="window-refs">{{ item.name|default:"" }}</p> +{% if item.internal_reference %} +<p class="window-refs">{{ item.internal_reference }}</p>{% endif %} +<p class="window-refs">{{ item.year }} - {{ item.index }}</p> +{% if item.external_id %} +<p class="window-refs">{{ item.external_id }}</p>{% endif %} +{% if item.end_date %} +<p class="window-refs">{% trans "Closed" context "Treatment request" %} ({{item.end_date}})</p> +{% else %} +<p class="window-refs">{% trans "Active" context "Treatment request" %}</p> +{% endif %} + +<ul class='form-flex'> + {% field_li "Type" item.type %} + {% field_li_detail "Responsible" item.in_charge %} + {% field_li "Creation date" item.creation_date %} + {% field_li "Reception date" item.reception_date %} + {% field_li "Closing date" item.end_date %} +</ul> +{% field "Comment" item.comment "<pre>" "</pre>" %} + +{% if item.applicant %} +<h3>{% trans "Applicant" %}</h3> +<ul class='form-flex'> + {% field_li_detail "Name" item.applicant %} +</ul> +{% field "Contact" item.applicant.address_lbl %} +{% endif %} +{% if item.applicant_organisation %} +<h3>{% trans "Applicant organisation" %}</h3> +<ul class='form-flex'> + {% field_li_detail "Name" item.applicant_organisation %} +</ul> +{% field "Contact" item.applicant.address_lbl %} +{% endif %} + +{% trans "Treatments" as treatments %} +{% if item.treatments.count %} +{% dynamic_table_document treatments 'treatments' 'file' item.pk '' output '' 'treatment' %} +{% endif %} + +{% endblock %} diff --git a/archaeological_finds/templates/ishtar/sheet_treatmentfile_pdf.html b/archaeological_finds/templates/ishtar/sheet_treatmentfile_pdf.html new file mode 100644 index 000000000..be64ff7eb --- /dev/null +++ b/archaeological_finds/templates/ishtar/sheet_treatmentfile_pdf.html @@ -0,0 +1,18 @@ +{% extends "ishtar/sheet_treatmentfile.html" %} +{% block header %} +<link rel="stylesheet" href="{{STATIC_URL}}/media/style_basic.css?ver={{VERSION}}" /> +{% endblock %} +{% block main_head %} +{{ block.super }} +<div id="pdfheader"> + Ishtar – {{APP_NAME}} – {{item}} +</div> +{% endblock %} +{%block head_sheet%}{%endblock%} +{%block main_foot%} +<div id="pdffooter"> + – <pdf:pagenumber/> – +</div> +</body> +</html> +{%endblock%} diff --git a/archaeological_finds/templates/ishtar/sheet_treatmentfile_window.html b/archaeological_finds/templates/ishtar/sheet_treatmentfile_window.html new file mode 100644 index 000000000..ac692c304 --- /dev/null +++ b/archaeological_finds/templates/ishtar/sheet_treatmentfile_window.html @@ -0,0 +1,3 @@ +{% extends "ishtar/sheet_treatmentfile.html" %} +{% block main_head %}{%endblock%} +{% block main_foot %}{%endblock%} diff --git a/archaeological_finds/templates/ishtar/sheet_treatmentfilesource.html b/archaeological_finds/templates/ishtar/sheet_treatmentfilesource.html new file mode 100644 index 000000000..e558296a8 --- /dev/null +++ b/archaeological_finds/templates/ishtar/sheet_treatmentfilesource.html @@ -0,0 +1,12 @@ +{% extends "ishtar/sheet_source.html" %} +{% load i18n window_field window_header link_to_window %} + +{% block head_title %}{% trans "Treatment request source" %}{% endblock %} + +{% block window_nav %} +{% window_nav item window_id 'show-treatmentfilesource' 'treatmentfile_source_modify' %} +{% endblock %} + +{% block related %} +{% field "Related treatment request" item.owner '' item.owner|link_to_window %} +{% endblock %} diff --git a/archaeological_finds/templates/ishtar/sheet_treatmentfilesource_pdf.html b/archaeological_finds/templates/ishtar/sheet_treatmentfilesource_pdf.html new file mode 100644 index 000000000..d0a0ec8e7 --- /dev/null +++ b/archaeological_finds/templates/ishtar/sheet_treatmentfilesource_pdf.html @@ -0,0 +1,18 @@ +{% extends "ishtar/sheet_treatmentfilesource.html" %} +{% block header %} +<link rel="stylesheet" href="{{STATIC_URL}}/media/style_basic.css?ver={{VERSION}}" /> +{% endblock %} +{% block main_head %} +{{ block.super }} +<div id="pdfheader"> +Ishtar – {{APP_NAME}} – {{item}} +</div> +{% endblock %} +{%block head_sheet%}{%endblock%} +{%block main_foot%} +<div id="pdffooter"> +– <pdf:pagenumber/> – +</div> +</body> +</html> +{%endblock%} diff --git a/archaeological_finds/templates/ishtar/sheet_treatmentfilesource_window.html b/archaeological_finds/templates/ishtar/sheet_treatmentfilesource_window.html new file mode 100644 index 000000000..4ebf9c02a --- /dev/null +++ b/archaeological_finds/templates/ishtar/sheet_treatmentfilesource_window.html @@ -0,0 +1,3 @@ +{% extends "ishtar/sheet_treatmentfilesource.html" %} +{% block main_head %}{%endblock%} +{% block main_foot %}{%endblock%} diff --git a/archaeological_finds/templates/ishtar/sheet_treatmentsource.html b/archaeological_finds/templates/ishtar/sheet_treatmentsource.html new file mode 100644 index 000000000..0825810ad --- /dev/null +++ b/archaeological_finds/templates/ishtar/sheet_treatmentsource.html @@ -0,0 +1,12 @@ +{% extends "ishtar/sheet_source.html" %} +{% load i18n window_field window_header link_to_window %} + +{% block head_title %}{% trans "Treatment source" %}{% endblock %} + +{% block window_nav %} +{% window_nav item window_id 'show-treatmentsource' 'treatment_source_modify' %} +{% endblock %} + +{% block related %} +{% field "Related treatment" item.owner '' item.owner|link_to_window %} +{% endblock %} diff --git a/archaeological_finds/templates/ishtar/sheet_treatmentsource_pdf.html b/archaeological_finds/templates/ishtar/sheet_treatmentsource_pdf.html new file mode 100644 index 000000000..c38764559 --- /dev/null +++ b/archaeological_finds/templates/ishtar/sheet_treatmentsource_pdf.html @@ -0,0 +1,18 @@ +{% extends "ishtar/sheet_treatmentsource.html" %} +{% block header %} +<link rel="stylesheet" href="{{STATIC_URL}}/media/style_basic.css?ver={{VERSION}}" /> +{% endblock %} +{% block main_head %} +{{ block.super }} +<div id="pdfheader"> +Ishtar – {{APP_NAME}} – {{item}} +</div> +{% endblock %} +{%block head_sheet%}{%endblock%} +{%block main_foot%} +<div id="pdffooter"> +– <pdf:pagenumber/> – +</div> +</body> +</html> +{%endblock%} diff --git a/archaeological_finds/templates/ishtar/sheet_treatmentsource_window.html b/archaeological_finds/templates/ishtar/sheet_treatmentsource_window.html new file mode 100644 index 000000000..2af5ff708 --- /dev/null +++ b/archaeological_finds/templates/ishtar/sheet_treatmentsource_window.html @@ -0,0 +1,3 @@ +{% extends "ishtar/sheet_treatmentsource.html" %} +{% block main_head %}{%endblock%} +{% block main_foot %}{%endblock%} diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index a0a9f0a8a..ac87abc48 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -17,18 +17,187 @@ # See the file COPYING for details. +import datetime + from django.conf import settings from django.core.files.uploadedfile import SimpleUploadedFile from django.test import TestCase from ishtar_common.models import ImporterType, IshtarUser, ImporterColumn,\ FormaterType, ImportTarget -from archaeological_finds import models +from ishtar_common.models import Person +from archaeological_context_records.models import ContextRecord +from archaeological_finds import models, views +from archaeological_warehouse.models import Warehouse, WarehouseType from archaeological_context_records.tests import ImportContextRecordTest, \ ContextRecordInit from ishtar_common import forms_common +from ishtar_common.tests import WizardTest, WizardTestFormData as FormData + + +class FindInit(ContextRecordInit): + test_context_records = False + + def create_finds(self, user=None, data_base={}, data={}, force=False): + if not getattr(self, 'finds', None): + self.finds = [] + if not getattr(self, 'base_finds', None): + self.base_finds = [] + + default = {'label': "Base find"} + if not data_base.get('history_modifier'): + data_base['history_modifier'] = self.get_default_user() + if force or not data_base.get('context_record'): + data_base['context_record'] = self.get_default_context_record( + force=force) + default.update(data_base) + base_find = models.BaseFind.objects.create(**default) + self.base_finds.append(base_find) + + data["history_modifier"] = data_base["history_modifier"] + find = models.Find.objects.create(**data) + find.base_finds.add(base_find) + self.finds.append(find) + return self.finds, self.base_finds + + def get_default_find(self, force=False): + finds, base_finds = self.create_finds(force=force) + if force: + return finds[-1], base_finds[-1] + return finds[0], base_finds[0] + + def tearDown(self): + super(FindInit, self).tearDown() + if hasattr(self, 'finds'): + for f in self.finds: + try: + f.delete() + except: + pass + self.finds = [] + if hasattr(self, 'base_finds'): + for f in self.base_finds: + try: + f.delete() + except: + pass + self.base_find = [] + + +class AFindWizardCreationTest(WizardTest, FindInit, TestCase): + # TODO: first to be run because of strange init things... + fixtures = [settings.ROOT_PATH + + '../fixtures/initial_data.json', + settings.ROOT_PATH + + '../ishtar_common/fixtures/initial_data.json', + settings.ROOT_PATH + + '../archaeological_files/fixtures/initial_data.json', + settings.ROOT_PATH + + '../archaeological_operations/fixtures/initial_data-fr.json', + settings.ROOT_PATH + + '../archaeological_finds/fixtures/initial_data-fr.json', + settings.ROOT_PATH + + '../archaeological_warehouse/fixtures/initial_data-fr.json', + ] + url_name = 'find_creation' + wizard_name = 'find_wizard' + steps = views.find_creation_steps + form_datas = [ + FormData( + 'Find creation', + form_datas={ + 'selecrecord-find_creation': {'pk': 1}, + 'find-find_creation': { + 'label': 'hop', + 'checked': 'NC', + 'check_date': '2016-01-01' + }, + 'dating-find_creation': [] + }, + ) + ] + + def pre_wizard(self): + cr = self.create_context_record( + data={'parcel': self.create_parcel()[-1]}, force=True)[-1] + + self.form_datas[0].form_datas['selecrecord-find_creation']['pk'] = cr.pk + self.find_number = models.Find.objects.count() + self.basefind_number = models.BaseFind.objects.count() + super(AFindWizardCreationTest, self).pre_wizard() + + def post_wizard(self): + self.assertEqual(models.BaseFind.objects.count(), + self.basefind_number + 1) + self.assertEqual(models.Find.objects.count(), + self.find_number + 1) + + +class ATreatmentWizardCreationTest(WizardTest, FindInit, TestCase): + # TODO: first to be run because of strange init things... + fixtures = [settings.ROOT_PATH + + '../fixtures/initial_data.json', + settings.ROOT_PATH + + '../ishtar_common/fixtures/initial_data.json', + settings.ROOT_PATH + + '../archaeological_files/fixtures/initial_data.json', + settings.ROOT_PATH + + '../archaeological_operations/fixtures/initial_data-fr.json', + settings.ROOT_PATH + + '../archaeological_finds/fixtures/initial_data-fr.json', + settings.ROOT_PATH + + '../archaeological_warehouse/fixtures/initial_data-fr.json', + ] + url_name = 'treatment_creation' + wizard_name = 'treatment_wizard' + steps = views.treatment_wizard_steps + form_datas = [ + FormData( + 'Move treament', + form_datas={ + 'file-treatment_creation': {}, + 'basetreatment-treatment_creation': { + 'treatment_type': 4, # move + 'person': 1, # doer + 'location': 1, # associated warehouse + 'year': 2016, + 'target_is_basket': False + }, + 'selecfind-treatment_creation': { + 'pk': 1, + 'resulting_pk': 1 + } + }, + ignored=('resultfind-treatment_creation', + 'selecbasket-treatment_creation', + 'resultfinds-treatment_creation')) + ] + + def pre_wizard(self): + q = Warehouse.objects.filter(pk=1) + if not q.count(): + warehouse = Warehouse.objects.create( + name="default", warehouse_type=WarehouseType.objects.all()[0]) + warehouse.id = 1 + warehouse.save() + q = Person.objects.filter(pk=1) + if not q.count(): + person = Person.objects.create(name="default") + person.id = 1 + person.save() + find, base_find = self.get_default_find(force=True) + self.form_datas[0].form_datas['selecfind-treatment_creation'][ + 'pk'] = find.pk + self.form_datas[0].form_datas['selecfind-treatment_creation'][ + 'resulting_pk'] = find.pk + self.treatment_number = models.Treatment.objects.count() + super(ATreatmentWizardCreationTest, self).pre_wizard() + + def post_wizard(self): + self.assertEqual(models.Treatment.objects.count(), + self.treatment_number + 1) class ImportFindTest(ImportContextRecordTest): @@ -94,52 +263,6 @@ class ImportFindTest(ImportContextRecordTest): self.assertEqual(len(images), 1) -class FindInit(ContextRecordInit): - test_context_records = False - - def create_finds(self, user=None, data_base={}, data={}, force=False): - if not getattr(self, 'finds', None): - self.finds = [] - if not getattr(self, 'base_finds', None): - self.base_finds = [] - - default = {'label': "Base find"} - if not data_base.get('history_modifier'): - data_base['history_modifier'] = self.get_default_user() - if force or not data_base.get('context_record'): - data_base['context_record'] = self.get_default_context_record( - force=force) - default.update(data_base) - base_find = models.BaseFind.objects.create(**default) - self.base_finds.append(base_find) - - data["history_modifier"] = data_base["history_modifier"] - find = models.Find.objects.create(**data) - find.base_finds.add(base_find) - self.finds.append(find) - return self.finds, self.base_finds - - def get_default_find(self): - return self.create_finds()[0] - - def tearDown(self): - super(FindInit, self).tearDown() - if hasattr(self, 'finds'): - for f in self.finds: - try: - f.delete() - except: - pass - self.finds = [] - if hasattr(self, 'base_finds'): - for f in self.base_finds: - try: - f.delete() - except: - pass - self.base_find = [] - - class FindTest(FindInit, TestCase): fixtures = [settings.ROOT_PATH + '../fixtures/initial_data.json', @@ -201,12 +324,13 @@ class PackagingTest(FindInit, TestCase): def testPackaging(self): treatment_type = models.TreatmentType.objects.get(txt_idx='packaging') - treatment = models.Treatment(treatment_type=treatment_type) + treatment = models.Treatment() items_nb = models.Find.objects.count() treatment.save(user=self.get_default_user(), items=self.basket) self.assertEqual(items_nb + self.basket.items.count(), models.Find.objects.count(), msg="Packaging doesn't generate enough new finds") + treatment.treatment_types.add(treatment_type) # new version of the find is in the basket for item in self.basket.items.all(): self.assertNotIn( diff --git a/archaeological_finds/urls.py b/archaeological_finds/urls.py index 17cc4028f..7be07d015 100644 --- a/archaeological_finds/urls.py +++ b/archaeological_finds/urls.py @@ -17,7 +17,7 @@ # See the file COPYING for details. -from django.conf.urls.defaults import * +from django.conf.urls import * from ishtar_common.wizards import check_rights import views @@ -88,8 +88,138 @@ urlpatterns = patterns( url(r'^find_basket_deletion/$', check_rights(['change_find', 'change_own_find'])( views.DeleteFindBasketView.as_view()), name='delete_findbasket'), - url(r'treatment_creation/(?P<step>.+)?$', - views.treatment_creation_wizard, name='treatment_creation'), + + url(r'^treatment_creation/(?P<step>.+)?$', + check_rights(['change_find', 'change_own_find'])( + views.treatment_creation_wizard), name='treatment_creation'), + url(r'^treatment_modification/(?P<step>.+)?$', + check_rights(['change_find', 'change_own_find'])( + views.treatment_modification_wizard), + name='treatment_modification'), + url(r'treatment_modify/(?P<pk>.+)/$', + views.treatment_modify, name='treatment_modify'), + url(r'^treatment_search/(?P<step>.+)?$', + check_rights(['view_find', 'view_own_find'])( + views.treatment_search_wizard), name='treatment_search'), + url(r'^treatment_deletion/(?P<step>.+)?$', + check_rights(['change_find', 'change_own_find'])( + views.treatment_deletion_wizard), name='treatment_deletion'), + + url(r'^show-treatmentsource(?:/(?P<pk>.+))?/(?P<type>.+)?$', + views.show_treatmentsource, + name=models.TreatmentSource.SHOW_URL), + url(r'^get-treatmentsource/(?P<type>.+)?$', + views.get_treatmentsource, + name='get-treatmentsource'), + url(r'^treatment_source_search/(?P<step>.+)?$', + check_rights(['view_treatment', 'view_own_treatment'])( + views.treatment_source_search_wizard), + name='treatment_source_search'), + url(r'^treatment_source_creation/(?P<step>.+)?$', + check_rights(['change_treatment', 'change_own_treatment'])( + views.treatment_source_creation_wizard), + name='treatment_source_creation'), + url(r'^treatment_source_modification/(?P<step>.+)?$', + check_rights(['change_treatment', 'change_own_treatment'])( + views.treatment_source_modification_wizard), + name='treatment_source_modification'), + url(r'^treatment_source_modify/(?P<pk>.+)/$', + views.treatment_source_modify, name='treatment_source_modify'), + url(r'^treatment_source_deletion/(?P<step>.+)?$', + check_rights(['change_treatment', 'change_own_treatment'])( + views.treatment_source_deletion_wizard), + name='treatment_source_deletion'), + + url(r'^treatment_admacttreatment_search/(?P<step>.+)?$', + check_rights(['change_administrativeact'])( + views.treatment_administrativeact_search_wizard), + name='treatment_admacttreatment_search'), + url(r'^treatment_admacttreatment/(?P<step>.+)?$', + check_rights(['change_administrativeact'])( + views.treatment_administrativeact_wizard), + name='treatment_admacttreatment'), + url(r'^treatment_admacttreatment_modification/(?P<step>.+)?$', + check_rights(['change_administrativeact'])( + views.treatment_administrativeact_modification_wizard), + name='treatment_admacttreatment_modification'), + url(r'^treatment_administrativeacttreatment_modify/(?P<pk>.+)/$', + views.treatment_administrativeacttreatment_modify, + name='treatment_administrativeacttreatment_modify'), + url(r'^treatment_admacttreatment_deletion/(?P<step>.+)?$', + check_rights(['change_administrativeact'])( + views.treatment_admacttreatment_deletion_wizard), + name='treatment_admacttreatment_deletion'), + url(r'^get-administrativeacttreatment/(?P<type>.+)?$', + views.get_administrativeacttreatment, + name='get-administrativeacttreatment'), + + url(r'^treatmentfle_admacttreatmentfle_search/(?P<step>.+)?$', + check_rights(['change_administrativeact'])( + views.treatmentfile_admacttreatmentfile_search_wizard), + name='treatmentfle_admacttreatmentfle_search'), + url(r'^treatmentfle_admacttreatmentfle_modification/(?P<step>.+)?$', + check_rights(['change_administrativeact'])( + views.treatmentfile_admacttreatmentfile_modification_wizard), + name='treatmentfle_admacttreatmentfle_modification'), + url(r'^treatmentfle_admacttreatmentfle/(?P<step>.+)?$', + check_rights(['change_administrativeact'])( + views.treatmentfile_admacttreatmentfile_wizard), + name='treatmentfle_admacttreatmentfle'), + url(r'^treatmentfile_administrativeacttreatmentfile_modify/(?P<pk>.+)/$', + views.treatmentfile_administrativeacttreatmentfile_modify, + name='treatmentfile_administrativeacttreatmentfile_modify'), + url(r'^treatmentfle_admacttreatmentfle_deletion/(?P<step>.+)?$', + check_rights(['change_administrativeact'])( + views.treatmentfile_admacttreatmentfile_deletion_wizard), + name='treatmentfle_admacttreatmentfle_deletion'), + + url(r'^show-treatmentfilesource(?:/(?P<pk>.+))?/(?P<type>.+)?$', + views.show_treatmentfilesource, + name=models.TreatmentFileSource.SHOW_URL), + url(r'^get-treatmentfilesource/(?P<type>.+)?$', + views.get_treatmentfilesource, + name='get-treatmentfilesource'), + url(r'^treatmentfile_source_search/(?P<step>.+)?$', + check_rights(['view_treatmentfile', 'view_own_treatmentfile'])( + views.treatmentfile_source_search_wizard), + name='treatmentfile_source_search'), + url(r'^treatmentfile_source_creation/(?P<step>.+)?$', + check_rights(['change_treatmentfile', 'change_own_treatmentfile'])( + views.treatmentfile_source_creation_wizard), + name='treatmentfile_source_creation'), + url(r'^treatmentfile_source_modification/(?P<step>.+)?$', + check_rights(['change_treatmentfile', 'change_own_treatmentfile'])( + views.treatmentfile_source_modification_wizard), + name='treatmentfile_source_modification'), + url(r'^treatmentfile_source_modify/(?P<pk>.+)/$', + views.treatmentfile_source_modify, name='treatmentfile_source_modify'), + url(r'^treatmentfile_source_deletion/(?P<step>.+)?$', + check_rights(['change_treatmentfile', 'change_own_treatmentfile'])( + views.treatmentfile_source_deletion_wizard), + name='treatmentfile_source_deletion'), + + + url(r'^treatmentfle_search/(?P<step>.+)?$', + check_rights(['change_find', 'change_own_find'])( + views.treatmentfile_search_wizard), + name='treatmentfile_search'), + url(r'treatmentfle_creation/(?P<step>.+)?$', + check_rights(['change_find', 'change_own_find'])( + views.treatmentfile_creation_wizard), + name='treatmentfile_creation'), + url(r'treatmentfle_modification/(?P<step>.+)?$', + check_rights(['change_find', 'change_own_find'])( + views.treatmentfile_modification_wizard), + name='treatmentfile_modification'), + url(r'^treatmentfile_modify/(?P<pk>.+)/$', + views.treatmentfile_modify, name='treatmentfile_modify'), + url(r'^treatmentfle_deletion/(?P<step>.+)?$', + check_rights(['change_find', 'change_own_find'])( + views.treatmentfile_deletion_wizard), + name='treatmentfile_deletion'), + url(r'get-administrativeacttreatmentfile/(?P<type>.+)?$', + views.get_administrativeacttreatmentfile, + name='get-administrativeacttreatmentfile'), url(r'get-upstreamtreatment/(?P<type>.+)?$', views.get_upstreamtreatment, name='get-upstreamtreatment'), url(r'get-downstreamtreatment/(?P<type>.+)?$', @@ -107,6 +237,8 @@ urlpatterns += patterns( name='autocomplete-preservationtype'), url(r'autocomplete-integritytype/$', 'autocomplete_integritytype', name='autocomplete-integritytype'), + url(r'autocomplete-treatmentfile/$', 'autocomplete_treatmentfile', + name='autocomplete-treatmentfile'), url(r'get-find/own/(?P<type>.+)?$', 'get_find', name='get-own-find', kwargs={'force_own': True}), url(r'get-find/(?P<type>.+)?$', 'get_find', @@ -115,6 +247,10 @@ urlpatterns += patterns( name='get-own-find-for-ope', kwargs={'force_own': True}), url(r'get-find-for-ope/(?P<type>.+)?$', 'get_find_for_ope', name='get-find-for-ope'), + url(r'get-find-for-treatment/own/(?P<type>.+)?$', 'get_find_for_treatment', + name='get-own-find-for-treatment', kwargs={'force_own': True}), + url(r'get-find-for-treatment/(?P<type>.+)?$', 'get_find_for_treatment', + name='get-find-for-treatment'), url(r'get-find-full/own/(?P<type>.+)?$', 'get_find', name='get-own-find-full', kwargs={'full': True, 'force_own': True}), url(r'get-find-full/(?P<type>.+)?$', 'get_find', @@ -127,14 +263,44 @@ urlpatterns += patterns( url(r'get-findsource-full/(?P<type>.+)?$', 'get_findsource', name='get-findsource-full', kwargs={'full': True}), - url(r'show-findsource(?:/(?P<pk>.+))?/(?P<type>.+)?$', 'show_findsource', + url(r'^show-findsource(?:/(?P<pk>.+))?/(?P<type>.+)?$', 'show_findsource', name=models.FindSource.SHOW_URL), - url(r'show-find/basket-(?P<pk>.+)/(?P<type>.+)?$', 'show_findbasket', + url(r'^show-find/basket-(?P<pk>.+)/(?P<type>.+)?$', 'show_findbasket', name='show-findbasket'), - url(r'show-find(?:/(?P<pk>.+))?/(?P<type>.+)?$', 'show_find', + url(r'^show-find(?:/(?P<pk>.+))?/(?P<type>.+)?$', 'show_find', name=models.Find.SHOW_URL), - url(r'show-historized-find/(?P<pk>.+)?/(?P<date>.+)?$', + url(r'^show-historized-find/(?P<pk>.+)?/(?P<date>.+)?$', 'show_find', name='show-historized-find'), - url(r'revert-find/(?P<pk>.+)/(?P<date>.+)$', + url(r'^revert-find/(?P<pk>.+)/(?P<date>.+)$', 'revert_find', name='revert-find'), + url(r'^get-treatment/(?P<type>.+)?$', + 'get_treatment', name='get-treatment'), + url(r'get-treatment-shortcut/(?P<type>.+)?$', + 'get_treatment', name='get-treatment-shortcut', + kwargs={'full': 'shortcut'}), + url(r'^show-treatment(?:/(?P<pk>.+))?/(?P<type>.+)?$', 'show_treatment', + name=models.Treatment.SHOW_URL), + url(r'get-treatmentfile/(?P<type>.+)?$', + 'get_treatmentfile', name='get-treatmentfile'), + url(r'get-treatmentfile-shortcut/(?P<type>.+)?$', + 'get_treatmentfile', name='get-treatmentfile-shortcut', + kwargs={'full': 'shortcut'}), + url(r'^show-treatmentfile(?:/(?P<pk>.+))?/(?P<type>.+)?$', + 'show_treatmentfile', + name=models.TreatmentFile.SHOW_URL), + # url(r'show-treatmentfile(?:/(?P<pk>.+))?/(?P<type>.+)?$', + # 'show_treatmentfile', + # name=models.TreatmentFile.SHOW_URL), +) + +urlpatterns += patterns( + 'archaeological_operations.views', + url(r'^treatment_administrativeact_document/$', + 'administrativeactfile_document', + name='treatment-administrativeact-document', + kwargs={'treatment': True}), + url(r'^treatmentfle_administrativeact_document/$', + 'administrativeactfile_document', + name='treatmentfle-administrativeact-document', + kwargs={'treatment_file': True}), ) diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py index 89babe9b7..01e88c1b7 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -17,24 +17,32 @@ # See the file COPYING for details. +import json + from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse -from django.http import HttpResponseRedirect +from django.db.models import Q +from django.http import HttpResponseRedirect, HttpResponse from django.shortcuts import redirect from django.utils.translation import ugettext_lazy as _ from django.views.generic import TemplateView from django.views.generic.edit import CreateView, FormView +from ishtar_common.models import IshtarUser +from archaeological_operations.models import AdministrativeAct + from ishtar_common.forms import FinalForm from ishtar_common.forms_common import SourceForm, AuthorFormset, \ SourceDeletionForm -from ishtar_common.models import IshtarUser +from archaeological_operations.forms import FinalAdministrativeActDeleteForm from archaeological_context_records.forms \ import RecordFormSelection as RecordFormSelectionTable from ishtar_common.views import get_item, show_item, revert_item, \ get_autocomplete_generic, IshtarMixin, LoginRequiredMixin + from ishtar_common.wizards import SearchWizard +from archaeological_operations.wizards import AdministrativeActDeletionWizard from wizards import * from forms import * @@ -45,6 +53,57 @@ get_find = get_item(models.Find, 'get_find', 'find') get_find_for_ope = get_item(models.Find, 'get_find', 'find', own_table_cols=models.Find.TABLE_COLS_FOR_OPE) +get_find_for_treatment = get_item( + models.Find, 'get_find', 'find', + own_table_cols=models.Find.TABLE_COLS_FOR_OPE, base_request={}) + +show_treatment = show_item(models.Treatment, 'treatment') +get_treatment = get_item(models.Treatment, 'get_treatment', 'treatment') + +get_administrativeacttreatment = get_item( + AdministrativeAct, 'get_administrativeacttreatment', + 'administrativeacttreatment', + base_request={"treatment__pk__isnull": False}) + +show_treatmentfile = show_item(models.TreatmentFile, 'treatmentfile') +get_treatmentfile = get_item(models.TreatmentFile, 'get_treatmentfile', + 'treatmentfile') + +get_administrativeacttreatmentfile = get_item( + AdministrativeAct, 'get_administrativeacttreatmentfile', + 'administrativeacttreatmentfile', + base_request={"treatment_file__pk__isnull": False}) + + +def autocomplete_treatmentfile(request): + if not request.user.has_perm('ishtar_common.view_treatment', + models.Treatment) and \ + not request.user.has_perm('ishtar_common.view_own_treatment', + models.Treatment) \ + and not request.user.ishtaruser.has_right('treatmentfile_search', + session=request.session): + return HttpResponse(mimetype='text/plain') + if not request.GET.get('term'): + return HttpResponse(mimetype='text/plain') + q = request.GET.get('term') + query = Q() + for q1 in q.split(' '): + for q in q1.split(' '): + extra = Q(internal_reference__icontains=q) | \ + Q(external_id__icontains=q) | \ + Q(name__icontains=q) + try: + int(q) + extra = extra | Q(year=q) | Q(index=q) + except ValueError: + pass + query = query & extra + limit = 20 + files = models.TreatmentFile.objects.filter(query)[:limit] + data = json.dumps([{'id': file.pk, 'value': unicode(file)} + for file in files]) + return HttpResponse(data, mimetype='text/plain') + show_findsource = show_item(models.FindSource, 'findsource') get_findsource = get_item(models.FindSource, 'get_findsource', 'findsource') @@ -53,11 +112,15 @@ revert_find = revert_item(models.Find) show_findbasket = show_item(models.FindBasket, 'findbasket') -find_creation_wizard = FindWizard.as_view([ +find_creation_steps = [ ('selecrecord-find_creation', RecordFormSelectionTable), ('find-find_creation', FindForm), ('dating-find_creation', DatingFormSet), - ('final-find_creation', FinalForm)], + ('final-find_creation', FinalForm) +] + +find_creation_wizard = FindWizard.as_view( + find_creation_steps, label=_(u"New find"), url_name='find_creation',) @@ -282,28 +345,219 @@ get_downstreamtreatment = get_item( models.FindDownstreamTreatments, 'get_downstreamtreatment', 'downtreatment') -treatment_creation_wizard = TreatmentWizard.as_view([ +treatment_wizard_steps = [ + ('file-treatment_creation', TreatmentFormFileChoice), ('basetreatment-treatment_creation', BaseTreatmentForm), ('selecfind-treatment_creation', UpstreamFindFormSelection), - ('resultfind-treatment_creation', ResultFindForm), - ('resultfinds-treatment_creation', ResultFindFormSet), - ('final-treatment_creation', FinalForm)], + ('selecbasket-treatment_creation', SelectFindBasketForm), + # ('resultfind-treatment_creation', ResultFindForm), + # ('resultfinds-treatment_creation', ResultFindFormSet), + ('final-treatment_creation', FinalForm)] + +treatment_search_wizard = SearchWizard.as_view([ + ('general-treatment_search', TreatmentFormSelection)], + label=_(u"Treatment search"), + url_name='treatment_search',) + +treatment_creation_wizard = TreatmentWizard.as_view( + treatment_wizard_steps, condition_dict={ - 'selecfind-treatment_creation': - check_not_exist('basetreatment-treatment_creation', - 'basket'), - 'resultfinds-treatment_creation': - check_type_field('basetreatment-treatment_creation', - 'treatment_type', models.TreatmentType, - 'downstream_is_many'), - 'resultfind-treatment_creation': - check_type_field('basetreatment-treatment_creation', - 'treatment_type', models.TreatmentType, - 'upstream_is_many')}, + 'selecfind-treatment_creation': + check_value('basetreatment-treatment_creation', + 'target_is_basket', False), + 'selecbasket-treatment_creation': + check_value('basetreatment-treatment_creation', + 'target_is_basket', True), + # 'resultfinds-treatment_creation': + # check_type_field('basetreatment-treatment_creation', + # 'treatment_type', models.TreatmentType, + # 'downstream_is_many'), + # 'resultfind-treatment_creation': + # check_type_field('basetreatment-treatment_creation', + # 'treatment_type', models.TreatmentType, + # 'upstream_is_many') + }, label=_(u"New treatment"), url_name='treatment_creation',) -""" +treatment_modification_wizard = TreatmentModificationWizard.as_view( + [('selec-treatment_modification', TreatmentFormSelection), + ('file-treatment_modification', TreatmentFormFileChoice), + ('basetreatment-treatment_modification', TreatmentModifyForm), + ('final-treatment_modification', FinalForm)], + label=_(u"Modify"), + url_name='treatment_modification', +) + + +def treatment_modify(request, pk): + treatment_modification_wizard(request) + TreatmentModificationWizard.session_set_value( + request, 'selec-treatment_modification', 'pk', pk, reset=True) + return redirect(reverse( + 'treatment_modification', + kwargs={'step': 'basetreatment-treatment_modification'})) + + +treatment_deletion_wizard = TreatmentDeletionWizard.as_view([ + ('selec-treatment_deletion', TreatmentFormSelection), + ('final-treatment_deletion', TreatmentDeletionForm)], + label=_(u"Treatment deletion"), + url_name='treatment_deletion',) + +treatment_administrativeact_search_wizard = \ + SearchWizard.as_view([ + ('selec-treatment_admacttreatment_search', + AdministrativeActTreatmentFormSelection)], + label=_(u"Treatment: search administrative act"), + url_name='treatment_admacttreatment_search',) + +treatment_administrativeact_wizard = \ + TreatmentAdministrativeActWizard.as_view([ + ('selec-treatment_admacttreatment', TreatmentFormSelection), + ('administrativeact-treatment_admacttreatment', + AdministrativeActTreatmentForm), + ('final-treatment_admacttreatment', FinalForm)], + label=_(u"Treatment: new administrative act"), + url_name='treatment_admacttreatment',) + +treatment_administrativeact_modification_wizard = \ + TreatmentEditAdministrativeActWizard.as_view([ + ('selec-treatment_admacttreatment_modification', + AdministrativeActTreatmentFormSelection), + ('administrativeact-treatment_admacttreatment_modification', + AdministrativeActTreatmentModifForm), + ('final-treatment_admacttreatment_modification', FinalForm)], + label=_(u"Treatment: administrative act modification"), + url_name='treatment_admacttreatment_modification',) + +treatment_admacttreatment_deletion_wizard = \ + AdministrativeActDeletionWizard.as_view([ + ('selec-treatment_admacttreatment_deletion', + AdministrativeActTreatmentFormSelection), + ('final-treatment_admacttreatment_deletion', + FinalAdministrativeActDeleteForm)], + label=_(u"Treatment: administrative act deletion"), + url_name='treatment_admacttreatment_deletion',) + + +def treatment_administrativeacttreatment_modify(request, pk): + treatment_administrativeact_modification_wizard(request) + TreatmentEditAdministrativeActWizard.session_set_value( + request, + 'selec-treatment_admacttreatment_modification', + 'pk', pk, reset=True) + return redirect( + reverse( + 'treatment_admacttreatment_modification', + kwargs={ + 'step': + 'administrativeact-treatment_admacttreatment_modification' + })) + + +# treatment request + +treatmentfile_search_wizard = SearchWizard.as_view([ + ('general-treatmentfile_search', TreatmentFileFormSelection)], + label=_(u"Treatment request search"), + url_name='treatmentfile_search',) + +treatmentfile_wizard_steps = [ + ('treatmentfile-treatmentfile_creation', TreatmentFileForm), + ('final-treatmentfile_creation', FinalForm)] + + +treatmentfile_creation_wizard = TreatmentFileWizard.as_view( + treatmentfile_wizard_steps, + label=_(u"New treatment request"), + url_name='treatmentfile_creation',) + +treatmentfile_modification_wizard = TreatmentFileModificationWizard.as_view( + [('selec-treatmentfile_modification', TreatmentFileFormSelection), + ('treatmentfile-treatmentfile_modification', TreatmentFileModifyForm), + ('final-treatmentfile_modification', FinalForm)], + label=_(u"Modify"), + url_name='treatmentfile_modification', +) + + +def treatmentfile_modify(request, pk): + treatmentfile_modification_wizard(request) + TreatmentFileModificationWizard.session_set_value( + request, 'selec-treatmentfile_modification', 'pk', pk, reset=True) + return redirect(reverse( + 'treatmentfile_modification', + kwargs={'step': 'treatmentfile-treatmentfile_modification'})) + +treatmentfile_deletion_wizard = TreatmentFileDeletionWizard.as_view([ + ('selec-treatmentfile_deletion', TreatmentFileFormSelection), + ('final-treatmentfile_deletion', TreatmentFileDeletionForm)], + label=_(u"Treatment request deletion"), + url_name='treatmentfile_deletion',) + +treatmentfile_admacttreatmentfile_search_wizard = \ + SearchWizard.as_view([ + ('selec-treatmentfle_admacttreatmentfle_search', + AdministrativeActTreatmentFileFormSelection)], + label=_(u"Treatment request: search administrative act"), + url_name='treatmentfle_admacttreatmentfle_search',) + + +treatmentfile_admacttreatmentfile_wizard = \ + TreatmentFileAdministrativeActWizard.as_view([ + ('selec-treatmentfle_admacttreatmentfle', TreatmentFileFormSelection), + ('admact-treatmentfle_admacttreatmentfle', + AdministrativeActTreatmentFileForm), + ('final-treatmentfle_admacttreatmentfle', FinalForm)], + label=_(u"Treatment request: new administrative act"), + url_name='treatmentfle_admacttreatmentfle',) + +treatmentfile_admacttreatmentfile_modification_wizard = \ + TreatmentFileEditAdministrativeActWizard.as_view([ + ('selec-treatmentfle_admacttreatmentfle_modification', + AdministrativeActTreatmentFileFormSelection), + ('admact-treatmentfle_admacttreatmentfle_modification', + AdministrativeActTreatmentFileModifForm), + ('final-treatmentfle_admacttreatmentfle_modification', FinalForm)], + label=_(u"Treatment request: administrative act modification"), + url_name='treatmentfle_admacttreatmentfle_modification',) + +treatmentfile_admacttreatmentfile_deletion_wizard = \ + AdministrativeActDeletionWizard.as_view([ + ('selec-treatmentfle_admacttreatmentfle_deletion', + AdministrativeActTreatmentFileFormSelection), + ('final-treatmentfle_admacttreatmentfle_deletion', + FinalAdministrativeActDeleteForm)], + label=_(u"Treatment request: administrative act deletion"), + url_name='treatmentfle_admacttreatmentfle_deletion',) + + +def treatmentfile_administrativeacttreatmentfile_modify(request, pk): + treatmentfile_admacttreatmentfile_modification_wizard(request) + TreatmentFileEditAdministrativeActWizard.session_set_value( + request, + 'selec-treatmentfle_admacttreatmentfle_modification', + 'pk', pk, reset=True) + return redirect( + reverse( + 'treatmentfle_admacttreatmentfle_modification', + kwargs={ + 'step': + 'admact-treatmentfle_admacttreatmentfle_modification' + })) + +# sources + +show_treatmentsource = show_item(models.TreatmentSource, 'treatmentsource') +get_treatmentsource = get_item(models.TreatmentSource, 'get_treatmentsource', + 'treatmentsource') + +treatment_source_search_wizard = SearchWizard.as_view([ + ('selec-treatment_source_search', TreatmentSourceFormSelection)], + label=_(u"Treatment: source search"), + url_name='treatment_source_search',) + treatment_source_creation_wizard = TreatmentSourceWizard.as_view([ ('selec-treatment_source_creation', SourceTreatmentFormSelection), ('source-treatment_source_creation', SourceForm), @@ -311,4 +565,72 @@ treatment_source_creation_wizard = TreatmentSourceWizard.as_view([ ('final-treatment_source_creation', FinalForm)], url_name='treatment_source_creation',) -""" +treatment_source_modification_wizard = TreatmentSourceWizard.as_view([ + ('selec-treatment_source_modification', TreatmentSourceFormSelection), + ('source-treatment_source_modification', SourceForm), + ('authors-treatment_source_modification', AuthorFormset), + ('final-treatment_source_modification', FinalForm)], + label=_(u"Treatment: source modification"), + url_name='treatment_source_modification',) + + +def treatment_source_modify(request, pk): + treatment_source_modification_wizard(request) + TreatmentSourceWizard.session_set_value( + request, 'selec-treatment_source_modification', 'pk', pk, reset=True) + return redirect(reverse( + 'treatment_source_modification', + kwargs={'step': 'source-treatment_source_modification'})) + +treatment_source_deletion_wizard = TreatmentSourceDeletionWizard.as_view([ + ('selec-treatment_source_deletion', TreatmentSourceFormSelection), + ('final-treatment_source_deletion', SourceDeletionForm)], + label=_(u"Treatment: source deletion"), + url_name='treatment_source_deletion',) + +# treatment request sources + +show_treatmentfilesource = show_item(models.TreatmentFileSource, + 'treatmentfilesource') +get_treatmentfilesource = get_item( + models.TreatmentFileSource, 'get_treatmentfilesource', + 'treatmentfilesource') + +treatmentfile_source_search_wizard = SearchWizard.as_view([ + ('selec-treatmentfile_source_search', TreatmentFileSourceFormSelection)], + label=_(u"Treatment request: source search"), + url_name='treatmentfile_source_search',) + +treatmentfile_source_creation_wizard = TreatmentFileSourceWizard.as_view([ + ('selec-treatmentfile_source_creation', SourceTreatmentFileFormSelection), + ('source-treatmentfile_source_creation', SourceForm), + ('authors-treatmentfile_source_creation', AuthorFormset), + ('final-treatmentfile_source_creation', FinalForm)], + url_name='treatmentfile_source_creation',) + +treatmentfile_source_modification_wizard = TreatmentFileSourceWizard.as_view([ + ('selec-treatmentfile_source_modification', + TreatmentFileSourceFormSelection), + ('source-treatmentfile_source_modification', SourceForm), + ('authors-treatmentfile_source_modification', AuthorFormset), + ('final-treatmentfile_source_modification', FinalForm)], + label=_(u"Treatment request: source modification"), + url_name='treatmentfile_source_modification',) + + +def treatmentfile_source_modify(request, pk): + treatmentfile_source_modification_wizard(request) + TreatmentFileSourceWizard.session_set_value( + request, 'selec-treatmentfile_source_modification', 'pk', pk, + reset=True) + return redirect(reverse( + 'treatmentfile_source_modification', + kwargs={'step': 'source-treatmentfile_source_modification'})) + +treatmentfile_source_deletion_wizard = \ + TreatmentFileSourceDeletionWizard.as_view([ + ('selec-treatmentfile_source_deletion', + TreatmentFileSourceFormSelection), + ('final-treatmentfile_source_deletion', SourceDeletionForm)], + label=_(u"Treatment request: source deletion"), + url_name='treatmentfile_source_deletion',) diff --git a/archaeological_finds/wizards.py b/archaeological_finds/wizards.py index f897969c4..dab4a76d4 100644 --- a/archaeological_finds/wizards.py +++ b/archaeological_finds/wizards.py @@ -17,11 +17,15 @@ # See the file COPYING for details. -from django.core.exceptions import ObjectDoesNotExist +from django.core.exceptions import ObjectDoesNotExist, PermissionDenied from django.utils.translation import ugettext_lazy as _ from ishtar_common.forms import reverse_lazy from ishtar_common.wizards import Wizard, DeletionWizard, SourceWizard +from archaeological_operations.wizards import OperationAdministrativeActWizard + +from archaeological_operations.models import AdministrativeAct +from archaeological_context_records.models import ContextRecord import models @@ -37,7 +41,7 @@ class FindWizard(Wizard): main_form_key = 'selecrecord-' + self.url_name try: idx = int(self.session_get_value(main_form_key, 'pk')) - current_cr = models.ContextRecord.objects.get(pk=idx) + current_cr = ContextRecord.objects.get(pk=idx) return current_cr except(TypeError, ValueError, ObjectDoesNotExist): pass @@ -63,7 +67,7 @@ class FindWizard(Wizard): def get_extra_model(self, dct, form_list): dct = super(FindWizard, self).get_extra_model(dct, form_list) dct['order'] = 1 - if 'pk' in dct and type(dct['pk']) == models.ContextRecord: + if 'pk' in dct and type(dct['pk']) == ContextRecord: dct['base_finds__context_record'] = dct.pop('pk') return dct @@ -84,15 +88,125 @@ class FindDeletionWizard(DeletionWizard): class TreatmentWizard(Wizard): model = models.Treatment + wizard_done_window = reverse_lazy('show-treatment') basket_step = 'basetreatment-treatment_creation' + saved_args = {"items": []} - def get_form_kwargs(self, step): - kwargs = super(TreatmentWizard, self).get_form_kwargs(step) + def get_form_kwargs(self, step, **kwargs): + kwargs = super(TreatmentWizard, self).get_form_kwargs(step, **kwargs) if self.basket_step not in step: return kwargs kwargs['user'] = self.request.user return kwargs + def get_extra_model(self, dct, form_list): + """ + Remove basket ID to the result dict + """ + dct = super(TreatmentWizard, self).get_extra_model(dct, form_list) + if 'resulting_pk' in dct: + try: + find = models.Find.objects.get(pk=dct.pop('resulting_pk')) + if 'own' in self.current_right \ + and not find.is_own(dct['history_modifier']): + raise PermissionDenied + dct['items'] = [find] + except models.Find.DoesNotExist: + raise PermissionDenied + if 'basket' in dct: + basket = dct.pop('basket') + if basket.user.pk != dct['history_modifier'].pk: + raise PermissionDenied + dct['items'] = list(basket.items.all()) + return dct + + +class TreatmentModificationWizard(TreatmentWizard): + modification = True + + +class TreatmentDeletionWizard(DeletionWizard): + model = models.Treatment + fields = ['label', 'other_reference', 'year', 'index', + 'treatment_types', 'location', 'person', 'organization', + 'external_id', 'comment', 'description', + 'goal', 'start_date', 'end_date', 'container'] + + +class TreatmentAdministrativeActWizard(OperationAdministrativeActWizard): + model = models.Treatment + current_obj_slug = 'administrativeacttreatment' + ref_object_key = 'treatment' + + def get_reminder(self): + return + + +class TreatmentEditAdministrativeActWizard(TreatmentAdministrativeActWizard): + model = AdministrativeAct + edit = True + + def get_associated_item(self, dct): + return self.get_current_object().treatment + + +class TreatmentFileWizard(Wizard): + model = models.TreatmentFile + wizard_done_window = reverse_lazy('show-treatmentfile') + + +class TreatmentFileModificationWizard(TreatmentFileWizard): + modification = True + + +class TreatmentFileDeletionWizard(DeletionWizard): + model = models.TreatmentFile + fields = ['name', 'internal_reference', 'external_id', 'year', + 'index', 'type', 'in_charge', 'reception_date', + 'creation_date', 'end_date', 'comment'] + + +class TreatmentFileAdministrativeActWizard( + OperationAdministrativeActWizard): + model = models.TreatmentFile + current_obj_slug = 'administrativeacttreatmentfile' + ref_object_key = 'treatment_file' + + def get_reminder(self): + form_key = 'selec-' + self.url_name + if self.url_name.endswith('_administrativeactop'): + # modification and deletion are suffixed with '_modification' + # and '_deletion' so it is creation + pk = self.session_get_value(form_key, "pk") + try: + return ( + (_(u"Treatment request"), + unicode(models.TreatmentFile.objects.get(pk=pk))), + ) + except models.TreatmentFile.DoesNotExist: + return + else: + admin_id = self.session_get_value(form_key, "pk") + try: + admin = AdministrativeAct.objects.get(pk=admin_id) + if not admin.operation: + return + return ( + (_(u"Operation"), unicode(admin.operation)), + ) + except AdministrativeAct.DoesNotExist: + return + return + + +class TreatmentFileEditAdministrativeActWizard( + TreatmentFileAdministrativeActWizard): + model = AdministrativeAct + edit = True + + def get_associated_item(self, dct): + return self.get_current_object().treatment_file + class FindSourceWizard(SourceWizard): wizard_done_window = reverse_lazy('show-findsource') @@ -106,3 +220,17 @@ class FindSourceDeletionWizard(DeletionWizard): class TreatmentSourceWizard(SourceWizard): model = models.TreatmentSource + + +class TreatmentSourceDeletionWizard(DeletionWizard): + model = models.TreatmentSource + fields = ['treatment', 'title', 'source_type', 'authors'] + + +class TreatmentFileSourceWizard(SourceWizard): + model = models.TreatmentFileSource + + +class TreatmentFileSourceDeletionWizard(DeletionWizard): + model = models.TreatmentFileSource + fields = ['treatment_file', 'title', 'source_type', 'authors'] diff --git a/archaeological_operations/admin.py b/archaeological_operations/admin.py index 47ab8419b..b97df85eb 100644 --- a/archaeological_operations/admin.py +++ b/archaeological_operations/admin.py @@ -100,7 +100,15 @@ class RelationTypeAdmin(admin.ModelAdmin): admin.site.register(models.RelationType, RelationTypeAdmin) -general_models = [models.RemainType, models.ActType, models.ReportState] + +class ActTypeAdmin(GeneralTypeAdmin): + list_filter = ('intented_to',) + list_display = ['label', 'txt_idx', 'available', 'intented_to'] + + +admin.site.register(models.ActType, ActTypeAdmin) + +general_models = [models.RemainType, models.ReportState] for model in general_models: admin.site.register(model, GeneralTypeAdmin) diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index 37c35f4be..f9f1095be 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -33,8 +33,8 @@ from django.forms.formsets import formset_factory, DELETION_FIELD_NAME, \ from django.utils.translation import ugettext_lazy as _, pgettext_lazy from django.utils.safestring import mark_safe -from ishtar_common.models import valid_id, PersonType, Person, Town, \ - DocumentTemplate, Organization, OrganizationType, get_current_profile, \ +from ishtar_common.models import valid_id, Person, Town, \ + DocumentTemplate, Organization, get_current_profile, \ person_type_pks_lazy, person_type_pk_lazy, organization_type_pks_lazy, \ organization_type_pk_lazy @@ -515,7 +515,7 @@ class OperationSelect(TableSelect): choices=[]) virtual_operation = forms.NullBooleanField(label=_(u"Virtual operation")) archaeological_sites = forms.IntegerField( - label=_("Archaelogical site"), + label=_("Archaeological site"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-archaeologicalsite'), associated_model=models.ArchaeologicalSite), @@ -637,7 +637,7 @@ class OperationFormFileChoice(forms.Form): associated_models = {'associated_file': File, } currents = {'associated_file': File} associated_file = forms.IntegerField( - label=_(u"Archaelogical file"), + label=_(u"Archaeological file"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-file'), associated_model=File), validators=[valid_id(File)], required=False) @@ -916,7 +916,7 @@ class OperationFormGeneral(ManageOldType, forms.Form): msg = '' if year and max_val: msg = _( - u"Operation code already exist for year: %(year)d - use a " + u"Operation code already exists for year: %(year)d - use a " u"value bigger than %(last_val)d") % { 'year': year, 'last_val': max_val} else: @@ -930,7 +930,7 @@ class OperationFormModifGeneral(OperationFormGeneral): required=False) currents = {'associated_file': File} associated_file = forms.IntegerField( - label=_(u"Archaelogical file"), + label=_(u"Archaeological file"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-file'), associated_model=File), @@ -1143,7 +1143,7 @@ class ArchaeologicalSiteBasicForm(forms.Form): base_model = 'archaeological_site' associated_models = {'archaeological_site': models.ArchaeologicalSite} archaeological_site = forms.IntegerField( - label=_("Archaelogical site"), + label=_("Archaeological site"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-archaeologicalsite'), associated_model=models.ArchaeologicalSite, @@ -1158,7 +1158,7 @@ ArchaeologicalSiteFormSet.form_label = _("Archaeological sites") class ArchaeologicalSiteSelectionForm(forms.Form): - form_label = _("Associated archaelogical sites") + form_label = _("Associated archaeological sites") archaeological_sites = forms.IntegerField( widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-archaeologicalsite'), @@ -1377,7 +1377,7 @@ class AdministrativeActModifForm(object): msg = '' if year and max_val: msg = _( - u"This index already exist for year: %(year)d - use a " + u"This index already exists for year: %(year)d - use a " u"value bigger than %(last_val)d") % { 'year': year, 'last_val': max_val} else: @@ -1403,8 +1403,8 @@ class DocumentGenerationAdminActForm(forms.Form): def __init__(self, *args, **kwargs): self.document_type = 'O' - if 'operation' in kwargs: - self.document_type = 'O' if kwargs.pop('operation') else 'F' + if 'document_type' in kwargs: + self.document_type = kwargs.pop('document_type') self.obj = None if 'obj' in kwargs: self.obj = kwargs.pop('obj') diff --git a/archaeological_operations/import_from_csv.py b/archaeological_operations/import_from_csv.py index 45faae632..999ada690 100644 --- a/archaeological_operations/import_from_csv.py +++ b/archaeological_operations/import_from_csv.py @@ -18,7 +18,7 @@ # See the file COPYING for details. """ -Utils: import archaelogical operation from a CSV file +Utils: import archaeological operation from a CSV file """ DELIMITER = ";" diff --git a/archaeological_operations/import_from_dbf.py b/archaeological_operations/import_from_dbf.py index 3ce41fdfc..fa452d605 100644 --- a/archaeological_operations/import_from_dbf.py +++ b/archaeological_operations/import_from_dbf.py @@ -18,7 +18,7 @@ # See the file COPYING for details. """ -Utils: import archaelogical operation from a DBF file +Utils: import archaeological operation from a DBF file """ from __future__ import unicode_literals diff --git a/archaeological_operations/ishtar_menu.py b/archaeological_operations/ishtar_menu.py index a0852147a..5f937f01c 100644 --- a/archaeological_operations/ishtar_menu.py +++ b/archaeological_operations/ishtar_menu.py @@ -66,7 +66,7 @@ MENU_SECTIONS = [ 'change_administrativeact']), MenuItem( 'operation_administrativeactop', - _(u"Add"), + _(u"Creation"), model=models.AdministrativeAct, access_controls=['change_administrativeact']), MenuItem( @@ -94,7 +94,7 @@ MENU_SECTIONS = [ access_controls=['view_operation', 'view_own_operation']), MenuItem('operation_source_creation', - _(u"Add"), + _(u"Creation"), model=models.OperationSource, access_controls=['change_operation', 'change_own_operation']), diff --git a/archaeological_operations/locale/django.pot b/archaeological_operations/locale/django.pot index 0e55c760b..5db1dc5d5 100644 --- a/archaeological_operations/locale/django.pot +++ b/archaeological_operations/locale/django.pot @@ -5,16 +5,17 @@ # Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata # Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata # Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata +# Valérie-Emma Leroux <emma@iggdrasil.net>, 2017. #zanata msgid "" msgstr "" -#: forms.py:67 forms.py:369 forms.py:1004 forms.py:1026 forms.py:1030 -#: models.py:1168 templates/ishtar/sheet_operation.html:144 +#: forms.py:69 forms.py:371 forms.py:1009 forms.py:1031 forms.py:1035 +#: models.py:1213 templates/ishtar/sheet_operation.html:144 #: templates/ishtar/blocks/window_tables/parcels.html:10 msgid "Parcels" msgstr "" -#: forms.py:70 forms.py:203 forms.py:980 models.py:1154 +#: forms.py:72 forms.py:205 forms.py:985 models.py:1199 #: templates/ishtar/blocks/window_tables/parcels.html:7 #: templates/ishtar/dashboards/dashboard_operation.html:432 #: templates/ishtar/dashboards/dashboard_operation.html:446 @@ -23,96 +24,96 @@ msgstr "" msgid "Town" msgstr "" -#: forms.py:72 forms.py:459 forms.py:755 forms.py:1250 models.py:249 -#: models.py:971 models.py:1152 +#: forms.py:74 forms.py:455 forms.py:752 forms.py:1255 models.py:271 +#: models.py:1005 models.py:1197 #: templates/ishtar/blocks/window_tables/parcels.html:8 msgid "Year" msgstr "" -#: forms.py:75 models.py:1155 +#: forms.py:77 models.py:1200 #: templates/ishtar/blocks/window_tables/parcels.html:9 msgid "Section" msgstr "" -#: forms.py:78 models.py:1157 +#: forms.py:80 models.py:1202 msgid "Parcel number" msgstr "" -#: forms.py:80 models.py:1159 models.py:1176 models.py:1225 +#: forms.py:82 models.py:1204 models.py:1221 models.py:1270 msgid "Public domain" msgstr "" -#: forms.py:124 +#: forms.py:126 msgid "Town section is required." msgstr "" -#: forms.py:160 +#: forms.py:162 msgid "public domain" msgstr "" -#: forms.py:167 +#: forms.py:169 msgid "Current parcels" msgstr "" -#: forms.py:169 +#: forms.py:171 msgid "Deleted parcels" msgstr "" -#: forms.py:206 +#: forms.py:208 msgid "Full text input" msgstr "" -#: forms.py:208 +#: forms.py:210 msgid "example: \"2013: XD:1 to 13,24,33 to 39, YD:24\" or \"AB:24,AC:42\"" msgstr "" -#: forms.py:363 +#: forms.py:365 msgid "There are identical parcels." msgstr "" -#: forms.py:378 +#: forms.py:380 msgid "Relation type" msgstr "" -#: forms.py:381 ishtar_menu.py:30 models.py:344 models.py:804 models.py:834 -#: models.py:862 models.py:963 models.py:1151 wizards.py:339 wizards.py:350 +#: forms.py:383 ishtar_menu.py:30 models.py:366 models.py:826 models.py:856 +#: models.py:884 models.py:987 models.py:1196 wizards.py:344 wizards.py:355 #: templates/ishtar/sheet_operation.html:4 msgid "Operation" msgstr "" -#: forms.py:401 +#: forms.py:403 msgid ":" msgstr "" -#: forms.py:409 forms.py:608 forms.py:1215 +#: forms.py:411 forms.py:605 forms.py:1220 msgid "You should select an operation." msgstr "" -#: forms.py:413 +#: forms.py:415 msgid "You should select a relation type." msgstr "" -#: forms.py:443 +#: forms.py:445 msgid "Current relations" msgstr "" -#: forms.py:445 +#: forms.py:447 msgid "Deleted relations" msgstr "" -#: forms.py:449 templates/ishtar/sheet_operation.html:83 +#: forms.py:451 templates/ishtar/sheet_operation.html:83 msgid "Relations" msgstr "" -#: forms.py:460 forms.py:1221 models.py:250 +#: forms.py:456 forms.py:1226 models.py:272 msgid "Numeric reference" msgstr "" -#: forms.py:466 forms.py:1261 +#: forms.py:462 forms.py:1266 msgid "Parcel (section/number/public domain)" msgstr "" -#: forms.py:469 forms.py:1264 models.py:805 +#: forms.py:465 forms.py:1269 models.py:827 #: templates/ishtar/dashboards/dashboard_operation.html:390 #: templates/ishtar/dashboards/dashboard_operation.html:411 #: templates/ishtar/dashboards/dashboard_operation.html:643 @@ -121,457 +122,454 @@ msgstr "" msgid "Department" msgstr "" -#: forms.py:470 forms.py:1092 models.py:85 +#: forms.py:466 forms.py:1097 models.py:85 #: templates/ishtar/blocks/window_tables/archaeologicalsites.html:8 msgid "Name" msgstr "" -#: forms.py:472 forms.py:675 forms.py:753 forms.py:1227 models.py:257 +#: forms.py:468 forms.py:672 forms.py:750 forms.py:1232 models.py:279 msgid "Operation type" msgstr "" -#: forms.py:474 +#: forms.py:470 msgid "Is open?" msgstr "" -#: forms.py:483 forms.py:782 models.py:246 +#: forms.py:478 forms.py:782 models.py:268 msgid "In charge" msgstr "" -#: forms.py:490 models.py:957 +#: forms.py:485 models.py:981 msgid "Scientist in charge" msgstr "" -#: forms.py:492 forms.py:677 forms.py:773 models.py:244 +#: forms.py:487 forms.py:674 forms.py:772 models.py:266 msgid "Operator" msgstr "" -#: forms.py:499 forms.py:1097 models.py:89 models.py:259 +#: forms.py:496 forms.py:1102 models.py:89 models.py:281 #: templates/ishtar/blocks/window_tables/archaeologicalsites.html:10 msgid "Remains" msgstr "" -#: forms.py:500 forms.py:1075 forms.py:1094 models.py:87 models.py:265 +#: forms.py:497 forms.py:1080 forms.py:1099 models.py:87 models.py:287 #: templates/ishtar/blocks/window_tables/archaeologicalsites.html:9 msgid "Periods" msgstr "" -#: forms.py:501 +#: forms.py:498 msgid "Started before" msgstr "" -#: forms.py:503 +#: forms.py:500 msgid "Started after" msgstr "" -#: forms.py:505 +#: forms.py:502 msgid "Ended before" msgstr "" -#: forms.py:507 +#: forms.py:504 msgid "Ended after" msgstr "" -#: forms.py:510 +#: forms.py:507 msgid "Search within relations" msgstr "" -#: forms.py:512 forms.py:832 +#: forms.py:509 forms.py:837 msgid "Comment" msgstr "" -#: forms.py:513 +#: forms.py:510 msgid "Abstract (full text search)" msgstr "" -#: forms.py:515 forms.py:835 models.py:313 +#: forms.py:512 forms.py:840 models.py:335 msgid "Comment about scientific documentation" msgstr "" -#: forms.py:516 forms.py:837 models.py:325 +#: forms.py:513 forms.py:842 models.py:347 msgid "Record quality" msgstr "" -#: forms.py:517 forms.py:805 models.py:277 +#: forms.py:514 forms.py:807 models.py:299 msgid "Report processing" msgstr "" -#: forms.py:519 forms.py:840 models.py:320 +#: forms.py:516 forms.py:845 models.py:342 msgid "Virtual operation" msgstr "" -#: forms.py:521 forms.py:1141 -msgid "Archaelogical site" +#: forms.py:518 forms.py:1142 forms.py:1146 models.py:93 +msgid "Archaeological site" msgstr "" -#: forms.py:527 forms.py:1268 +#: forms.py:524 forms.py:1273 msgid "Created by" msgstr "" -#: forms.py:533 forms.py:1274 +#: forms.py:530 forms.py:1279 msgid "Modified by" msgstr "" -#: forms.py:540 +#: forms.py:537 msgid "Documentation deadline before" msgstr "" -#: forms.py:542 +#: forms.py:539 msgid "Documentation deadline after" msgstr "" -#: forms.py:544 forms.py:825 models.py:332 +#: forms.py:541 forms.py:830 models.py:354 msgid "Documentation received" msgstr "" -#: forms.py:546 +#: forms.py:543 msgid "Finds deadline before" msgstr "" -#: forms.py:548 +#: forms.py:545 msgid "Finds deadline after" msgstr "" -#: forms.py:550 forms.py:830 models.py:336 +#: forms.py:547 forms.py:835 models.py:358 msgid "Finds received" msgstr "" -#: forms.py:595 forms.py:1213 views.py:168 +#: forms.py:592 forms.py:1218 views.py:168 msgid "Operation search" msgstr "" -#: forms.py:639 +#: forms.py:636 msgid "Associated file" msgstr "" -#: forms.py:643 forms.py:928 models.py:968 wizards.py:76 -msgid "Archaelogical file" +#: forms.py:640 forms.py:933 models.py:493 models.py:883 models.py:992 +#: wizards.py:80 +msgid "Archaeological file" msgstr "" -#: forms.py:650 forms.py:652 models.py:327 +#: forms.py:647 forms.py:649 models.py:349 msgid "Abstract" msgstr "" -#: forms.py:655 +#: forms.py:652 msgid "months" msgstr "" -#: forms.py:655 +#: forms.py:652 msgid "years" msgstr "" -#: forms.py:657 models.py:230 +#: forms.py:654 models.py:252 msgid "Creation date" msgstr "" -#: forms.py:658 +#: forms.py:655 msgid "Start of field work" msgstr "" -#: forms.py:660 +#: forms.py:657 msgid "All" msgstr "" -#: forms.py:661 +#: forms.py:658 msgid "Preventive" msgstr "" -#: forms.py:662 +#: forms.py:659 msgid "Research" msgstr "" -#: forms.py:666 +#: forms.py:663 msgid "Slicing" msgstr "" -#: forms.py:669 +#: forms.py:666 msgid "Department detail" msgstr "" -#: forms.py:671 +#: forms.py:668 msgid "Date get from" msgstr "" -#: forms.py:673 +#: forms.py:670 msgid "Preventive/Research" msgstr "" -#: forms.py:679 +#: forms.py:676 msgid "Date after" msgstr "" -#: forms.py:681 +#: forms.py:678 msgid "Date before" msgstr "" -#: forms.py:683 +#: forms.py:680 msgid "With reports" msgstr "" -#: forms.py:684 +#: forms.py:681 msgid "With finds" msgstr "" -#: forms.py:736 forms.py:1322 templates/ishtar/sheet_administrativeact.html:13 +#: forms.py:733 forms.py:1327 templates/ishtar/sheet_administrativeact.html:20 #: templates/ishtar/sheet_operation.html:24 msgid "General" msgstr "" -#: forms.py:751 models.py:310 +#: forms.py:748 models.py:332 msgid "Generic name" msgstr "" -#: forms.py:760 models.py:279 +#: forms.py:757 models.py:301 msgid "Old code" msgstr "" -#: forms.py:763 +#: forms.py:760 msgid "Head scientist" msgstr "" -#: forms.py:779 models.py:309 +#: forms.py:779 models.py:331 msgid "Operator reference" msgstr "" -#: forms.py:791 +#: forms.py:793 msgid "Total surface (m2)" msgstr "" -#: forms.py:798 models.py:53 models.py:233 models.py:1341 +#: forms.py:800 models.py:53 models.py:255 models.py:1386 msgid "Start date" msgstr "" -#: forms.py:800 models.py:235 +#: forms.py:802 models.py:257 msgid "Excavation end date" msgstr "" -#: forms.py:803 models.py:236 +#: forms.py:805 models.py:258 msgid "Report delivery date" msgstr "" -#: forms.py:822 models.py:329 +#: forms.py:827 models.py:351 msgid "Deadline for submission of the documentation" msgstr "" -#: forms.py:827 models.py:334 +#: forms.py:832 models.py:356 msgid "Deadline for submission of the finds" msgstr "" -#: forms.py:842 +#: forms.py:847 msgid "Image" msgstr "" -#: forms.py:843 +#: forms.py:848 #, python-format msgid "" "<p>Heavy images are resized to: %(width)dx%(height)d (ratio is preserved).</" "p>" msgstr "" -#: forms.py:881 +#: forms.py:886 msgid "" "If you want to set an excavation end date you have to provide a start date." msgstr "" -#: forms.py:886 +#: forms.py:891 msgid "The excavation end date cannot be before the start date." msgstr "" -#: forms.py:914 +#: forms.py:919 #, python-format msgid "" -"Operation code already exist for year: %(year)d - use a value bigger than " +"Operation code already exists for year: %(year)d - use a value bigger than " "%(last_val)d" msgstr "" -#: forms.py:918 +#: forms.py:923 msgid "Bad operation code" msgstr "" -#: forms.py:924 models.py:486 +#: forms.py:929 models.py:508 msgid "Operation code" msgstr "" -#: forms.py:950 +#: forms.py:955 msgid "Preventive informations - excavation" msgstr "" -#: forms.py:951 models.py:263 +#: forms.py:956 models.py:285 #: templates/ishtar/dashboards/dashboard_operation.html:701 msgid "Cost (euros)" msgstr "" -#: forms.py:952 models.py:268 +#: forms.py:957 models.py:290 msgid "Scheduled man-days" msgstr "" -#: forms.py:954 models.py:271 +#: forms.py:959 models.py:293 msgid "Optional man-days" msgstr "" -#: forms.py:956 models.py:274 +#: forms.py:961 models.py:296 msgid "Effective man-days" msgstr "" -#: forms.py:966 +#: forms.py:971 msgid "Preventive informations - diagnostic" msgstr "" -#: forms.py:969 models.py:293 +#: forms.py:974 models.py:315 msgid "Prescription on zoning" msgstr "" -#: forms.py:971 models.py:296 +#: forms.py:976 models.py:318 msgid "Prescription on large area" msgstr "" -#: forms.py:974 models.py:298 +#: forms.py:979 models.py:320 msgid "Prescription on geoarchaeological context" msgstr "" -#: forms.py:978 forms.py:1000 models.py:261 models.py:981 +#: forms.py:983 forms.py:1005 models.py:283 models.py:1015 msgid "Towns" msgstr "" -#: forms.py:1007 models.py:1167 models.py:1339 +#: forms.py:1012 models.py:1212 models.py:1384 msgid "Parcel" msgstr "" -#: forms.py:1059 models.py:45 +#: forms.py:1064 models.py:45 msgid "Remain types" msgstr "" -#: forms.py:1063 models.py:44 +#: forms.py:1068 models.py:44 msgid "Remain type" msgstr "" -#: forms.py:1079 templates/ishtar/sheet_operation.html:164 +#: forms.py:1084 templates/ishtar/sheet_operation.html:164 #: templates/ishtar/sheet_operation.html:195 msgid "Period" msgstr "" -#: forms.py:1091 models.py:84 +#: forms.py:1096 models.py:84 msgid "Reference" msgstr "" -#: forms.py:1120 +#: forms.py:1125 msgid "This reference already exists." msgstr "" -#: forms.py:1137 models.py:93 -msgid "Archaeological site" -msgstr "" - -#: forms.py:1152 models.py:94 models.py:317 +#: forms.py:1157 models.py:94 models.py:339 #: templates/ishtar/sheet_operation.html:94 msgid "Archaeological sites" msgstr "" -#: forms.py:1156 -msgid "Associated archaelogical sites" +#: forms.py:1161 +msgid "Associated archaeological sites" msgstr "" -#: forms.py:1162 ishtar_menu.py:33 ishtar_menu.py:63 ishtar_menu.py:92 +#: forms.py:1167 ishtar_menu.py:33 ishtar_menu.py:63 ishtar_menu.py:92 msgid "Search" msgstr "" -#: forms.py:1167 +#: forms.py:1172 msgid "Would you like to close this operation?" msgstr "" -#: forms.py:1172 +#: forms.py:1177 msgid "Would you like to delete this operation?" msgstr "" -#: forms.py:1181 forms.py:1251 forms.py:1387 models.py:836 models.py:948 +#: forms.py:1186 forms.py:1256 forms.py:1392 models.py:858 models.py:972 msgid "Index" msgstr "" -#: forms.py:1207 +#: forms.py:1212 #, python-format msgid "" "Index already exists for operation: %(operation)s - use a value bigger than " "%(last_val)d" msgstr "" -#: forms.py:1219 +#: forms.py:1224 msgid "Operation's year" msgstr "" -#: forms.py:1226 +#: forms.py:1231 msgid "Operation's town" msgstr "" -#: forms.py:1239 +#: forms.py:1244 msgid "Documentation search" msgstr "" -#: forms.py:1241 +#: forms.py:1246 msgid "You should select a document." msgstr "" -#: forms.py:1258 forms.py:1325 models.py:873 models.py:942 +#: forms.py:1263 forms.py:1330 models.py:897 models.py:966 msgid "Act type" msgstr "" -#: forms.py:1259 forms.py:1457 +#: forms.py:1264 forms.py:1462 msgid "Indexed?" msgstr "" -#: forms.py:1265 forms.py:1330 models.py:972 +#: forms.py:1270 forms.py:1335 models.py:1006 #: templates/ishtar/blocks/window_tables/administrativacts.html:10 msgid "Object" msgstr "" -#: forms.py:1302 views.py:324 +#: forms.py:1307 views.py:329 msgid "Administrative act search" msgstr "" -#: forms.py:1317 forms.py:1415 forms.py:1482 +#: forms.py:1322 forms.py:1420 forms.py:1487 msgid "You should select an administrative act." msgstr "" -#: forms.py:1333 models.py:969 +#: forms.py:1338 models.py:1003 msgid "Signature date" msgstr "" -#: forms.py:1375 +#: forms.py:1380 #, python-format msgid "" -"This index already exist for year: %(year)d - use a value bigger than " +"This index already exists for year: %(year)d - use a value bigger than " "%(last_val)d" msgstr "" -#: forms.py:1379 +#: forms.py:1384 msgid "Bad index" msgstr "" -#: forms.py:1392 +#: forms.py:1397 msgid "Would you like to delete this administrative act?" msgstr "" -#: forms.py:1397 +#: forms.py:1402 msgid "Template" msgstr "" -#: forms.py:1421 forms.py:1425 +#: forms.py:1426 forms.py:1430 msgid "This document is not intended for this type of act." msgstr "" -#: forms.py:1443 +#: forms.py:1448 msgid "Doc generation" msgstr "" -#: forms.py:1445 +#: forms.py:1450 msgid "Generate the associated doc?" msgstr "" -#: forms.py:1466 ishtar_menu.py:121 views.py:377 +#: forms.py:1471 ishtar_menu.py:121 views.py:382 msgctxt "admin act register" msgid "Register" msgstr "" -#: ishtar_menu.py:38 +#: ishtar_menu.py:38 ishtar_menu.py:69 ishtar_menu.py:97 msgid "Creation" msgstr "" @@ -587,15 +585,11 @@ msgstr "" msgid "Deletion" msgstr "" -#: ishtar_menu.py:58 models.py:988 +#: ishtar_menu.py:58 models.py:1022 #: templates/ishtar/sheet_administrativeact.html:4 msgid "Administrative act" msgstr "" -#: ishtar_menu.py:69 ishtar_menu.py:97 widgets.py:55 -msgid "Add" -msgstr "" - #: ishtar_menu.py:84 msgid "Documents" msgstr "" @@ -616,16 +610,16 @@ msgstr "" msgid "General informations" msgstr "" -#: ishtar_menu.py:136 models.py:345 +#: ishtar_menu.py:136 models.py:367 #: templates/ishtar/dashboards/dashboard_operation.html:8 msgid "Operations" msgstr "" -#: models.py:52 models.py:70 models.py:1803 +#: models.py:52 models.py:70 models.py:1848 msgid "Order" msgstr "" -#: models.py:54 models.py:1342 +#: models.py:54 models.py:1387 msgid "End date" msgstr "" @@ -681,309 +675,369 @@ msgstr "" msgid "Reliable" msgstr "" +#: models.py:230 +msgid "Year - Index" +msgstr "" + +#: models.py:231 +msgid "Associated file (label)" +msgstr "" + #: models.py:232 -msgid "Closing date" +msgid "Operator name" +msgstr "" + +#: models.py:233 +msgid "Scientist (full name)" +msgstr "" + +#: models.py:234 +msgid "Associated file (external ID)" +msgstr "" + +#: models.py:235 +msgid "Scientist (title)" +msgstr "" + +#: models.py:236 +msgid "Scientist (surname)" +msgstr "" + +#: models.py:237 +msgid "Scientist (name)" +msgstr "" + +#: models.py:238 +msgid "Scientist - Organization (name)" msgstr "" #: models.py:239 +msgid "In charge (title)" +msgstr "" + +#: models.py:240 +msgid "In charge (surname)" +msgstr "" + +#: models.py:241 +msgid "In charge (name)" +msgstr "" + +#: models.py:242 +msgid "In charge - Organization (name)" +msgstr "" + +#: models.py:247 +msgid "Archaeological sites (reference)" +msgstr "" + +#: models.py:254 +msgid "Closing date" +msgstr "" + +#: models.py:261 msgid "In charge scientist" msgstr "" -#: models.py:254 models.py:1147 +#: models.py:276 models.py:1192 msgid "File" msgstr "" -#: models.py:258 +#: models.py:280 msgid "Surface (m2)" msgstr "" -#: models.py:311 +#: models.py:333 msgid "General comment" msgstr "" -#: models.py:314 +#: models.py:336 msgid "Cached name" msgstr "" -#: models.py:322 +#: models.py:344 msgid "" "If checked, it means that this operation have not been officialy registered." msgstr "" -#: models.py:338 +#: models.py:360 msgid "Point" msgstr "" -#: models.py:339 +#: models.py:361 msgid "Multi polygon" msgstr "" -#: models.py:347 +#: models.py:369 msgid "Can view all Operations" msgstr "" -#: models.py:348 +#: models.py:370 msgid "Can view own Operation" msgstr "" -#: models.py:349 +#: models.py:371 msgid "Can add own Operation" msgstr "" -#: models.py:350 +#: models.py:372 msgid "Can change own Operation" msgstr "" -#: models.py:351 +#: models.py:373 msgid "Can delete own Operation" msgstr "" -#: models.py:352 +#: models.py:374 msgid "Can close Operation" msgstr "" -#: models.py:380 +#: models.py:402 msgid "OPE" msgstr "" -#: models.py:440 +#: models.py:462 msgid "Intercommunal" msgstr "" -#: models.py:471 models.py:861 -msgid "Archaeological file" -msgstr "" - -#: models.py:472 +#: models.py:494 msgid "Code patriarche" msgstr "" -#: models.py:512 +#: models.py:534 msgid "This operation code already exists for this year" msgstr "" -#: models.py:545 +#: models.py:567 msgid "Number of parcels" msgstr "" -#: models.py:563 +#: models.py:585 msgid "Number of administrative acts" msgstr "" -#: models.py:571 +#: models.py:593 msgid "Number of indexed administrative acts" msgstr "" -#: models.py:579 +#: models.py:601 msgid "Number of context records" msgstr "" -#: models.py:615 +#: models.py:637 msgid "Number of finds" msgstr "" -#: models.py:660 +#: models.py:682 msgid "No type" msgstr "" -#: models.py:691 +#: models.py:713 msgid "Number of sources" msgstr "" -#: models.py:733 templates/ishtar/dashboards/dashboard_operation.html:309 +#: models.py:755 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:775 +#: models.py:797 msgid "Inverse relation" msgstr "" -#: models.py:779 +#: models.py:801 msgid "Operation relation type" msgstr "" -#: models.py:780 +#: models.py:802 msgid "Operation relation types" msgstr "" -#: models.py:793 +#: models.py:815 msgid "Operation record relation" msgstr "" -#: models.py:794 +#: models.py:816 msgid "Operation record relations" msgstr "" -#: models.py:840 +#: models.py:862 msgid "Operation documentation" msgstr "" -#: models.py:841 +#: models.py:863 msgid "Operation documentations" msgstr "" -#: models.py:844 +#: models.py:866 msgid "Can view all Operation sources" msgstr "" -#: models.py:846 +#: models.py:868 msgid "Can view own Operation source" msgstr "" -#: models.py:848 +#: models.py:870 msgid "Can add own Operation source" msgstr "" -#: models.py:850 +#: models.py:872 msgid "Can change own Operation source" msgstr "" -#: models.py:852 +#: models.py:874 msgid "Can delete own Operation source" msgstr "" -#: models.py:864 +#: models.py:885 models.py:997 +msgid "Treatment request" +msgstr "" + +#: models.py:886 models.py:1002 +msgid "Treatment" +msgstr "" + +#: models.py:888 msgid "Intended to" msgstr "" -#: models.py:866 +#: models.py:890 msgid "Code" msgstr "" -#: models.py:869 +#: models.py:893 msgid "Associated template" msgstr "" -#: models.py:870 +#: models.py:894 msgid "Indexed" msgstr "" -#: models.py:874 +#: models.py:898 msgid "Act types" msgstr "" -#: models.py:946 +#: models.py:970 msgid "Person in charge of the operation" msgstr "" -#: models.py:952 +#: models.py:976 msgid "Archaeological preventive operator" msgstr "" -#: models.py:960 +#: models.py:984 msgid "Signatory" msgstr "" -#: models.py:978 +#: models.py:1012 msgid "Departments" msgstr "" -#: models.py:979 +#: models.py:1013 msgid "Cached values get from associated departments" msgstr "" -#: models.py:982 +#: models.py:1016 msgid "Cached values get from associated towns" msgstr "" -#: models.py:989 templates/ishtar/sheet_operation.html:102 +#: models.py:1023 templates/ishtar/sheet_operation.html:102 #: templates/ishtar/sheet_operation.html:138 msgid "Administrative acts" msgstr "" -#: models.py:992 +#: models.py:1026 msgid "Can view all Administrative acts" msgstr "" -#: models.py:994 +#: models.py:1028 msgid "Can view own Administrative act" msgstr "" -#: models.py:996 +#: models.py:1030 msgid "Can add own Administrative act" msgstr "" -#: models.py:998 +#: models.py:1032 msgid "Can change own Administrative act" msgstr "" -#: models.py:1000 +#: models.py:1034 msgid "Can delete own Administrative act" msgstr "" -#: models.py:1009 +#: models.py:1043 #: templates/ishtar/blocks/window_tables/administrativacts.html:7 #: templates/ishtar/blocks/window_tables/archaeologicalsites.html:7 msgid "Ref." msgstr "" -#: models.py:1092 +#: models.py:1137 msgid "This index already exists for this year" msgstr "" -#: models.py:1160 +#: models.py:1205 msgid "External ID" msgstr "" -#: models.py:1163 +#: models.py:1208 msgid "External ID is set automatically" msgstr "" -#: models.py:1164 +#: models.py:1209 msgid "Address - Locality" msgstr "" -#: models.py:1337 +#: models.py:1382 msgid "Owner" msgstr "" -#: models.py:1345 +#: models.py:1390 msgid "Parcel owner" msgstr "" -#: models.py:1346 +#: models.py:1391 msgid "Parcel owners" msgstr "" -#: models.py:1372 +#: models.py:1417 msgid "Recorded" msgstr "" -#: models.py:1373 +#: models.py:1418 msgid "Effective" msgstr "" -#: models.py:1374 +#: models.py:1419 msgid "Active" msgstr "" -#: models.py:1375 +#: models.py:1420 msgid "Field completed" msgstr "" -#: models.py:1376 +#: models.py:1421 msgid "Associated report" msgstr "" -#: models.py:1377 +#: models.py:1422 msgid "Closed" msgstr "" -#: models.py:1378 +#: models.py:1423 msgid "Documented and closed" msgstr "" -#: models.py:1804 +#: models.py:1849 msgid "Is preventive" msgstr "" -#: models.py:1807 +#: models.py:1852 msgid "Operation type old" msgstr "" -#: models.py:1808 +#: models.py:1853 msgid "Operation types old" msgstr "" @@ -999,93 +1053,53 @@ msgstr "" msgid "Operation closing" msgstr "" -#: views.py:282 +#: views.py:287 msgid "Operation deletion" msgstr "" -#: views.py:287 +#: views.py:292 msgid "Operation: source search" msgstr "" -#: views.py:295 +#: views.py:300 msgid "Operation: source creation" msgstr "" -#: views.py:303 +#: views.py:308 msgid "Operation: source modification" msgstr "" -#: views.py:318 +#: views.py:323 msgid "Operation: source deletion" msgstr "" -#: views.py:337 +#: views.py:342 msgid "Operation: new administrative act" msgstr "" -#: views.py:347 +#: views.py:352 msgid "Operation: administrative act modification" msgstr "" -#: views.py:371 +#: views.py:376 msgid "Operation: administrative act deletion" msgstr "" -#: wizards.py:199 -msgid "" -"Warning: No Archaelogical File is provided. If you have forget it return to " -"the first step." -msgstr "" - -#: templates/ishtar/sheet_administrativeact.html:14 -msgid "Year:" -msgstr "" - -#: templates/ishtar/sheet_administrativeact.html:15 -msgid "Numerical reference:" -msgstr "" - -#: templates/ishtar/sheet_administrativeact.html:16 -msgid "Internal reference:" -msgstr "" - -#: templates/ishtar/sheet_administrativeact.html:17 -msgid "Type:" -msgstr "" - -#: templates/ishtar/sheet_administrativeact.html:18 -msgid "Object:" -msgstr "" - -#: templates/ishtar/sheet_administrativeact.html:19 -msgid "Signature date:" -msgstr "" - -#: templates/ishtar/sheet_administrativeact.html:20 -msgid "In charge:" -msgstr "" - -#: templates/ishtar/sheet_administrativeact.html:21 -msgid "Archaeological preventive operator:" -msgstr "" - -#: templates/ishtar/sheet_administrativeact.html:23 -msgid "Associated file:" +#: widgets.py:55 +msgid "Add" msgstr "" -#: templates/ishtar/sheet_administrativeact.html:24 -msgid "Associated operation:" +#: wizards.py:203 +msgid "" +"Warning: No Archaeological File is provided. If you have forget it return to " +"the first step." msgstr "" -#: templates/ishtar/sheet_administrativeact.html:26 +#: templates/ishtar/sheet_administrativeact.html:36 #: templates/ishtar/sheet_operation.html:38 msgid "Surface:" msgstr "" -#: templates/ishtar/sheet_administrativeact.html:27 -msgid "Created by:" -msgstr "" - #: templates/ishtar/sheet_operation.html:14 msgid "This operation is virtual." msgstr "" diff --git a/archaeological_operations/management/commands/import_operations_old.py b/archaeological_operations/management/commands/import_operations_old.py index a9ecf41c9..4ad229e9a 100755 --- a/archaeological_operations/management/commands/import_operations_old.py +++ b/archaeological_operations/management/commands/import_operations_old.py @@ -29,7 +29,7 @@ IMPORTERS = {'csv':import_from_csv, class Command(BaseCommand): args = '<filename> [<lines>]' - help = "Import archaelogical operations" + help = "Import archaeological operations" def handle(self, *args, **options): if not args or not args[0]: diff --git a/archaeological_operations/migrations/0001_initial.py b/archaeological_operations/migrations/0001_initial.py index 6e4b66ce6..4172b9beb 100644 --- a/archaeological_operations/migrations/0001_initial.py +++ b/archaeological_operations/migrations/0001_initial.py @@ -6,6 +6,7 @@ from django.db import models class Migration(SchemaMigration): + depends_on = (('archaeological_files', '0001_initial.py'), ) def forwards(self, orm): # Adding model 'RemainType' @@ -1056,4 +1057,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['archaeological_operations']
\ No newline at end of file + complete_apps = ['archaeological_operations'] diff --git a/archaeological_operations/migrations/0012_auto__add_field_administrativeact_treatment_file__add_field_administra.py b/archaeological_operations/migrations/0012_auto__add_field_administrativeact_treatment_file__add_field_administra.py new file mode 100644 index 000000000..43e10b926 --- /dev/null +++ b/archaeological_operations/migrations/0012_auto__add_field_administrativeact_treatment_file__add_field_administra.py @@ -0,0 +1,860 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + depends_on = ( + ('archaeological_finds', + '0013_auto__add_treatmentfilesource__add_treatmentfile__add_unique_treatment.py'), + ) + + def forwards(self, orm): + # Adding field 'AdministrativeAct.treatment_file' + db.add_column('archaeological_operations_administrativeact', 'treatment_file', + self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='administrative_act', null=True, to=orm['archaeological_finds.TreatmentFile']), + keep_default=False) + + # Adding field 'AdministrativeAct.treatment' + db.add_column('archaeological_operations_administrativeact', 'treatment', + self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='administrative_act', null=True, to=orm['archaeological_finds.Treatment']), + keep_default=False) + + + # Changing field 'ActType.intented_to' + db.alter_column('archaeological_operations_acttype', 'intented_to', self.gf('django.db.models.fields.CharField')(max_length=2)) + # Adding field 'HistoricalAdministrativeAct.treatment_file_id' + db.add_column('archaeological_operations_historicaladministrativeact', 'treatment_file_id', + self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True), + keep_default=False) + + # Adding field 'HistoricalAdministrativeAct.treatment_id' + db.add_column('archaeological_operations_historicaladministrativeact', 'treatment_id', + self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'AdministrativeAct.treatment_file' + db.delete_column('archaeological_operations_administrativeact', 'treatment_file_id') + + # Deleting field 'AdministrativeAct.treatment' + db.delete_column('archaeological_operations_administrativeact', 'treatment_id') + + + # Changing field 'ActType.intented_to' + db.alter_column('archaeological_operations_acttype', 'intented_to', self.gf('django.db.models.fields.CharField')(max_length=1)) + # Deleting field 'HistoricalAdministrativeAct.treatment_file_id' + db.delete_column('archaeological_operations_historicaladministrativeact', 'treatment_file_id') + + # Deleting field 'HistoricalAdministrativeAct.treatment_id' + db.delete_column('archaeological_operations_historicaladministrativeact', 'treatment_id') + + + models = { + '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.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'}), + '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'}), + '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']"}), + '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.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.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.historicaladministrativeact': { + 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalAdministrativeAct'}, + 'act_object': ('django.db.models.fields.TextField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), + 'act_type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'associated_file_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'departments_label': ('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'}), + 'in_charge_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'index': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'operation_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'operator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'ref_sra': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), + 'scientist_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'signatory_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'signature_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'towns_label': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'treatment_file_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'treatment_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + }, + 'archaeological_operations.historicaloperation': { + 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalOperation'}, + 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'associated_file_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + '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_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'code_patriarche': ('django.db.models.fields.IntegerField', [], {'db_index': '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_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'}), + 'in_charge_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + '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_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'operator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + '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'}), + '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'}), + 'report_delivery_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'report_processing_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', '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_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + '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'}), + '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.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.operationbydepartment': { + 'Meta': {'object_name': 'OperationByDepartment', 'db_table': "'operation_department'", 'managed': 'False'}, + 'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'operation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.Operation']"}) + }, + 'archaeological_operations.operationsource': { + 'Meta': {'object_name': 'OperationSource'}, + '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': "'operationsource_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'}), + 'index': ('django.db.models.fields.IntegerField', [], {'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'}), + 'operation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'source'", 'to': "orm['archaeological_operations.Operation']"}), + '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_operations.operationtypeold': { + 'Meta': {'ordering': "['-preventive', 'order', 'label']", 'object_name': 'OperationTypeOld'}, + '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'}) + }, + '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.parcelowner': { + 'Meta': {'object_name': 'ParcelOwner'}, + 'end_date': ('django.db.models.fields.DateField', [], {}), + '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_parcelowner'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}), + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parcel_owner'", 'to': "orm['ishtar_common.Person']"}), + 'parcel': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owners'", 'to': "orm['archaeological_operations.Parcel']"}), + 'start_date': ('django.db.models.fields.DateField', [], {}) + }, + '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.recordrelations': { + 'Meta': {'ordering': "('left_record', 'relation_type')", '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_operations.Operation']"}), + 'relation_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.RelationType']"}), + 'right_record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'left_relations'", 'to': "orm['archaeological_operations.Operation']"}) + }, + 'archaeological_operations.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_operations.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_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.container': { + 'Meta': {'ordering': "('cached_label',)", 'unique_together': "(('index', 'location'),)", 'object_name': 'Container'}, + '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']"}), + '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', [], {'blank': 'True', 'related_name': "'owned_containers'", 'null': 'True', '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.IntegerField', [], {'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'}), + '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'}), + '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': {'object_name': 'AuthorType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.canton': { + 'Meta': {'object_name': 'Canton'}, + 'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}) + }, + 'ishtar_common.department': { + 'Meta': {'ordering': "['number']", 'object_name': 'Department'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}), + 'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.State']", 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.documenttemplate': { + 'Meta': {'ordering': "['associated_object_name', 'name']", 'object_name': 'DocumentTemplate'}, + 'associated_object_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'template': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}) + }, + 'ishtar_common.format': { + 'Meta': {'object_name': 'Format'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.import': { + 'Meta': {'object_name': 'Import'}, + 'conservative_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'encoding': ('django.db.models.fields.CharField', [], {'default': "'utf-8'", 'max_length': '15'}), + 'end_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'error_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.ImporterType']"}), + 'match_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'seconds_remaining': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'skip_lines': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'state': ('django.db.models.fields.CharField', [], {'default': "'C'", 'max_length': '2'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']"}) + }, + 'ishtar_common.importertype': { + 'Meta': {'object_name': 'ImporterType'}, + 'associated_models': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_template': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '100', 'unique': 'True', 'null': 'True', 'blank': 'True'}), + 'unicity_keys': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.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': {'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_operations'] diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 14e5e1f7e..129040706 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -225,6 +225,28 @@ class Operation(ClosedItem, BaseHistorizedItem, ImageModel, OwnPerms, 'finds_deadline_before': 'finds_deadline__lte', 'finds_deadline_after': 'finds_deadline__gte', } + EXTRA_FULL_FIELDS_LABELS = { + 'full_code_patriarche': u"Code patriarche", + 'year_index': _(u"Year - Index"), + 'associated_file_short_label': _(u"Associated file (label)"), + 'operator__name': _(u"Operator name"), + 'scientist__raw_name': _(u"Scientist (full name)"), + 'associated_file__external_id': _(u"Associated file (external ID)"), + 'scientist__title': _(u"Scientist (title)"), + 'scientist__surname': _(u"Scientist (surname)"), + 'scientist__name': _(u"Scientist (name)"), + 'scientist__attached_to__name': _(u"Scientist - Organization (name)"), + 'in_charge__title': _(u"In charge (title)"), + 'in_charge__surname': _(u"In charge (surname)"), + 'in_charge__name': _(u"In charge (name)"), + 'in_charge__attached_to__name': _(u"In charge - Organization (name)"), + 'cira_rapporteur__surname': u"Rapporteur CIRA (prénom)", + 'cira_rapporteur__name': u"Rapporteur CIRA (nom)", + 'cira_rapporteur__attached_to__name': u"Rapporteur CIRA - " + u"Organisation (nom)", + 'archaeological_sites__reference': _(u"Archaeological sites (" + u"reference)"), + } # fields definition creation_date = models.DateField(_(u"Creation date"), @@ -355,9 +377,9 @@ class Operation(ClosedItem, BaseHistorizedItem, ImageModel, OwnPerms, @classmethod def get_owns(cls, user, menu_filtr=None, limit=None): - replace_query = {} - if menu_filtr: - replace_query = {'associated_file': menu_filtr} + replace_query = None + if menu_filtr and 'file' in menu_filtr: + replace_query = Q(associated_file=menu_filtr['file']) owns = super(Operation, cls).get_owns( user, replace_query=replace_query, limit=limit) @@ -798,9 +820,9 @@ post_delete.connect(post_delete_record_relation, sender=RecordRelations) class OperationByDepartment(models.Model): - ''' + """ Database view for dashboard - ''' + """ operation = models.ForeignKey(Operation, verbose_name=_(u"Operation")) department = models.ForeignKey(Department, verbose_name=_(u"Department"), blank=True, null=True) @@ -860,8 +882,10 @@ class OperationSource(Source): class ActType(GeneralType): TYPE = (('F', _(u'Archaeological file')), ('O', _(u'Operation')), + ('TF', _(u'Treatment request')), + ('T', _(u'Treatment')), ) - intented_to = models.CharField(_(u"Intended to"), max_length=1, + intented_to = models.CharField(_(u"Intended to"), max_length=2, choices=TYPE) code = models.CharField(_(u"Code"), max_length=10, blank=True, null=True) associated_template = models.ManyToManyField( @@ -965,7 +989,17 @@ class AdministrativeAct(BaseHistorizedItem, OwnPerms, ValueGetter): 'archaeological_files.File', blank=True, null=True, related_name='administrative_act', - verbose_name=_(u"Archaelogical file")) + verbose_name=_(u"Archaeological file")) + treatment_file = models.ForeignKey( + 'archaeological_finds.TreatmentFile', + blank=True, null=True, + related_name='administrative_act', + verbose_name=_(u"Treatment request")) + treatment = models.ForeignKey( + 'archaeological_finds.Treatment', + blank=True, null=True, + related_name='administrative_act', + verbose_name=_(u"Treatment")) signature_date = models.DateField(_(u"Signature date"), blank=True, null=True) year = models.IntegerField(_(u"Year"), blank=True, null=True) @@ -1003,7 +1037,7 @@ class AdministrativeAct(BaseHistorizedItem, OwnPerms, ValueGetter): def __unicode__(self): return settings.JOINT.join( [unicode(item) for item in [ - self.operation, self.associated_file, self.act_object] + self.related_item, self.act_object] if item]) full_ref_lbl = _(u"Ref.") @@ -1020,6 +1054,10 @@ class AdministrativeAct(BaseHistorizedItem, OwnPerms, ValueGetter): return u" ".join(lbl) @property + def associated_filename(self): + return self.get_filename() + + @property def towns(self): if self.associated_file: return self.associated_file.towns.all() @@ -1047,7 +1085,14 @@ class AdministrativeAct(BaseHistorizedItem, OwnPerms, ValueGetter): @property def related_item(self): - return self.operation if self.operation else self.associated_file + if self.operation: + return self.operation + if self.associated_file: + return self.associated_file + if self.treatment: + return self.treatment + if self.treatment_file: + return self.treatment_file def get_filename(self): filename = self.related_item.associated_filename diff --git a/archaeological_operations/templates/ishtar/sheet_administrativeact.html b/archaeological_operations/templates/ishtar/sheet_administrativeact.html index 57acf9cbe..b12c1f8c0 100644 --- a/archaeological_operations/templates/ishtar/sheet_administrativeact.html +++ b/archaeological_operations/templates/ishtar/sheet_administrativeact.html @@ -1,32 +1,46 @@ {% extends "ishtar/sheet.html" %} -{% load i18n window_header %} +{% load i18n window_header window_field %} {% block head_title %}{% trans "Administrative act" %}{% endblock %} {% block content %} {% if item.operation %} {% window_nav item window_id 'show-administrativeact' 'operation_administrativeactop_modify' %} -{% else %} +{% endif %} +{% if item.associated_file %} {% window_nav item window_id 'show-administrativeact' 'file_administrativeactfile_modify' %} {% endif %} +{% if item.treatment %} +{% window_nav item window_id 'show-administrativeact' 'treatment_administrativeacttreatment_modify' %} +{% endif %} +{% if item.treatment_file %} +{% window_nav item window_id 'show-administrativeact' 'treatmentfile_administrativeacttreatmentfile_modify' %} +{% endif %} <h3>{% trans "General"%}</h3> -<p><label>{%trans "Year:"%}</label> <span class='value strong'>{{ item.year }}</span></p> -{% if item.index %}<p><label>{%trans "Numerical reference:"%}</label> <span class='value strong'>{{ item.index }}</span></p>{% endif %} -{% if item.ref_sra %}<p><label>{%trans "Internal reference:"%}</label> <span class='value strong'>{{ item.ref_sra }}</span></p>{% endif %} -<p><label>{%trans "Type:"%}</label> <span class='value'>{{ item.act_type }}</span></p> -{% if item.act_object %}<p><label>{%trans "Object:"%}</label> <span class='value'>{{ item.act_object }}</span></p>{% endif %} -<p><label>{%trans "Signature date:"%}</label> <span class='value'>{{ item.signature_date }}</span></p> -<p><label>{%trans "In charge:"%}</label> <span class='value'>{{ item.in_charge.full_label }}</span></p> -{% if item.operator %}<p><label>{%trans "Archaeological preventive operator:"%}</label> <span class='value'>{{ item.operator }}</span></p>{% endif %} - -{% if item.associated_file %}<p><label>{%trans "Associated file:"%}</label> <span class='value'><a href='#' onclick='load_window("{% url show-file item.associated_file.pk ''%}")'>{{ item.associated_file }}</a></span></p>{% endif %} <!-- Displayed as Year/index/Commune/Common_name This should be a link to the file sheet of the related file --> -{% if item.operation %}<p><label>{%trans "Associated operation:"%}</label> <span class='value'><a href='#' onclick='load_window("{% url show-operation item.operation.pk ''%}")'>{{ item.operation }}</a></span></p>{% endif %} <!-- Displayed as Year/index/Commune/Common_name This should be a link to the file sheet of the related operation --> +<ul class='form-flex'> + {% field_li "Year" item.year %} + {% field_li "Index" item.index %} + {% field_li "Internal reference" item.ref_sra %} + {% field_li "Type" item.act_type %} + {% field_li "Object" item.act_object %} + {% field_li "Signature date" item.signature_date %} + {% field_li "In charge" item.in_charge %} + {% field_li "Archaeological preventive operator" item.operator %} + {% field_li_detail "Associated file" item.associated_file %} + {% field_li_detail "Operation" item.operation %} + {% field_li_detail "Treatment" item.treatment %} + {% field_li_detail "Treatment request" item.treatment_file %} -{% if item.operation %}{% if item.operation.surface %}<p><label>{%trans "Surface:"%}</label> <span class='value'>{{ item.operation.surface }} m<sup>2</sup> ({{ item.operation.surface_ha }} ha)</span></p>{%endif%} {% endif %} -<p><label>{%trans "Created by:"%}</label> <span class='value'>{{ item.history_creator.ishtaruser.full_label }}</span></p> -{%comment%}{% if item.general_contractor.attached_to %}<p><label>{%trans "General contractor organisation:"%}</label> <span class='value'>{{ item.general_contractor.attached_to }}</span></p>{% endif %} <!-- Contractor's organisation displayed as concat of Name/Adress/postal_code/city --> + {% if item.operation and item.operation.surface %} + <li><label>{% trans "Surface:"%}</label> <span class='value'>{{ item.operation.surface }} m<sup>2</sup> ({{ item.operation.surface_ha }} ha)</span></li> + {% endif %} + {% field_li "Created by" item.history_creator.ishtaruser %} +{% comment %}{% if item.general_contractor.attached_to %}<p> + <label>{% trans "General contractor organisation:"%}</label> + <span class='value'>{{ item.general_contractor.attached_to }}</span></p>{% endif %} <!-- Contractor's organisation displayed as concat of Name/Adress/postal_code/city --> {% if item.general_contractor %}<p><label>{%trans "General contractor:"%}</label> <span class='value'>{{ item.general_contractor.full_label }}</span></p>{% endif %} -{%endcomment%} +{% endcomment %} +</ul> {% endblock %} diff --git a/archaeological_operations/templates/ishtar/sheet_operation.html b/archaeological_operations/templates/ishtar/sheet_operation.html index daddb42d6..43446c516 100644 --- a/archaeological_operations/templates/ishtar/sheet_operation.html +++ b/archaeological_operations/templates/ishtar/sheet_operation.html @@ -49,11 +49,11 @@ {% field_li "Deadline for submission of the finds" item.finds_deadline %} {% field_li "Finds received" item.finds_received %} {% field_li_detail "Associated file" item.associated_file %} -{% field_li "Responsible for town planning service" item.associated_file.responsible_town_planning_service.full_address %} +{% field_li "Responsible for planning service" item.associated_file.responsible_town_planning_service.full_address %} {% if item.associated_file.town_planning_service %} - {% field_li "Town planning service organization" item.associated_file.town_planning_service.full_address %} + {% field_li "Planning service organization" item.associated_file.town_planning_service.full_address %} {% else %} - {% field_li "Town planning service organization" item.associated_file.responsible_town_planning_service.attached_to.full_address %} + {% field_li "Planning service organization" item.associated_file.responsible_town_planning_service.attached_to.full_address %} {% endif %} {% field_li "Permit type" item.associated_file.permit_type %} {% field_li "Permit reference" item.associated_file.permit_reference %} @@ -115,7 +115,7 @@ {% trans "Context record relations" as cr_rels %} {% if item.context_record_relations_q.count %} -{% dynamic_table_document cr_rels 'context_records_relations' 'left_record__operation' item.pk '' output %} +{% dynamic_table_document cr_rels 'context_records_relations_detail' 'left_record__operation' item.pk '' output %} {% endif %} {% trans "Documents from associated context records" as cr_docs %} diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index dd294550e..d8399eedb 100644 --- a/archaeological_operations/tests.py +++ b/archaeological_operations/tests.py @@ -38,7 +38,8 @@ from ishtar_common.models import OrganizationType, Organization, \ ImporterType, IshtarUser, TargetKey, IshtarSiteProfile from ishtar_common import forms_common -from ishtar_common.tests import WizardTest, create_superuser, create_user +from ishtar_common.tests import WizardTest, WizardTestFormData as FormData, \ + create_superuser, create_user class ImportOperationTest(TestCase): @@ -481,7 +482,9 @@ class OperationInitTest(object): self.parcels.append(models.Parcel.objects.create(**default)) return self.parcels - def get_default_parcel(self): + def get_default_parcel(self, force=False): + if force: + return self.create_parcel()[-1] return self.create_parcel()[0] def create_operation(self, user=None, orga=None): @@ -495,6 +498,8 @@ class OperationInitTest(object): return self.operations def get_default_operation(self, force=False): + if force: + return self.create_operation()[-1] return self.create_operation()[0] def tearDown(self): @@ -668,20 +673,20 @@ class OperationWizardCreationTest(WizardTest, OperationInitTest, TestCase): url_name = 'operation_creation' wizard_name = 'operation_wizard' steps = views.wizard_steps - form_datas = [( - # data - { - 'general-operation_creation': { - 'operation_type': 1, # preventive diag - 'year': 2016} - }, - # ignored - ('filechoice-operation_creation', - 'preventive-operation_creation', - 'towns-operation_creation', - 'parcels-operation_creation', - ) - )] + form_datas = [ + FormData( + "Create a preventive diag", + form_datas={ + 'general-operation_creation': { + 'operation_type': 1, # preventive diag + 'year': 2016} + }, + ignored=('filechoice-operation_creation', + 'preventive-operation_creation', + 'towns-operation_creation', + 'parcels-operation_creation', ) + ) + ] def pre_wizard(self): self.operation_number = models.Operation.objects.count() @@ -692,20 +697,56 @@ class OperationWizardCreationTest(WizardTest, OperationInitTest, TestCase): self.operation_number + 1) +class OperationWizardDeleteTest(OperationWizardCreationTest): + fixtures = OperationWizardCreationTest.fixtures + url_name = 'operation_deletion' + wizard_name = 'operation_deletion_wizard' + steps = views.operation_deletion_steps + form_datas = [ + FormData( + "Wizard deletion test", + form_datas={ + 'selec-operation_deletion': {'pk': None}, + } + ) + ] + + def pass_test(self): + if not settings.SOUTH_TESTS_MIGRATE: + # with no migration the views are not created + return True + + def pre_wizard(self): + self.ope = self.get_default_operation(force=True) + self.form_datas[0].form_datas['selec-operation_deletion']['pk'] = \ + self.ope.pk + self.operation_number = models.Operation.objects.count() + super(OperationWizardDeleteTest, self).pre_wizard() + + def post_wizard(self): + self.assertEqual(self.operation_number - 1, + models.Operation.objects.count()) + + class OperationWizardClosingTest(OperationWizardCreationTest): fixtures = OperationWizardCreationTest.fixtures url_name = 'operation_closing' wizard_name = 'operation_closing_wizard' steps = views.operation_closing_steps - form_datas = [[ - { - 'selec-operation_closing': {'pk': None}, - 'date-operation_closing': {'end_date': '2016-01-01'}, - }, []]] + form_datas = [ + FormData( + "Wizard closing test", + form_datas={ + 'selec-operation_closing': {'pk': None}, + 'date-operation_closing': {'end_date': '2016-01-01'}, + } + ) + ] def pre_wizard(self): self.ope = self.get_default_operation() - self.form_datas[0][0]['selec-operation_closing']['pk'] = self.ope.pk + self.form_datas[0].form_datas['selec-operation_closing']['pk'] = \ + self.ope.pk self.assertTrue(self.ope.is_active()) super(OperationWizardClosingTest, self).pre_wizard() @@ -714,7 +755,7 @@ class OperationWizardClosingTest(OperationWizardCreationTest): self.assertFalse(ope.is_active()) self.assertEqual( ope.closing()['date'].strftime('%Y-%d-%m'), - self.form_datas[0][0]['date-operation_closing']['end_date']) + self.form_datas[0].form_datas['date-operation_closing']['end_date']) class OperationAdminActWizardCreationTest(WizardTest, OperationInitTest, @@ -730,25 +771,24 @@ class OperationAdminActWizardCreationTest(WizardTest, OperationInitTest, url_name = 'operation_administrativeactop' wizard_name = 'operation_administrative_act_wizard' steps = views.administrativeactop_steps - form_datas = [[ - # data - { - 'selec-operation_administrativeactop': { - }, - 'administrativeact-operation_administrativeactop': { - 'signature_date': str(datetime.date.today()) - } - }, - # ignored - [] - ]] + form_datas = [ + FormData( + "Admin act creation", + form_datas={ + 'selec-operation_administrativeactop': { + }, + 'administrativeact-operation_administrativeactop': { + 'signature_date': str(datetime.date.today()) + } + }, + ) + ] def pre_wizard(self): ope = self.get_default_operation() - self.number = models.AdministrativeAct.objects.count() - data = self.form_datas[0][0] + data = self.form_datas[0].form_datas data['selec-operation_administrativeactop']['pk'] = ope.pk act = models.ActType.objects.filter(intented_to='O').all()[0].pk diff --git a/archaeological_operations/urls.py b/archaeological_operations/urls.py index aca98d4c4..e98ddc93f 100644 --- a/archaeological_operations/urls.py +++ b/archaeological_operations/urls.py @@ -128,9 +128,13 @@ urlpatterns += patterns( # allow specialization for operations url(r'show-administrativeact(?:/(?P<pk>.+))?/(?P<type>.+)?$', 'show_administrativeact', name='show-administrativeactop'), - # allow specialization for files + # allow specialization for files, treatment, treatment request url(r'show-administrativeact(?:/(?P<pk>.+))?/(?P<type>.+)?$', 'show_administrativeact', name='show-administrativeactfile'), + url(r'show-administrativeact(?:/(?P<pk>.+))?/(?P<type>.+)?$', + 'show_administrativeact', name='show-administrativeacttreatment'), + url(r'show-administrativeact(?:/(?P<pk>.+))?/(?P<type>.+)?$', + 'show_administrativeact', name='show-administrativeacttreatmentfile'), url(r'generatedoc-administrativeactop/(?P<pk>.+)?/(?P<template_pk>.+)?$', 'generatedoc_administrativeactop', name='generatedoc-administrativeactop'), diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py index 18d57e617..005fae0db 100644 --- a/archaeological_operations/views.py +++ b/archaeological_operations/views.py @@ -163,8 +163,8 @@ def dashboard_operation(request, *args, **kwargs): return render_to_response('ishtar/dashboards/dashboard_operation.html', dct, context_instance=RequestContext(request)) -operation_search_wizard = SearchWizard.as_view([ - ('general-operation_search', OperationFormSelection)], +operation_search_wizard = SearchWizard.as_view( + [('general-operation_search', OperationFormSelection)], label=_(u"Operation search"), url_name='operation_search',) @@ -276,9 +276,14 @@ operation_closing_wizard = OperationClosingWizard.as_view( label=_(u"Operation closing"), url_name='operation_closing',) -operation_deletion_wizard = OperationDeletionWizard.as_view([ + +operation_deletion_steps = [ ('selec-operation_deletion', OperationFormSelection), - ('final-operation_deletion', OperationDeletionForm)], + ('final-operation_deletion', OperationDeletionForm) +] + +operation_deletion_wizard = OperationDeletionWizard.as_view( + operation_deletion_steps, label=_(u"Operation deletion"), url_name='operation_deletion',) @@ -404,17 +409,30 @@ def generatedoc_administrativeactop(request, pk, template_pk=None): return HttpResponse(mimetype='text/plain') -def administrativeactfile_document(request, operation=True): +def administrativeactfile_document( + request, file=False, treatment=False, treatment_file=False): search_form = AdministrativeActOpeFormSelection - if not operation: + document_type = 'O' + if file: from archaeological_files.forms import \ AdministrativeActFileFormSelection search_form = AdministrativeActFileFormSelection + document_type = 'F' + elif treatment: + from archaeological_finds.forms import \ + AdministrativeActTreatmentFormSelection + search_form = AdministrativeActTreatmentFormSelection + document_type = 'T' + elif treatment_file: + from archaeological_finds.forms import \ + AdministrativeActTreatmentFileFormSelection + search_form = AdministrativeActTreatmentFileFormSelection + document_type = 'TF' dct = {} if request.POST: dct['search_form'] = search_form(request.POST) dct['template_form'] = DocumentGenerationAdminActForm( - operation=operation) + document_type=document_type) c_object = None try: if dct['search_form'].is_valid(): @@ -425,7 +443,7 @@ def administrativeactfile_document(request, operation=True): pass if c_object: dct['template_form'] = DocumentGenerationAdminActForm( - request.POST, operation=operation, obj=c_object) + request.POST, document_type=document_type, obj=c_object) if dct['template_form'].is_valid(): return generatedoc_administrativeactop( request, @@ -434,7 +452,7 @@ def administrativeactfile_document(request, operation=True): else: dct['search_form'] = search_form() dct['template_form'] = DocumentGenerationAdminActForm( - operation=operation) + document_type=document_type) return render_to_response('ishtar/administrativeact_document.html', dct, context_instance=RequestContext(request)) diff --git a/archaeological_operations/wizards.py b/archaeological_operations/wizards.py index 572a25ca0..94aafb87c 100644 --- a/archaeological_operations/wizards.py +++ b/archaeological_operations/wizards.py @@ -17,6 +17,8 @@ # See the file COPYING for details. +import logging + from django.conf import settings from django.core.exceptions import ObjectDoesNotExist from django.core.urlresolvers import reverse @@ -33,6 +35,8 @@ from forms import GenerateDocForm from archaeological_files.models import File +logger = logging.getLogger(__name__) + class OperationWizard(Wizard): model = models.Operation @@ -73,7 +77,7 @@ class OperationWizard(Wizard): def get_reminder(self): archaeological_file = self.get_current_file() if archaeological_file: - return ((_("Archaelogical file"), + return ((_("Archaeological file"), unicode(archaeological_file)),) def get_context_data(self, form, **kwargs): @@ -86,7 +90,7 @@ class OperationWizard(Wizard): if step.startswith('towns'): context['TOWNS'] = self.get_towns() elif step.startswith('parcels-') and self.get_current_file(): - # if a file is acciated to the operation add the button "Add all" + # if a file is associated to the operation add the button "Add all" context['add_all'] = True if step.startswith('parcels') and \ hasattr(self, 'automatic_parcel_association'): @@ -189,14 +193,14 @@ class OperationWizard(Wizard): def get_formated_datas(self, forms): """ - Show a specific warning if no archaelogical file is provided + Show a specific warning if no archaeological file is provided """ datas = super(OperationWizard, self).get_formated_datas(forms) # if the general town form is used the advertissement is relevant has_no_af = [form.prefix for form in forms if form.prefix == 'townsgeneral-operation'] and True if has_no_af: - datas = [[_(u"Warning: No Archaelogical File is provided. " + datas = [[_(u"Warning: No Archaeological File is provided. " u"If you have forget it return to the first step."), []]]\ + datas return datas @@ -245,7 +249,7 @@ class OperationWizard(Wizard): request = self.request post_data = request.POST.copy() - # add all parcel from available in the archaelogical file + # add all parcel from available in the archaeological file if not post_data.get('add_all_parcels'): return super(OperationWizard, self).post(*args, **kwargs) @@ -327,6 +331,7 @@ class OperationAdministrativeActWizard(OperationWizard): edit = False wizard_done_window = reverse_lazy('show-administrativeact') current_obj_slug = 'administrativeactop' + ref_object_key = 'operation' def get_reminder(self): form_key = 'selec-' + self.url_name @@ -389,11 +394,9 @@ class OperationAdministrativeActWizard(OperationWizard): else: associated_item = self.get_associated_item(dct) if not associated_item: + logger.warning("Admin act save: no associated model") return self.render(form_list[-1]) - if isinstance(associated_item, File): - dct['associated_file'] = associated_item - elif isinstance(associated_item, models.Operation): - dct['operation'] = associated_item + dct[self.ref_object_key] = associated_item admact = models.AdministrativeAct(**dct) admact.save() dct['item'] = admact diff --git a/archaeological_warehouse/admin.py b/archaeological_warehouse/admin.py index cf71dbab6..911809d0f 100644 --- a/archaeological_warehouse/admin.py +++ b/archaeological_warehouse/admin.py @@ -48,6 +48,6 @@ class ContainerAdmin(admin.ModelAdmin): admin.site.register(models.Container, ContainerAdmin) -general_models = [models.WarehouseType] +general_models = [models.WarehouseType, models.WarehouseDivision] for model in general_models: admin.site.register(model, GeneralTypeAdmin) diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py index b34be3ab3..e91d04d61 100644 --- a/archaeological_warehouse/forms.py +++ b/archaeological_warehouse/forms.py @@ -19,6 +19,7 @@ from django import forms from django.conf import settings +from django.forms.formsets import formset_factory from django.utils.translation import ugettext_lazy as _ from ishtar_common.models import Person, valid_id @@ -26,7 +27,7 @@ from archaeological_finds.models import TreatmentType, FindBasket import models from ishtar_common import widgets from ishtar_common.forms import name_validator, reverse_lazy, \ - get_form_selection, TableSelect, ManageOldType + get_form_selection, TableSelect, ManageOldType, FinalForm from archaeological_finds.forms import FindMultipleFormSelection, \ SelectFindBasketForm @@ -39,7 +40,58 @@ def get_warehouse_field(label=_(u"Warehouse"), required=True): validators=[valid_id(models.Warehouse)]) +class SelectedDivisionForm(ManageOldType, forms.Form): + form_label = _(u"Division") + base_model = 'associated_division' + associated_models = {'division': models.WarehouseDivision, + 'associated_division': models.WarehouseDivisionLink} + division = forms.ChoiceField( + label=_(u"Division"), choices=(), required=False, + validators=[valid_id(models.WarehouseDivision)]) + order = forms.IntegerField(_(u"Order"), initial=10, required=False) + + def __init__(self, *args, **kwargs): + super(SelectedDivisionForm, self).__init__(*args, **kwargs) + self.fields['division'].choices = \ + models.WarehouseDivision.get_types( + initial=self.init_data.get('division') + ) + +SelectedDivisionFormset = formset_factory( + SelectedDivisionForm, can_delete=True) +SelectedDivisionFormset.form_label = _(u"Divisions") + + +class WarehouseSelect(TableSelect): + name = forms.CharField(label=_(u"Name")) + warehouse_type = forms.ChoiceField(label=_(u"Warehouse type"), choices=[]) + towns = forms.CharField(label=_(u"Town")) + + def __init__(self, *args, **kwargs): + super(WarehouseSelect, self).__init__(*args, **kwargs) + self.fields['warehouse_type'].choices = \ + models.WarehouseType.get_types() + self.fields['warehouse_type'].help_text = \ + models.WarehouseType.get_help() + + +class WarehouseFormSelection(forms.Form): + form_label = _("Warehouse search") + associated_models = {'pk': models.Warehouse} + currents = {'pk': models.Warehouse} + pk = forms.IntegerField( + label="", required=False, + widget=widgets.JQueryJqGrid( + reverse_lazy('get-warehouse'), + WarehouseSelect, models.Warehouse), + validators=[valid_id(models.Warehouse)]) + + class WarehouseForm(ManageOldType, forms.Form): + form_label = _(u"Warehouse") + associated_models = {'warehouse_type': models.WarehouseType, + 'person_in_charge': Person} + name = forms.CharField(label=_(u"Name"), max_length=40, validators=[name_validator]) warehouse_type = forms.ChoiceField(label=_(u"Warehouse type"), @@ -48,8 +100,8 @@ class WarehouseForm(ManageOldType, forms.Form): label=_(u"Person in charge"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-person'), - associated_model=models.Person), - validators=[valid_id(models.Person)], + associated_model=Person), + validators=[valid_id(Person)], required=False) comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea, required=False) @@ -63,7 +115,7 @@ class WarehouseForm(ManageOldType, forms.Form): country = forms.CharField(label=_(u"Country"), max_length=30, required=False) phone = forms.CharField(label=_(u"Phone"), max_length=18, required=False) - mobile_phone = forms.CharField(label=_(u"Town"), max_length=18, + mobile_phone = forms.CharField(label=_(u"Mobile phone"), max_length=18, required=False) def __init__(self, *args, **kwargs): @@ -89,12 +141,26 @@ class WarehouseForm(ManageOldType, forms.Form): return new_item +class WarehouseDeletionForm(FinalForm): + confirm_msg = _(u"Would you like to delete this warehouse?") + confirm_end_msg = _(u"Would you like to delete this warehouse?") + + class ContainerForm(ManageOldType, forms.Form): form_label = _(u"Container") + associated_models = {'container_type': models.ContainerType, + 'location': models.Warehouse, + 'responsible': models.Warehouse} reference = forms.CharField(label=_(u"Ref.")) container_type = forms.ChoiceField(label=_(u"Container type"), choices=[]) location = forms.IntegerField( - label=_(u"Warehouse"), + label=_(u"Current location (warehouse)"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-warehouse'), + associated_model=models.Warehouse, new=True), + validators=[valid_id(models.Warehouse)]) + responsible = forms.IntegerField( + label=_(u"Responsible warehouse"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-warehouse'), associated_model=models.Warehouse, new=True), @@ -123,6 +189,31 @@ class ContainerForm(ManageOldType, forms.Form): return new_item +class ContainerModifyForm(ContainerForm): + pk = forms.IntegerField(required=False, widget=forms.HiddenInput) + index = forms.IntegerField(_(u"Index")) + + def __init__(self, *args, **kwargs): + super(ContainerModifyForm, self).__init__(*args, **kwargs) + self.fields.keyOrder.pop(self.fields.keyOrder.index('index')) + self.fields.keyOrder.insert( + self.fields.keyOrder.index("location") + 1, 'index') + + def clean(self): + # manage unique ID + cleaned_data = self.cleaned_data + index = cleaned_data.get("index") + warehouse = cleaned_data.get("location") + q = models.Container.objects.filter( + index=index, location__pk=warehouse) + if 'pk' in cleaned_data and cleaned_data['pk']: + q = q.exclude(pk=int(cleaned_data['pk'])) + if q.count(): + raise forms.ValidationError(_(u"This ID already exists for " + u"this warehouse.")) + return cleaned_data + + class ContainerSelect(TableSelect): location = get_warehouse_field() container_type = forms.ChoiceField(label=_(u"Container type"), choices=[]) @@ -141,6 +232,12 @@ ContainerFormSelection = get_form_selection( _(u"You should select a container."), new=True, new_message=_(u"Add a new container")) +MainContainerFormSelection = get_form_selection( + 'ContainerFormSelection', _(u"Container search"), 'pk', + models.Container, ContainerSelect, 'get-container', + _(u"You should select a container.") +) + class BasePackagingForm(SelectFindBasketForm): form_label = _(u"Packaging") @@ -148,7 +245,6 @@ class BasePackagingForm(SelectFindBasketForm): 'person': Person, 'location': models.Warehouse, 'basket': FindBasket} - treatment_type = forms.IntegerField(label="", widget=forms.HiddenInput) person = forms.IntegerField( label=_(u"Packager"), widget=widgets.JQueryAutoComplete( @@ -158,11 +254,35 @@ class BasePackagingForm(SelectFindBasketForm): start_date = forms.DateField( label=_(u"Date"), required=False, widget=widgets.JQueryDate) - def __init__(self, *args, **kwargs): - super(BasePackagingForm, self).__init__(*args, **kwargs) - self.fields['treatment_type'].initial = \ - TreatmentType.objects.get(txt_idx='packaging').pk - class FindPackagingFormSelection(FindMultipleFormSelection): form_label = _(u"Packaged finds") + + +class LocalisationForm(forms.Form): + form_label = _(u"Localisation") + + def __init__(self, *args, **kwargs): + container, warehouse = None, None + if 'warehouse' in kwargs: + warehouse = kwargs.pop('warehouse') + if 'container' in kwargs: + container = kwargs.pop('container') + super(LocalisationForm, self).__init__(*args, **kwargs) + if not warehouse: + return + for divlink in warehouse.warehousedivisionlink_set.order_by( + 'order').all(): + initial = u"-" + if container: + q = models.ContainerLocalisation.objects.filter( + division=divlink, container=container) + if q.count(): + initial = q.all()[0].reference + self.fields['division_{}'.format(divlink.pk)] = forms.CharField( + label=str(divlink.division), max_length=200, initial=initial) + + +class ContainerDeletionForm(FinalForm): + confirm_msg = _(u"Would you like to delete this container?") + confirm_end_msg = _(u"Would you like to delete this container?") diff --git a/archaeological_warehouse/ishtar_menu.py b/archaeological_warehouse/ishtar_menu.py index f9f0daf33..c240cba84 100644 --- a/archaeological_warehouse/ishtar_menu.py +++ b/archaeological_warehouse/ishtar_menu.py @@ -23,29 +23,60 @@ from ishtar_common.menu_base import SectionItem, MenuItem from archaeological_finds.models import Treatment +import models + # be carreful: each access_controls must be relevant with check_rights in urls MENU_SECTIONS = [ - (60, SectionItem('find_management', _(u"Find"), + (70, SectionItem('treatment_management', _(u"Treatment"), profile_restriction='warehouse', childs=[ MenuItem('warehouse_packaging', _(u"Packaging"), model=Treatment, access_controls=['add_treatment', 'add_own_treatment']), ])), + (80, SectionItem('warehouse', _(u"Warehouse"), + profile_restriction='warehouse', + childs=[ + MenuItem('warehouse_search', _(u"Search"), + model=models.Warehouse, + access_controls=['view_warehouse',]), + MenuItem('warehouse_creation', _(u"Creation"), + model=models.Warehouse, + access_controls=['add_warehouse',]), + MenuItem('warehouse_modification', _(u"Modification"), + model=models.Warehouse, + access_controls=['change_warehouse',]), + MenuItem('warehouse_deletion', _(u"Deletion"), + model=models.Warehouse, + access_controls=['change_warehouse',]), + SectionItem( + 'containers', _(u"Containers"), + childs=[ + MenuItem('container_search', _(u"Search"), + model=models.Warehouse, + access_controls=['change_warehouse',]), + MenuItem('container_creation', _(u"Creation"), + model=models.Warehouse, + access_controls=['change_warehouse',]), + MenuItem('container_modification', _(u"Modification"), + model=models.Warehouse, + access_controls=['change_warehouse',]), + MenuItem('container_deletion', _(u"Deletion"), + model=models.Warehouse, + access_controls=['change_warehouse',]), + ]) + ])) ] """ - (60, SectionItem('warehouse', _(u"Warehouse"), - childs=[ - MenuItem('warehouse_inventory', _(u"Inventory"), - model=models.Warehouse, - access_controls=['change_warehouse',]), - MenuItem('warehouse_recording', _(u"Recording"), - model=Treatment, - access_controls=['add_treatment', 'add_own_treatment']), - MenuItem('warehouse_lend', _(u"Lending"), - model=Treatment, - access_controls=['add_treatment', 'add_own_treatment']), - ])) + MenuItem('warehouse_inventory', _(u"Inventory"), + model=models.Warehouse, + access_controls=['change_warehouse',]), + MenuItem('warehouse_recording', _(u"Recording"), + model=Treatment, + access_controls=['add_treatment', 'add_own_treatment']), + MenuItem('warehouse_lend', _(u"Lending"), + model=Treatment, + access_controls=['add_treatment', 'add_own_treatment']), """ diff --git a/archaeological_warehouse/locale/django.pot b/archaeological_warehouse/locale/django.pot index 7155bb63e..82deac273 100644 --- a/archaeological_warehouse/locale/django.pot +++ b/archaeological_warehouse/locale/django.pot @@ -3,149 +3,302 @@ # This file is distributed under the same license as the Ishtar package. # Étienne Loks <etienne.loks at peacefrogs net>, 2010-2011. # Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata +# Valérie-Emma Leroux <emma@iggdrasil.net>, 2017. #zanata msgid "" msgstr "" -#: forms.py:34 forms.py:97 models.py:47 models.py:87 +#: forms.py:35 forms.py:91 ishtar_menu.py:39 models.py:60 models.py:88 +#: templates/ishtar/sheet_warehouse.html:4 msgid "Warehouse" msgstr "" -#: forms.py:43 models.py:38 +#: forms.py:44 forms.py:49 models.py:234 +msgid "Division" +msgstr "" + +#: forms.py:51 models.py:112 +msgid "Order" +msgstr "" + +#: forms.py:62 models.py:53 +msgid "Divisions" +msgstr "" + +#: forms.py:66 forms.py:95 models.py:45 models.py:85 msgid "Name" msgstr "" -#: forms.py:45 models.py:30 models.py:40 +#: forms.py:67 forms.py:97 models.py:36 models.py:47 msgid "Warehouse type" msgstr "" -#: forms.py:48 models.py:43 +#: forms.py:68 forms.py:114 +msgid "Town" +msgstr "" + +#: forms.py:79 views.py:98 +msgid "Warehouse search" +msgstr "" + +#: forms.py:100 models.py:50 msgid "Person in charge" msgstr "" -#: forms.py:54 forms.py:102 models.py:44 models.py:91 +#: forms.py:106 forms.py:168 models.py:51 models.py:165 msgid "Comment" msgstr "" -#: forms.py:56 +#: forms.py:108 msgid "Address" msgstr "" -#: forms.py:58 +#: forms.py:110 msgid "Address complement" msgstr "" -#: forms.py:60 +#: forms.py:112 msgid "Postal code" msgstr "" -#: forms.py:62 forms.py:66 -msgid "Town" -msgstr "" - -#: forms.py:63 +#: forms.py:115 msgid "Country" msgstr "" -#: forms.py:65 +#: forms.py:117 msgid "Phone" msgstr "" -#: forms.py:93 models.py:94 +#: forms.py:118 +msgid "Mobile phone" +msgstr "" + +#: forms.py:145 forms.py:146 +msgid "Would you like to delete this warehouse?" +msgstr "" + +#: forms.py:150 models.py:173 models.py:232 +#: templates/ishtar/sheet_container.html:4 msgid "Container" msgstr "" -#: forms.py:94 forms.py:129 models.py:66 +#: forms.py:154 forms.py:220 models.py:127 msgid "Ref." msgstr "" -#: forms.py:95 forms.py:128 models.py:69 models.py:89 +#: forms.py:155 forms.py:219 models.py:130 models.py:163 msgid "Container type" msgstr "" -#: forms.py:139 +#: forms.py:157 +msgid "Current location (warehouse)" +msgstr "" + +#: forms.py:163 models.py:160 +msgid "Responsible warehouse" +msgstr "" + +#: forms.py:194 +msgid "Index" +msgstr "" + +#: forms.py:212 +msgid "This ID already exists for this warehouse." +msgstr "" + +#: forms.py:230 forms.py:236 views.py:127 msgid "Container search" msgstr "" -#: forms.py:141 +#: forms.py:232 forms.py:238 msgid "You should select a container." msgstr "" -#: forms.py:142 +#: forms.py:233 msgid "Add a new container" msgstr "" -#: forms.py:146 ishtar_menu.py:33 views.py:87 +#: forms.py:243 ishtar_menu.py:35 views.py:93 msgid "Packaging" msgstr "" -#: forms.py:153 +#: forms.py:249 msgid "Packager" msgstr "" -#: forms.py:159 +#: forms.py:255 msgid "Date" msgstr "" -#: forms.py:168 +#: forms.py:259 msgid "Packaged finds" msgstr "" -#: ishtar_menu.py:30 -msgid "Find" +#: forms.py:263 models.py:166 +msgid "Localisation" +msgstr "" + +#: forms.py:287 forms.py:288 +msgid "Would you like to delete this container?" +msgstr "" + +#: ishtar_menu.py:32 +msgid "Treatment" +msgstr "" + +#: ishtar_menu.py:42 ishtar_menu.py:57 +msgid "Search" +msgstr "" + +#: ishtar_menu.py:45 ishtar_menu.py:60 +msgid "Creation" msgstr "" -#: models.py:31 +#: ishtar_menu.py:48 ishtar_menu.py:63 +msgid "Modification" +msgstr "" + +#: ishtar_menu.py:51 ishtar_menu.py:66 +msgid "Deletion" +msgstr "" + +#: ishtar_menu.py:55 models.py:174 templates/ishtar/sheet_warehouse.html:17 +msgid "Containers" +msgstr "" + +#: models.py:37 msgid "Warehouse types" msgstr "" -#: models.py:48 +#: models.py:61 msgid "Warehouses" msgstr "" -#: models.py:50 +#: models.py:63 msgid "Can view all Warehouses" msgstr "" -#: models.py:51 +#: models.py:64 msgid "Can view own Warehouse" msgstr "" -#: models.py:52 +#: models.py:65 msgid "Can add own Warehouse" msgstr "" -#: models.py:53 +#: models.py:66 msgid "Can change own Warehouse" msgstr "" -#: models.py:54 +#: models.py:67 msgid "Can delete own Warehouse" msgstr "" -#: models.py:62 +#: models.py:87 +msgid "Description" +msgstr "" + +#: models.py:92 models.py:93 +msgid "Collection" +msgstr "" + +#: models.py:102 +msgid "Warehouse division" +msgstr "" + +#: models.py:103 +msgid "Warehouse divisions" +msgstr "" + +#: models.py:123 msgid "Length (mm)" msgstr "" -#: models.py:63 +#: models.py:124 msgid "Width (mm)" msgstr "" -#: models.py:64 +#: models.py:125 msgid "Height (mm)" msgstr "" -#: models.py:65 +#: models.py:126 msgid "Volume (l)" msgstr "" -#: models.py:70 +#: models.py:131 msgid "Container types" msgstr "" -#: models.py:90 +#: models.py:149 +msgid "Location - index" +msgstr "" + +#: models.py:150 +msgid "Precise localisation" +msgstr "" + +#: models.py:151 +msgid "Type" +msgstr "" + +#: models.py:157 +msgid "Location (warehouse)" +msgstr "" + +#: models.py:164 msgid "Container ref." msgstr "" -#: models.py:95 -msgid "Containers" +#: models.py:168 +msgid "Cached location" +msgstr "" + +#: models.py:235 +msgid "Reference" +msgstr "" + +#: models.py:238 +msgid "Container localisation" +msgstr "" + +#: models.py:239 +msgid "Container localisations" +msgstr "" + +#: views.py:106 +msgid "Warehouse creation" +msgstr "" + +#: views.py:115 +msgid "Warehouse modification" +msgstr "" + +#: views.py:122 +msgid "Warehouse deletion" +msgstr "" + +#: views.py:135 +msgid "Container creation" +msgstr "" + +#: views.py:144 +msgid "Container modification" +msgstr "" + +#: views.py:151 +msgid "Container deletion" +msgstr "" + +#: templates/ishtar/sheet_container.html:19 +msgid "Content" +msgstr "" + +#: templates/ishtar/sheet_warehouse.html:22 +msgid "Attached containers" +msgstr "" + +#: templates/ishtar/wizard/wizard_containerlocalisation.html:5 +msgid "" +"No division set for this warehouse. Define it to localise container in this " +"warehouse." msgstr "" diff --git a/archaeological_warehouse/migrations/0003_auto__add_warehousedivisionlink__add_unique_warehousedivisionlink_ware.py b/archaeological_warehouse/migrations/0003_auto__add_warehousedivisionlink__add_unique_warehousedivisionlink_ware.py new file mode 100644 index 000000000..77957834c --- /dev/null +++ b/archaeological_warehouse/migrations/0003_auto__add_warehousedivisionlink__add_unique_warehousedivisionlink_ware.py @@ -0,0 +1,414 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'WarehouseDivisionLink' + db.create_table('archaeological_warehouse_warehousedivisionlink', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('warehouse', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['archaeological_warehouse.Warehouse'])), + ('division', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['archaeological_warehouse.WarehouseDivision'])), + ('order', self.gf('django.db.models.fields.IntegerField')(default=10)), + )) + db.send_create_signal('archaeological_warehouse', ['WarehouseDivisionLink']) + + # Adding unique constraint on 'WarehouseDivisionLink', fields ['warehouse', 'division'] + db.create_unique('archaeological_warehouse_warehousedivisionlink', ['warehouse_id', 'division_id']) + + # Adding model 'Collection' + db.create_table('archaeological_warehouse_collection', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('history_modifier', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='+', null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('history_creator', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='+', null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('history_date', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)), + ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('warehouse', self.gf('django.db.models.fields.related.ForeignKey')(related_name='collections', to=orm['archaeological_warehouse.Warehouse'])), + )) + db.send_create_signal('archaeological_warehouse', ['Collection']) + + # Adding M2M table for field imports on 'Collection' + db.create_table('archaeological_warehouse_collection_imports', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('collection', models.ForeignKey(orm['archaeological_warehouse.collection'], null=False)), + ('import', models.ForeignKey(orm['ishtar_common.import'], null=False)) + )) + db.create_unique('archaeological_warehouse_collection_imports', ['collection_id', 'import_id']) + + # Adding model 'WarehouseDivision' + db.create_table('archaeological_warehouse_warehousedivision', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('label', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('txt_idx', self.gf('django.db.models.fields.CharField')(unique=True, max_length=100)), + ('comment', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('available', self.gf('django.db.models.fields.BooleanField')(default=True)), + )) + db.send_create_signal('archaeological_warehouse', ['WarehouseDivision']) + + # Adding model 'ContainerLocalisation' + db.create_table('archaeological_warehouse_containerlocalisation', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('container', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['archaeological_warehouse.Container'])), + ('division', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['archaeological_warehouse.WarehouseDivisionLink'])), + ('reference', self.gf('django.db.models.fields.CharField')(default='', max_length=200)), + )) + db.send_create_signal('archaeological_warehouse', ['ContainerLocalisation']) + + # Adding unique constraint on 'ContainerLocalisation', fields ['container', 'division'] + db.create_unique('archaeological_warehouse_containerlocalisation', ['container_id', 'division_id']) + + + # Changing field 'Warehouse.name' + db.alter_column('archaeological_warehouse_warehouse', 'name', self.gf('django.db.models.fields.CharField')(max_length=200)) + # Adding field 'Container.responsible' + db.add_column('archaeological_warehouse_container', 'responsible', + self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='owned_containers', null=True, to=orm['archaeological_warehouse.Warehouse']), + keep_default=False) + + # Adding field 'Container.cached_label' + db.add_column('archaeological_warehouse_container', 'cached_label', + self.gf('django.db.models.fields.CharField')(max_length=500, null=True, blank=True), + keep_default=False) + + # Adding field 'Container.cached_location' + db.add_column('archaeological_warehouse_container', 'cached_location', + self.gf('django.db.models.fields.CharField')(max_length=500, null=True, blank=True), + keep_default=False) + + # Adding field 'Container.index' + db.add_column('archaeological_warehouse_container', 'index', + self.gf('django.db.models.fields.IntegerField')(default=0), + keep_default=False) + + + # Changing field 'Container.comment' + db.alter_column('archaeological_warehouse_container', 'comment', self.gf('django.db.models.fields.TextField')(null=True)) + # Adding unique constraint on 'Container', fields ['index', 'location'] + db.create_unique('archaeological_warehouse_container', ['index', 'location_id']) + + + def backwards(self, orm): + # Removing unique constraint on 'Container', fields ['index', 'location'] + db.delete_unique('archaeological_warehouse_container', ['index', 'location_id']) + + # Removing unique constraint on 'ContainerLocalisation', fields ['container', 'division'] + db.delete_unique('archaeological_warehouse_containerlocalisation', ['container_id', 'division_id']) + + # Removing unique constraint on 'WarehouseDivisionLink', fields ['warehouse', 'division'] + db.delete_unique('archaeological_warehouse_warehousedivisionlink', ['warehouse_id', 'division_id']) + + # Deleting model 'WarehouseDivisionLink' + db.delete_table('archaeological_warehouse_warehousedivisionlink') + + # Deleting model 'Collection' + db.delete_table('archaeological_warehouse_collection') + + # Removing M2M table for field imports on 'Collection' + db.delete_table('archaeological_warehouse_collection_imports') + + # Deleting model 'WarehouseDivision' + db.delete_table('archaeological_warehouse_warehousedivision') + + # Deleting model 'ContainerLocalisation' + db.delete_table('archaeological_warehouse_containerlocalisation') + + + # Changing field 'Warehouse.name' + db.alter_column('archaeological_warehouse_warehouse', 'name', self.gf('django.db.models.fields.CharField')(max_length=40)) + # Deleting field 'Container.responsible' + db.delete_column('archaeological_warehouse_container', 'responsible_id') + + # Deleting field 'Container.cached_label' + db.delete_column('archaeological_warehouse_container', 'cached_label') + + # Deleting field 'Container.cached_location' + db.delete_column('archaeological_warehouse_container', 'cached_location') + + # Deleting field 'Container.index' + db.delete_column('archaeological_warehouse_container', 'index') + + + # User chose to not deal with backwards NULL issues for 'Container.comment' + raise RuntimeError("Cannot reverse this migration. 'Container.comment' and its values cannot be restored.") + + models = { + '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'}, + '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']"}), + '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', [], {'blank': 'True', 'related_name': "'owned_containers'", 'null': 'True', 'to': "orm['archaeological_warehouse.Warehouse']"}) + }, + 'archaeological_warehouse.containerlocalisation': { + 'Meta': {'ordering': "('container', 'division__order')", 'unique_together': "(('container', 'division'),)", 'object_name': 'ContainerLocalisation'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_warehouse.Container']"}), + 'division': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_warehouse.WarehouseDivisionLink']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'reference': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '200'}) + }, + '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.IntegerField', [], {'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'}), + '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'}), + '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.import': { + 'Meta': {'object_name': 'Import'}, + 'conservative_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'encoding': ('django.db.models.fields.CharField', [], {'default': "'utf-8'", 'max_length': '15'}), + 'end_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'error_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.ImporterType']"}), + 'match_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'seconds_remaining': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'skip_lines': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'state': ('django.db.models.fields.CharField', [], {'default': "'C'", 'max_length': '2'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']"}) + }, + 'ishtar_common.importertype': { + 'Meta': {'object_name': 'ImporterType'}, + 'associated_models': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_template': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '100', 'unique': 'True', 'null': 'True', 'blank': 'True'}), + 'unicity_keys': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.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.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.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'}) + } + } + + complete_apps = ['archaeological_warehouse']
\ No newline at end of file diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py index 389cc4f5a..c3c159550 100644 --- a/archaeological_warehouse/models.py +++ b/archaeological_warehouse/models.py @@ -17,10 +17,16 @@ # See the file COPYING for details. -from django.db.models.signals import post_save, post_delete +import datetime + +from django.conf import settings from django.contrib.gis.db import models +from django.db.models.signals import post_save, post_delete +from django.template.defaultfilters import slugify from django.utils.translation import ugettext_lazy as _, ugettext +from ishtar_common.utils import cached_label_changed + from ishtar_common.models import GeneralType, \ LightHistorizedItem, OwnPerms, Address, Person, post_save_cache @@ -35,13 +41,20 @@ post_delete.connect(post_save_cache, sender=WarehouseType) class Warehouse(Address, OwnPerms): - name = models.CharField(_(u"Name"), max_length=40) + SHOW_URL = 'show-warehouse' + name = models.CharField(_(u"Name"), max_length=200) warehouse_type = models.ForeignKey(WarehouseType, verbose_name=_(u"Warehouse type")) person_in_charge = models.ForeignKey( Person, on_delete=models.SET_NULL, related_name='warehouse_in_charge', verbose_name=_(u"Person in charge"), null=True, blank=True) comment = models.TextField(_(u"Comment"), null=True, blank=True) + associated_divisions = models.ManyToManyField( + 'WarehouseDivision', verbose_name=_("Divisions"), blank=True, + through='WarehouseDivisionLink' + ) + + TABLE_COLS = ['name', 'warehouse_type'] class Meta: verbose_name = _(u"Warehouse") @@ -57,6 +70,54 @@ class Warehouse(Address, OwnPerms): def __unicode__(self): return u"%s (%s)" % (self.name, unicode(self.warehouse_type)) + @property + def associated_filename(self): + return datetime.date.today().strftime('%Y-%m-%d') + '-' + \ + slugify(unicode(self)) + + def save(self, *args, **kwargs): + super(Warehouse, self).save(*args, **kwargs) + for container in self.containers.all(): + cached_label_changed(Container, instance=container) + + +class Collection(LightHistorizedItem): + name = models.CharField(_(u"Name"), max_length=200, + null=True, blank=True) + description = models.TextField(_(u"Description"), null=True, blank=True) + warehouse = models.ForeignKey(Warehouse, verbose_name=_(u"Warehouse"), + related_name='collections') + + class Meta: + verbose_name = _(u"Collection") + verbose_name_plural = _(u"Collection") + ordering = ('name',) + + def __unicode__(self): + return self.name + + +class WarehouseDivision(GeneralType): + class Meta: + verbose_name = _(u"Warehouse division") + verbose_name_plural = _(u"Warehouse divisions") +post_save.connect(post_save_cache, sender=WarehouseDivision) +post_delete.connect(post_save_cache, sender=WarehouseDivision) + + +class WarehouseDivisionLink(models.Model): + RELATIVE_MODELS = {Warehouse: 'warehouse'} + warehouse = models.ForeignKey(Warehouse) + division = models.ForeignKey(WarehouseDivision) + order = models.IntegerField(_("Order"), default=10) + + class Meta: + ordering = ('warehouse', 'order') + unique_together = ('warehouse', 'division') + + def __unicode__(self): + return u"{} - {}".format(self.warehouse, self.division) + class ContainerType(GeneralType): length = models.IntegerField(_(u"Length (mm)"), blank=True, null=True) @@ -74,7 +135,8 @@ post_delete.connect(post_save_cache, sender=ContainerType) class Container(LightHistorizedItem): - TABLE_COLS = ['reference', 'container_type', 'location'] + TABLE_COLS = ['reference', 'container_type__label', 'cached_location', + 'divisions_lbl'] # search parameters EXTRA_REQUEST_KEYS = { @@ -82,19 +144,107 @@ class Container(LightHistorizedItem): 'container_type': 'container_type__pk', 'reference': 'reference__icontains', } + SHOW_URL = 'show-container' + COL_LABELS = { + 'cached_location': _(u"Location - index"), + 'divisions_lbl': _(u"Precise localisation"), + 'container_type__label': _(u"Type") + } + CACHED_LABELS = ['cached_label', 'cached_location'] # fields - location = models.ForeignKey(Warehouse, verbose_name=_(u"Warehouse")) + location = models.ForeignKey( + Warehouse, verbose_name=_(u"Location (warehouse)"), + related_name='containers') + responsible = models.ForeignKey( + Warehouse, verbose_name=_(u"Responsible warehouse"), + related_name='owned_containers', blank=True, null=True) container_type = models.ForeignKey(ContainerType, verbose_name=_("Container type")) reference = models.CharField(_(u"Container ref."), max_length=40) - comment = models.TextField(_(u"Comment")) + comment = models.TextField(_(u"Comment"), null=True, blank=True) + cached_label = models.CharField(_(u"Localisation"), max_length=500, + null=True, blank=True) + cached_location = models.CharField(_(u"Cached location"), max_length=500, + null=True, blank=True) + index = models.IntegerField(u"Index", default=0) class Meta: verbose_name = _(u"Container") verbose_name_plural = _(u"Containers") + ordering = ('cached_label',) + unique_together = ('index', 'location') def __unicode__(self): - lbl = u" - ".join((self.reference, unicode(self.container_type), - unicode(self.location))) + lbl = u"{} ({})".format(self.reference, self.container_type) return lbl + + def _generate_cached_label(self): + items = [self.reference, self.precise_location] + cached_label = u" | ".join(items) + return cached_label + + def _generate_cached_location(self): + items = [self.location.name, unicode(self.index)] + cached_label = u" - ".join(items) + return cached_label + + @property + def associated_filename(self): + filename = datetime.date.today().strftime('%Y-%m-%d') + filename += u'-' + self.reference + filename += u"-" + self.location.name + filename += u"-" + unicode(self.index) + filename += u"-" + self.divisions_lbl + return slugify(filename) + + @property + def precise_location(self): + return self.location.name + u" - " + self.divisions_lbl + + @property + def divisions_lbl(self): + locas = [ + u"{} {}".format(loca.division.division, loca.reference) + for loca in ContainerLocalisation.objects.filter( + container=self) + ] + return u" | ".join(locas) + + def save(self, *args, **kwargs): + super(Container, self).save(*args, **kwargs) + + if not self.index: + self.skip_history_when_saving = True + q = Container.objects.filter(location=self.location).order_by( + '-index') + if q.count(): + self.index = q.all()[0].index + 1 + else: + self.index = 1 + self._cached_label_checked = False + self.save() + +post_save.connect(cached_label_changed, sender=Container) + + +class ContainerLocalisation(models.Model): + container = models.ForeignKey(Container, verbose_name=_(u"Container")) + division = models.ForeignKey(WarehouseDivisionLink, + verbose_name=_(u"Division")) + reference = models.CharField(_(u"Reference"), max_length=200, default='') + + class Meta: + verbose_name = _(u"Container localisation") + verbose_name_plural = _(u"Container localisations") + unique_together = ('container', 'division') + ordering = ('container', 'division__order') + + def __unicode__(self): + lbl = u" - ".join((unicode(self.container), + unicode(self.division), self.reference)) + return lbl + + def save(self, *args, **kwargs): + super(ContainerLocalisation, self).save(*args, **kwargs) + cached_label_changed(Container, instance=self.container) diff --git a/archaeological_warehouse/templates/ishtar/sheet_container.html b/archaeological_warehouse/templates/ishtar/sheet_container.html new file mode 100644 index 000000000..4a7b2f0b9 --- /dev/null +++ b/archaeological_warehouse/templates/ishtar/sheet_container.html @@ -0,0 +1,23 @@ +{% extends "ishtar/sheet.html" %} +{% load i18n window_header window_field window_tables %} + +{% block head_title %}{% trans "Container" %}{% endblock %} + +{% block content %} +{% window_nav item window_id 'show-container' '' '' '' previous next 1 %} + +<ul class='form-flex'> + {% field_li "Reference" item.reference %} + {% field_li "Container type" item.container_type %} + {% field_li_detail "Responsible warehouse" item.responsible %} + {% field_li_detail "Location (warehouse)" item.location %} +</ul> +{% field "Location" item.precise_location %} +{% field "Comment" item.comment "<pre>" "</pre>" %} + +{% if item.finds.count %} +<h4>{% trans "Content" %}</h4> +{% dynamic_table_document finds 'finds' 'container' item.pk 'TABLE_COLS' output 'large' %} +{% endif %} + +{% endblock %} diff --git a/archaeological_warehouse/templates/ishtar/sheet_container_pdf.html b/archaeological_warehouse/templates/ishtar/sheet_container_pdf.html new file mode 100644 index 000000000..5e4947cfa --- /dev/null +++ b/archaeological_warehouse/templates/ishtar/sheet_container_pdf.html @@ -0,0 +1,18 @@ +{% extends "ishtar/sheet_container.html" %} +{% block header %} +<link rel="stylesheet" href="{{STATIC_URL}}/media/style_basic.css?ver={{VERSION}}" /> +{% endblock %} +{% block main_head %} +{{ block.super }} +<div id="pdfheader"> +Ishtar – {{APP_NAME}} – {{item}} +</div> +{% endblock %} +{%block head_sheet%}{%endblock%} +{%block main_foot%} +<div id="pdffooter"> +– <pdf:pagenumber/> – +</div> +</body> +</html> +{%endblock%} diff --git a/archaeological_warehouse/templates/ishtar/sheet_container_window.html b/archaeological_warehouse/templates/ishtar/sheet_container_window.html new file mode 100644 index 000000000..28aeaf9aa --- /dev/null +++ b/archaeological_warehouse/templates/ishtar/sheet_container_window.html @@ -0,0 +1,3 @@ +{% extends "ishtar/sheet_container.html" %} +{% block main_head %}{%endblock%} +{% block main_foot %}{%endblock%} diff --git a/archaeological_warehouse/templates/ishtar/sheet_warehouse.html b/archaeological_warehouse/templates/ishtar/sheet_warehouse.html new file mode 100644 index 000000000..9fd022281 --- /dev/null +++ b/archaeological_warehouse/templates/ishtar/sheet_warehouse.html @@ -0,0 +1,26 @@ +{% extends "ishtar/sheet.html" %} +{% load i18n window_header window_field window_tables %} + +{% block head_title %}{% trans "Warehouse" %}{% endblock %} + +{% block content %} +{% window_nav item window_id 'show-warehouse' '' '' '' previous next 1 %} + +<ul class='form-flex'> + {% field_li "Name" item.name %} + {% field_li "Warehouse type" item.warehouse_type %} + {% field_li "Person in charge" item.person_in_charge %} +</ul> +{% field "Comment" item.comment "<pre>" "</pre>" %} + +{% if item.containers.count %} +<h4>{% trans "Containers" %}</h4> +{% dynamic_table_document '' 'containers' 'location' item.pk 'TABLE_COLS' output %} +{% endif %} + +{% if item.owned_containers.count %} +<h4>{% trans "Attached containers" %}</h4> +{% dynamic_table_document '' 'containers' 'responsible' item.pk 'TABLE_COLS' output %} +{% endif %} + +{% endblock %} diff --git a/archaeological_warehouse/templates/ishtar/sheet_warehouse_pdf.html b/archaeological_warehouse/templates/ishtar/sheet_warehouse_pdf.html new file mode 100644 index 000000000..260834ac6 --- /dev/null +++ b/archaeological_warehouse/templates/ishtar/sheet_warehouse_pdf.html @@ -0,0 +1,18 @@ +{% extends "ishtar/sheet_warehouse.html" %} +{% block header %} +<link rel="stylesheet" href="{{STATIC_URL}}/media/style_basic.css?ver={{VERSION}}" /> +{% endblock %} +{% block main_head %} +{{ block.super }} +<div id="pdfheader"> +Ishtar – {{APP_NAME}} – {{item}} +</div> +{% endblock %} +{%block head_sheet%}{%endblock%} +{%block main_foot%} +<div id="pdffooter"> +– <pdf:pagenumber/> – +</div> +</body> +</html> +{%endblock%} diff --git a/archaeological_warehouse/templates/ishtar/sheet_warehouse_window.html b/archaeological_warehouse/templates/ishtar/sheet_warehouse_window.html new file mode 100644 index 000000000..e77c2c2a3 --- /dev/null +++ b/archaeological_warehouse/templates/ishtar/sheet_warehouse_window.html @@ -0,0 +1,3 @@ +{% extends "ishtar/sheet_warehouse.html" %} +{% block main_head %}{%endblock%} +{% block main_foot %}{%endblock%} diff --git a/archaeological_warehouse/templates/ishtar/wizard/wizard_containerlocalisation.html b/archaeological_warehouse/templates/ishtar/wizard/wizard_containerlocalisation.html new file mode 100644 index 000000000..4a21368ae --- /dev/null +++ b/archaeological_warehouse/templates/ishtar/wizard/wizard_containerlocalisation.html @@ -0,0 +1,7 @@ +{% extends "ishtar/wizard/default_wizard.html" %} +{% load i18n %} +{% block form_head %} +{% if not wizard.form.fields %} +<p class='warning'>{% trans "No division set for this warehouse. Define it to localise container in this warehouse." %}</p> +{% endif %} +{% endblock %} diff --git a/archaeological_warehouse/urls.py b/archaeological_warehouse/urls.py index 9094f0a91..133d4ae79 100644 --- a/archaeological_warehouse/urls.py +++ b/archaeological_warehouse/urls.py @@ -19,8 +19,9 @@ from django.conf.urls.defaults import * -# from ishtar_common.wizards import check_rights +from ishtar_common.wizards import check_rights import views +from archaeological_warehouse import models # be carreful: each check_rights must be relevant with ishtar_menu @@ -35,12 +36,48 @@ urlpatterns += patterns( 'archaeological_warehouse.views', url(r'new-warehouse/(?P<parent_name>.+)?/$', 'new_warehouse', name='new-warehouse'), + url(r'^show-warehouse(?:/(?P<pk>.+))?/(?P<type>.+)?$', 'show_warehouse', + name=models.Warehouse.SHOW_URL), url(r'autocomplete-warehouse/$', 'autocomplete_warehouse', name='autocomplete-warehouse'), url(r'new-container/(?P<parent_name>.+)?/$', 'new_container', name='new-container'), url(r'get-container/$', 'get_container', name='get-container'), + url(r'get-warehouse/(?P<type>.+)?$', 'get_warehouse', + name='get-warehouse'), url(r'autocomplete-container/?$', 'autocomplete_container', name='autocomplete-container'), + url(r'^show-container(?:/(?P<pk>.+))?/(?P<type>.+)?$', 'show_container', + name=models.Container.SHOW_URL), + url(r'^warehouse_search/(?P<step>.+)?$', + check_rights(['view_warehouse', 'view_own_warehouse'])( + views.warehouse_search_wizard), name='warehouse_search'), + url(r'^warehouse_creation/(?P<step>.+)?$', + check_rights(['add_warehouse'])( + views.warehouse_creation_wizard), name='warehouse_creation'), + url(r'^warehouse_modification/(?P<step>.+)?$', + check_rights(['change_warehouse'])( + views.warehouse_modification_wizard), + name='warehouse_modification'), + url(r'^warehouse_deletion/(?P<step>.+)?$', + check_rights(['change_warehouse'])( + views.warehouse_deletion_wizard), + name='warehouse_deletion'), + url(r'^container_search/(?P<step>.+)?$', + check_rights(['change_warehouse'])( + views.container_search_wizard), + name='container_search'), + url(r'^container_creation/(?P<step>.+)?$', + check_rights(['change_warehouse'])( + views.container_creation_wizard), + name='container_creation'), + url(r'^container_modification/(?P<step>.+)?$', + check_rights(['change_warehouse'])( + views.container_modification_wizard), + name='container_modification'), + url(r'^container_deletion/(?P<step>.+)?$', + check_rights(['change_warehouse'])( + views.container_deletion_wizard), + name='container_deletion'), ) diff --git a/archaeological_warehouse/views.py b/archaeological_warehouse/views.py index d8027a9a6..35218cd07 100644 --- a/archaeological_warehouse/views.py +++ b/archaeological_warehouse/views.py @@ -23,13 +23,19 @@ from django.db.models import Q from django.http import HttpResponse from django.utils.translation import ugettext_lazy as _ -from ishtar_common.views import get_item, new_item import models + +from ishtar_common.views import get_item, new_item, show_item +from ishtar_common.wizards import SearchWizard from wizards import * from ishtar_common.forms import FinalForm from forms import * get_container = get_item(models.Container, 'get_container', 'container') +show_container = show_item(models.Container, 'container') + +get_warehouse = get_item(models.Warehouse, 'get_warehouse', 'warehouse') +show_warehouse = show_item(models.Warehouse, 'warehouse') new_warehouse = new_item(models.Warehouse, WarehouseForm) new_container = new_item(models.Container, ContainerForm) @@ -87,6 +93,64 @@ warehouse_packaging_wizard = PackagingWizard.as_view([ label=_(u"Packaging"), url_name='warehouse_packaging',) +warehouse_search_wizard = SearchWizard.as_view([ + ('selec-warehouse_search', WarehouseFormSelection)], + label=_(u"Warehouse search"), + url_name='warehouse_search', +) + +warehouse_creation_wizard = WarehouseWizard.as_view([ + ("warehouse-warehouse_creation", WarehouseForm), + ('divisions-warehouse_creation', SelectedDivisionFormset), + ('final-warehouse_creation', FinalForm)], + label=_(u"Warehouse creation"), + url_name='warehouse_creation', +) + +warehouse_modification_wizard = WarehouseModificationWizard.as_view([ + ('selec-warehouse_modification', WarehouseFormSelection), + ("warehouse-warehouse_modification", WarehouseForm), + ('divisions-warehouse_modification', SelectedDivisionFormset), + ('final-warehouse_modification', FinalForm)], + label=_(u"Warehouse modification"), + url_name='warehouse_modification', +) + +warehouse_deletion_wizard = WarehouseDeletionWizard.as_view([ + ('selec-warehouse_deletion', WarehouseFormSelection), + ('final-warehouse_deletion', WarehouseDeletionForm)], + label=_(u"Warehouse deletion"), + url_name='warehouse_deletion',) + +container_search_wizard = SearchWizard.as_view([ + ('selec-container_search', MainContainerFormSelection)], + label=_(u"Container search"), + url_name='container_search', +) + +container_creation_wizard = ContainerWizard.as_view([ + ('container-container_creation', ContainerForm), + ('localisation-container_creation', LocalisationForm), + ('final-container_creation', FinalForm)], + label=_(u"Container creation"), + url_name='container_creation', +) + +container_modification_wizard = ContainerModificationWizard.as_view([ + ('selec-container_modification', MainContainerFormSelection), + ('container-container_modification', ContainerModifyForm), + ('localisation-container_modification', LocalisationForm), + ('final-container_modification', FinalForm)], + label=_(u"Container modification"), + url_name='container_modification', +) + +container_deletion_wizard = ContainerDeletionWizard.as_view([ + ('selec-container_deletion', MainContainerFormSelection), + ('final-container_deletion', ContainerDeletionForm)], + label=_(u"Container deletion"), + url_name='container_deletion',) + """ warehouse_packaging_wizard = ItemSourceWizard.as_view([ ('selec-warehouse_packaging', ItemsSelection), diff --git a/archaeological_warehouse/wizards.py b/archaeological_warehouse/wizards.py index 62b441e00..817ed75a5 100644 --- a/archaeological_warehouse/wizards.py +++ b/archaeological_warehouse/wizards.py @@ -20,8 +20,12 @@ from django.shortcuts import render_to_response from django.template import RequestContext +from ishtar_common.forms import reverse_lazy +from ishtar_common.wizards import Wizard, DeletionWizard from archaeological_finds.wizards import TreatmentWizard -from archaeological_finds.models import Treatment + +from archaeological_finds.models import Treatment, TreatmentType +import models class PackagingWizard(TreatmentWizard): @@ -32,11 +36,98 @@ class PackagingWizard(TreatmentWizard): dct = self.get_extra_model(dct, form_list) obj = self.get_current_saved_object() dct['location'] = dct['container'].location - items = dct.pop('basket') + items = None + if 'items' in dct: + items = dct.pop('items') + if 'basket' in dct: + if not items: + items = dct.pop('basket') + else: + dct.pop('basket') treatment = Treatment(**dct) extra_args_for_new = {"container": dct['container']} treatment.save(items=items, user=self.request.user, extra_args_for_new=extra_args_for_new) + packaging = TreatmentType.objects.get(txt_idx='packaging') + treatment.treatment_types.add(packaging) res = render_to_response('ishtar/wizard/wizard_done.html', {}, context_instance=RequestContext(self.request)) return return_object and (obj, res) or res + + +class WarehouseWizard(Wizard): + model = models.Warehouse + wizard_done_window = reverse_lazy('show-warehouse') + + +class WarehouseModificationWizard(Wizard): + model = models.Warehouse + modification = True + wizard_done_window = reverse_lazy('show-warehouse') + + +class WarehouseDeletionWizard(DeletionWizard): + model = models.Warehouse + + +class ContainerWizard(Wizard): + model = models.Container + wizard_templates = { + 'localisation-container_localisation': + 'ishtar/wizard/wizard_containerlocalisation.html', + } + ignore_init_steps = ['localisation'] + + def get_form_kwargs(self, step=None): + kwargs = super(ContainerWizard, self).get_form_kwargs(step) + if step == 'localisation-' + self.url_name: + container_pk = self.session_get_value( + 'selec-' + self.url_name, 'pk') + q = models.Container.objects.filter(pk=container_pk) + if q.count(): + kwargs['container'] = q.all()[0] + warehouse_pk = self.session_get_value( + 'container-' + self.url_name, 'location') + q = models.Warehouse.objects.filter(pk=warehouse_pk) + if q.count(): + kwargs['warehouse'] = q.all()[0] + return kwargs + + def done(self, form_list, **kwargs): + """ + Save the localisation + """ + super(ContainerWizard, self).done(form_list) + for idx, form in enumerate(form_list): + if not form.is_valid(): + return self.render(form) + container = self.get_current_object() or self.current_object + if container and form.prefix == 'localisation-' + self.url_name: + for div_name in form.cleaned_data: + try: + division = models.WarehouseDivisionLink.objects.get( + pk=div_name.split('_')[-1], + warehouse=container.location + ) # check the localisation match with the container + except models.WarehouseDivisionLink.DoesNotExist: + return self.render(form) + localisation, created = \ + models.ContainerLocalisation.objects.get_or_create( + container=container, + division=division + ) + localisation.reference = form.cleaned_data[div_name] + localisation.save() + return render_to_response( + self.wizard_done_template, {}, + context_instance=RequestContext(self.request)) + + +class ContainerModificationWizard(ContainerWizard): + modification = True + + +class ContainerDeletionWizard(DeletionWizard): + model = models.Container + fields = ['container_type', 'reference', 'comment', 'location', 'index', + 'cached_label'] diff --git a/example_project/settings.py b/example_project/settings.py index a191b83b3..437c75673 100644 --- a/example_project/settings.py +++ b/example_project/settings.py @@ -229,6 +229,8 @@ OP_PREFIX = 'OP' PRE_APPS = [] EXTRA_APPS = [] +TEST_RUNNER = 'ishtar_common.tests.ManagedModelTestRunner' + try: from local_settings import * except ImportError, e: diff --git a/ishtar_common/fixtures/initial_importtypes-fr.json b/ishtar_common/fixtures/initial_importtypes-fr.json index 98703c8c9..0592ca60f 100644 --- a/ishtar_common/fixtures/initial_importtypes-fr.json +++ b/ishtar_common/fixtures/initial_importtypes-fr.json @@ -6,7 +6,8 @@ "description": "Import depuis la base filemaker du SRA PdL", "is_template": true, "unicity_keys": "code_patriarche", - "users": [], + "users": [ + ], "slug": "operatio", "associated_models": "archaeological_operations.models.Operation", "name": "OPERATIO - Op\u00e9rations" @@ -19,7 +20,8 @@ "description": "Test d'import depuis le DBF simplifi\u00e9 de patrairche", "is_template": true, "unicity_keys": null, - "users": [], + "users": [ + ], "slug": null, "associated_models": "archaeological_operations.models.Operation", "name": "OPE PATRIARCHE DBF simplifi\u00e9 (TEST)" @@ -32,7 +34,8 @@ "description": "Import simple d'UE (pas de relations)", "is_template": true, "unicity_keys": null, - "users": [], + "users": [ + ], "slug": null, "associated_models": "archaeological_context_records.models.ContextRecord", "name": "SISPEO_UE" @@ -169,6 +172,32 @@ } }, { + "pk": 18, + "model": "ishtar_common.importertype", + "fields": { + "description": "Unit\u00e9s d'enregisttrement", + "is_template": true, + "unicity_keys": "external_id", + "users": [], + "slug": "ishtar_context_record", + "associated_models": "archaeological_context_records.models.ContextRecord", + "name": "ISHTAR-UE" + } + }, + { + "pk": 19, + "model": "ishtar_common.importertype", + "fields": { + "description": "Parcelles de terrain", + "is_template": true, + "unicity_keys": "external_id", + "users": [], + "slug": "ishtar_parcels", + "associated_models": "archaeological_operations.models.Parcel", + "name": "ISHTAR-PARCELLES" + } + }, + { "pk": 17, "model": "ishtar_common.importertype", "fields": { @@ -178,7 +207,20 @@ "users": [], "slug": "ishtar_operations", "associated_models": "archaeological_operations.models.Operation", - "name": "ISHTAR-Operations" + "name": "ISHTAR-OP\u00c9RATIONS" + } + }, + { + "pk": 20, + "model": "ishtar_common.importertype", + "fields": { + "description": "Mobilier", + "is_template": true, + "unicity_keys": "external_id", + "users": [], + "slug": "ishtar_finds", + "associated_models": "archaeological_finds.models.BaseFind", + "name": "ISHTAR-MOBILIER" } }, { @@ -391,10 +433,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 1, - "required": true, - "importer_type": 1, "description": "Code patriarche", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 1 } }, { @@ -402,10 +445,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 3, - "required": true, - "importer_type": 1, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 1 } }, { @@ -413,10 +457,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 4, - "required": true, - "importer_type": 1, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 1 } }, { @@ -424,10 +469,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 5, - "required": true, - "importer_type": 1, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 1 } }, { @@ -435,10 +481,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 6, - "required": true, - "importer_type": 1, "description": "Nom du responsable de l'op\u00e9ration. Nom et Pr\u00e9nom sont group\u00e9 et donc mis dans le NOM seul dans l'annuaire.", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 1 } }, { @@ -446,10 +493,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 7, - "required": true, - "importer_type": 1, "description": "Date de d\u00e9but de l'op\u00e9ration avec le format ANN\u00c9E/MOIS/JOUR", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 1 } }, { @@ -457,10 +505,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 8, - "required": true, - "importer_type": 1, "description": "Date de fin de l'op\u00e9ration avec le format ANN\u00c9E/MOIS/JOUR", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 1 } }, { @@ -468,10 +517,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 9, - "required": false, - "importer_type": 1, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 1 } }, { @@ -479,10 +529,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 1, - "required": true, - "importer_type": 2, "description": "Code patriarche de l'op\u00e9ration associ\u00e9e", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 2 } }, { @@ -490,10 +541,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 2, - "required": true, - "importer_type": 2, "description": "Commune (via num\u00e9ro INSEE)", - "regexp_pre_filter": 2 + "regexp_pre_filter": 2, + "required": true, + "label": null, + "importer_type": 2 } }, { @@ -501,10 +553,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 3, - "required": true, - "importer_type": 2, "description": "Identifiant externe", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 2 } }, { @@ -512,10 +565,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 4, - "required": false, - "importer_type": 2, "description": "Num\u00e9ro", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 2 } }, { @@ -523,10 +577,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 5, - "required": false, - "importer_type": 2, "description": "Section", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 2 } }, { @@ -534,10 +589,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 6, - "required": false, - "importer_type": 2, "description": "Ann\u00e9e", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 2 } }, { @@ -545,10 +601,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 9, - "required": false, - "importer_type": 2, "description": "Lieu dit / adresse", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 2 } }, { @@ -556,10 +613,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 1, - "required": true, - "importer_type": 3, "description": "Code patriarche de l'op\u00e9ration associ\u00e9e", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 3 } }, { @@ -567,10 +625,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 2, - "required": true, - "importer_type": 3, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 3 } }, { @@ -578,10 +637,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 3, - "required": true, - "importer_type": 3, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 3 } }, { @@ -589,10 +649,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 4, - "required": false, - "importer_type": 3, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 3 } }, { @@ -600,10 +661,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 5, - "required": false, - "importer_type": 3, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 3 } }, { @@ -611,10 +673,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 6, - "required": false, - "importer_type": 3, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 3 } }, { @@ -622,10 +685,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 7, - "required": false, - "importer_type": 3, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 3 } }, { @@ -633,10 +697,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 8, - "required": false, - "importer_type": 3, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 3 } }, { @@ -644,10 +709,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 9, - "required": false, - "importer_type": 3, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 3 } }, { @@ -655,10 +721,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 12, - "required": false, - "importer_type": 3, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 3 } }, { @@ -666,10 +733,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 13, - "required": false, - "importer_type": 3, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 3 } }, { @@ -677,10 +745,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 16, - "required": false, - "importer_type": 3, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 3 } }, { @@ -688,10 +757,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 1, - "required": true, - "importer_type": 4, "description": "Code patriarche de l'op\u00e9ration associ\u00e9e", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 4 } }, { @@ -699,10 +769,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 2, - "required": true, - "importer_type": 4, "description": "Commune (via num\u00e9ro INSEE)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 4 } }, { @@ -710,10 +781,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 3, - "required": true, - "importer_type": 4, "description": "Parcelle (identifiant externe)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 4 } }, { @@ -721,10 +793,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 4, - "required": true, - "importer_type": 4, "description": "Label / Identifiant externe ", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 4 } }, { @@ -732,10 +805,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 5, - "required": false, - "importer_type": 4, "description": "Type", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 4 } }, { @@ -743,10 +817,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 6, - "required": false, - "importer_type": 4, "description": "Description", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 4 } }, { @@ -754,10 +829,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 7, - "required": false, - "importer_type": 4, "description": "Identification", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 4 } }, { @@ -765,10 +841,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 8, - "required": false, - "importer_type": 4, "description": "Date d'ouverture", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 4 } }, { @@ -776,10 +853,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 9, - "required": false, - "importer_type": 4, "description": "Date de fermeture", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 4 } }, { @@ -787,10 +865,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 11, - "required": false, - "importer_type": 4, "description": "Commentaire", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 4 } }, { @@ -798,10 +877,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 12, - "required": false, - "importer_type": 4, "description": "Nature", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 4 } }, { @@ -809,10 +889,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 13, - "required": false, - "importer_type": 4, "description": "Chronologie (plusieurs possibles s\u00e9par\u00e9es par &)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 4 } }, { @@ -820,10 +901,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 1, - "required": true, - "importer_type": 5, "description": "Code patriarche de l'op\u00e9ration associ\u00e9e", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 5 } }, { @@ -831,10 +913,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 2, - "required": true, - "importer_type": 5, "description": "Commune (via num\u00e9ro INSEE)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 5 } }, { @@ -842,10 +925,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 3, - "required": true, - "importer_type": 5, "description": "Identifiant parcelle", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 5 } }, { @@ -853,10 +937,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 4, - "required": true, - "importer_type": 5, "description": "Identifiant UE", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 5 } }, { @@ -864,10 +949,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 5, - "required": true, - "importer_type": 5, "description": "Identifiant externe", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 5 } }, { @@ -875,10 +961,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 9, - "required": false, - "importer_type": 5, "description": "Sous classe de mat\u00e9riaux", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 5 } }, { @@ -886,10 +973,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 12, - "required": false, - "importer_type": 5, "description": "Ref. du contenant / label temporaire utilis\u00e9 pour le mobilier = label libre = Label pour l'instant", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 5 } }, { @@ -897,10 +985,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 13, - "required": false, - "importer_type": 5, "description": "Nombre d'\u00e9l\u00e9ments", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 5 } }, { @@ -908,10 +997,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 14, - "required": false, - "importer_type": 5, "description": "Poids", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 5 } }, { @@ -919,10 +1009,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 15, - "required": false, - "importer_type": 5, "description": "Unit\u00e9 de poids", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 5 } }, { @@ -930,10 +1021,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 16, - "required": false, - "importer_type": 5, "description": "Date de d\u00e9couverte", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 5 } }, { @@ -941,10 +1033,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 17, - "required": false, - "importer_type": 5, "description": "\u00c9tat de conservation", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 5 } }, { @@ -952,10 +1045,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 18, - "required": false, - "importer_type": 5, "description": "Mesure de conservation", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 5 } }, { @@ -963,10 +1057,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 19, - "required": false, - "importer_type": 5, "description": "Commentaire", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 5 } }, { @@ -974,10 +1069,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 20, - "required": false, - "importer_type": 5, "description": "Datations s\u00e9par\u00e9es par des \"&\"", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 5 } }, { @@ -985,10 +1081,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 21, - "required": false, - "importer_type": 5, "description": "Localisation topographique", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 5 } }, { @@ -996,10 +1093,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 22, - "required": false, - "importer_type": 5, "description": "Int\u00e9r\u00eat sp\u00e9cifique", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 5 } }, { @@ -1007,10 +1105,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 23, - "required": false, - "importer_type": 5, "description": "Description", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 5 } }, { @@ -1018,10 +1117,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 1, - "required": true, - "importer_type": 6, "description": "Type d'op\u00e9ration patriarche (ex: EV, AET, OPD, etc.)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 6 } }, { @@ -1029,10 +1129,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 2, - "required": false, - "importer_type": 6, "description": "Intitul\u00e9 de l'op\u00e9ration dans Patriarche", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 6 } }, { @@ -1040,10 +1141,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 3, - "required": false, - "importer_type": 6, "description": "Nom du responsable de l'op\u00e9ration", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 6 } }, { @@ -1051,10 +1153,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 4, - "required": false, - "importer_type": 6, "description": "Pr\u00e9nom du responsable de l'op\u00e9ration", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 6 } }, { @@ -1062,10 +1165,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 5, - "required": false, - "importer_type": 6, "description": "Chronologie dans PATRIARCHE, h\u00e9las une seule chronologie est enregistr\u00e9e", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 6 } }, { @@ -1073,10 +1177,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 8, - "required": false, - "importer_type": 6, "description": "Date du d\u00e9but de l'op\u00e9ration au format jour/mois/ann\u00e9e", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 6 } }, { @@ -1084,10 +1189,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 9, - "required": false, - "importer_type": 6, "description": "Date du fin de l'op\u00e9ration au format jour/mois/ann\u00e9e", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 6 } }, { @@ -1095,10 +1201,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 10, - "required": false, - "importer_type": 6, "description": "Identification de l'op\u00e9ration, import\u00e9 en tant que commentaire", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 6 } }, { @@ -1106,10 +1213,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 11, - "required": true, - "importer_type": 6, "description": "CODE Patriarche de l'op\u00e9ration, AVEC le code REGION", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 6 } }, { @@ -1117,10 +1225,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 12, - "required": false, - "importer_type": 6, "description": "Surface en m2", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 6 } }, { @@ -1128,10 +1237,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 1, - "required": true, - "importer_type": 7, "description": "Code OA avec le num\u00e9ro de r\u00e9gion (ex: 18 pour les PdL)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 7 } }, { @@ -1139,10 +1249,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 2, - "required": true, - "importer_type": 7, "description": "Code de l'UE (peut \u00eatre la concat\u00e9nation de fait + US ou autre)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 7 } }, { @@ -1150,10 +1261,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 3, - "required": true, - "importer_type": 7, "description": "Parcelle (peut \u00eatre li\u00e9 \u00e0 une parcelle virtuelle, ex: XXX 0)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 7 } }, { @@ -1161,10 +1273,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 4, - "required": false, - "importer_type": 7, "description": "Commentaire", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 7 } }, { @@ -1172,10 +1285,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 5, - "required": false, - "importer_type": 7, "description": "Type d'UE : identification", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 7 } }, { @@ -1183,10 +1297,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 6, - "required": false, - "importer_type": 7, "description": "Description de l'UE consid\u00e9r\u00e9e", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 7 } }, { @@ -1194,10 +1309,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 7, - "required": false, - "importer_type": 7, "description": "Datation (p\u00e9riode) pour l'UE s\u00e9par\u00e9es par un &", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 7 } }, { @@ -1205,10 +1321,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 1, - "required": true, - "importer_type": 8, "description": "Code patriarche de l'op\u00e9ration associ\u00e9e", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 8 } }, { @@ -1216,10 +1333,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 2, - "required": true, - "importer_type": 8, "description": "Code Document de SISPEO, soit l'identifiant complet (ancien du mobilier), ex: M.CE.0091_XXX.XX_0030", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 8 } }, { @@ -1227,10 +1345,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 3, - "required": true, - "importer_type": 8, "description": "UE - a passer en majuscule dans l'export csv de SISPEO / bien v\u00e9rifier qu'il n'y a pas de doublons dans l'import des UE pr\u00e9c\u00e9dent", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 8 } }, { @@ -1238,10 +1357,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 4, - "required": false, - "importer_type": 8, "description": "Type de manti\u00e8re de mobilier, s\u00e9par\u00e9s par des \"&\"", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1249,10 +1369,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 5, - "required": false, - "importer_type": 8, "description": "\u00c9tat de conservation / lien avec une liste", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1260,10 +1381,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 6, - "required": false, - "importer_type": 8, "description": "Commentaire", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1271,10 +1393,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 7, - "required": false, - "importer_type": 8, "description": "Identifiant pr\u00e9c\u00e9dent / label libre", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1282,10 +1405,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 8, - "required": false, - "importer_type": 8, "description": "Contient des objets complets ou non (pb il peut aussi y en avoir des incomplets m\u00e9lang\u00e9s \u00e0 des complets non isol\u00e9s...)\r\nA Am\u00e9liorer", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1293,10 +1417,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 9, - "required": false, - "importer_type": 8, "description": "Datations s\u00e9par\u00e9es par des \"&\"", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1304,10 +1429,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 10, - "required": false, - "importer_type": 8, "description": "Description de l'objet ou du lot d'objet", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1315,10 +1441,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 11, - "required": false, - "importer_type": 8, "description": "Nombre d'objets", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1326,10 +1453,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 12, - "required": false, - "importer_type": 8, "description": "Poids (en g)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1337,10 +1465,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 13, - "required": false, - "importer_type": 8, "description": "Longueur en cm", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1348,10 +1477,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 14, - "required": false, - "importer_type": 8, "description": "Largeur en cm", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1359,10 +1489,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 15, - "required": false, - "importer_type": 8, "description": "Hauteur en cm", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1370,10 +1501,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 16, - "required": false, - "importer_type": 8, "description": "Diam\u00e8tre en cm", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1381,10 +1513,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 18, - "required": false, - "importer_type": 8, "description": "Datation pr\u00e9cise, champs txt libre", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1392,10 +1525,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 19, - "required": false, - "importer_type": 8, "description": "Types d'objets se r\u00e9f\u00e9ren\u00e7ant par rapport \u00e0 un th\u00e9saurus", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1403,10 +1537,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 20, - "required": false, - "importer_type": 8, "description": "Isolation ou lot d'objets", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 8 } }, { @@ -1414,10 +1549,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 1, - "required": true, - "importer_type": 9, "description": "Code patriarche de l'op\u00e9ration associ\u00e9e", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 9 } }, { @@ -1425,10 +1561,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 2, - "required": true, - "importer_type": 9, "description": "Commune (via num\u00e9ro INSEE)", - "regexp_pre_filter": 2 + "regexp_pre_filter": 2, + "required": true, + "label": null, + "importer_type": 9 } }, { @@ -1436,10 +1573,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 4, - "required": true, - "importer_type": 9, "description": "Section de la parcelle", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 9 } }, { @@ -1447,10 +1585,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 5, - "required": true, - "importer_type": 9, "description": "Num\u00e9ro de la parcelle (ex: 125)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 9 } }, { @@ -1458,10 +1597,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 1, - "required": true, - "importer_type": 10, "description": "Numero OA reference", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 10 } }, { @@ -1469,10 +1609,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 2, - "required": true, - "importer_type": 10, "description": "Ref\u00e9rence pr\u00e9c\u00e9dente de l'objet (base ou inventaire pr\u00e9c\u00e9dent, fouille, sp\u00e9cialiste, etc;)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 10 } }, { @@ -1480,10 +1621,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 3, - "required": true, - "importer_type": 10, "description": "UE li\u00e9e au mobilier", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 10 } }, { @@ -1491,10 +1633,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 4, - "required": true, - "importer_type": 10, "description": "Mati\u00e8res s\u00e9par\u00e9es par des \"&\"", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 10 } }, { @@ -1502,10 +1645,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 5, - "required": false, - "importer_type": 10, "description": "Etat de conservation", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 10 } }, { @@ -1513,10 +1657,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 6, - "required": false, - "importer_type": 10, "description": "Commentaires", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 10 } }, { @@ -1524,10 +1669,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 7, - "required": false, - "importer_type": 10, "description": "Label libre", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 10 } }, { @@ -1535,10 +1681,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 2, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1546,10 +1693,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 3, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1557,10 +1705,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 5, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1568,10 +1717,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 9, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1579,10 +1729,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 10, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1590,10 +1741,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 12, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1601,10 +1753,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 13, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1612,10 +1765,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 14, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1623,10 +1777,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 16, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1634,10 +1789,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 18, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1645,10 +1801,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 19, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1656,10 +1813,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 20, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1667,10 +1825,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 35, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1678,10 +1837,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 37, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1689,10 +1849,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 38, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1700,10 +1861,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 41, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1711,10 +1873,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 42, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1722,10 +1885,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 47, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1733,10 +1897,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 49, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1744,10 +1909,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 50, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1755,10 +1921,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 53, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1766,10 +1933,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 54, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1777,10 +1945,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 55, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1788,10 +1957,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 57, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1799,10 +1969,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 58, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1810,10 +1981,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 72, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1821,10 +1993,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 75, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1832,10 +2005,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 76, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1843,10 +2017,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 77, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1854,10 +2029,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 85, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1865,10 +2041,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 87, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1876,10 +2053,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 88, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1887,10 +2065,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 89, - "required": false, - "importer_type": 14, "description": null, - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 14 } }, { @@ -1898,10 +2077,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 1, - "required": true, - "importer_type": 15, "description": "Code Patriarche", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 15 } }, { @@ -1909,10 +2089,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 3, - "required": false, - "importer_type": 15, "description": "Type d'op\u00e9ration", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 15 } }, { @@ -1920,10 +2101,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 4, - "required": false, - "importer_type": 15, "description": "Nom de l'op\u00e9ration", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 15 } }, { @@ -1931,10 +2113,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 5, - "required": false, - "importer_type": 15, "description": "Nom de l'op\u00e9rateur", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 15 } }, { @@ -1942,10 +2125,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 6, - "required": false, - "importer_type": 15, "description": "Nom du responsable de l'op\u00e9ration.", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 15 } }, { @@ -1953,10 +2137,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 7, - "required": false, - "importer_type": 15, "description": "Pr\u00e9nom du responsable de l'op\u00e9ration.", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 15 } }, { @@ -1964,10 +2149,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 8, - "required": false, - "importer_type": 15, "description": "Date de d\u00e9but de l'op\u00e9ration avec le format ANN\u00c9E/MOIS/JOUR", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 15 } }, { @@ -1975,10 +2161,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 9, - "required": false, - "importer_type": 15, "description": "Date de fin de l'op\u00e9ration avec le format ANN\u00c9E/MOIS/JOUR", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 15 } }, { @@ -1986,10 +2173,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 10, - "required": false, - "importer_type": 15, "description": "P\u00e9riodes chronologiques", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 15 } }, { @@ -1997,10 +2185,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 11, - "required": false, - "importer_type": 15, "description": "Ann\u00e9e de r\u00e9f\u00e9rence administrative", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 15 } }, { @@ -2008,10 +2197,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 12, - "required": false, - "importer_type": 15, "description": "Num\u00e9ro de r\u00e9f\u00e9rence administrative de l'op\u00e9ration", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 15 } }, { @@ -2019,10 +2209,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 13, - "required": false, - "importer_type": 15, "description": "Ancienne ref type DRACAR", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 15 } }, { @@ -2030,10 +2221,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 14, - "required": false, - "importer_type": 15, "description": "Commentaires", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 15 } }, { @@ -2041,10 +2233,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 15, - "required": false, - "importer_type": 15, "description": "Date de rendu du rapport (du premier si il y en a plusieurs)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 15 } }, { @@ -2052,10 +2245,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 16, - "required": false, - "importer_type": 15, "description": "\u00c9tat de traitement des rapports", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 15 } }, { @@ -2063,10 +2257,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 1, - "required": false, - "importer_type": 16, "description": "Adresse du domicile", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2074,10 +2269,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 2, - "required": false, - "importer_type": 16, "description": "Courriel", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2085,10 +2281,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 3, - "required": false, - "importer_type": 16, "description": "Adresse", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2096,10 +2293,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 4, - "required": false, - "importer_type": 16, "description": "Commentaire : #AFEAF", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2107,10 +2305,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 7, - "required": false, - "importer_type": 16, "description": "Commentaire : #BSR_CONTRI", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2118,10 +2317,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 10, - "required": false, - "importer_type": 16, "description": "Code postal domicie", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2129,10 +2329,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 11, - "required": false, - "importer_type": 16, "description": "Code postal", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2140,10 +2341,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 17, - "required": false, - "importer_type": 16, "description": "Quelle est l'adresse pr\u00e9f\u00e9r\u00e9e ? (pro/domicile)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2151,10 +2353,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 19, - "required": false, - "importer_type": 16, "description": "Type de contact", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2162,10 +2365,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 28, - "required": false, - "importer_type": 16, "description": "Nom", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2173,10 +2377,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 29, - "required": false, - "importer_type": 16, "description": "Nom de la structure associ\u00e9e", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2184,10 +2389,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 31, - "required": false, - "importer_type": 16, "description": "Commentaire", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2195,10 +2401,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 32, - "required": false, - "importer_type": 16, "description": "T\u00e9l\u00e9phone champs brut", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2206,10 +2413,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 33, - "required": false, - "importer_type": 16, "description": "Pays du domicile", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2217,10 +2425,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 34, - "required": false, - "importer_type": 16, "description": "Pays", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2228,10 +2437,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 36, - "required": false, - "importer_type": 16, "description": "Pr\u00e9nom", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2239,10 +2449,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 37, - "required": false, - "importer_type": 16, "description": "Titre", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2250,10 +2461,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 41, - "required": false, - "importer_type": 16, "description": "Type de t\u00e9l\u00e9phone (\u00e0 retraiter)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2261,10 +2473,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 42, - "required": false, - "importer_type": 16, "description": "Ville du domicile", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2272,10 +2485,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 43, - "required": false, - "importer_type": 16, "description": "Ville", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 16 } }, { @@ -2283,10 +2497,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 1, + "description": "Code PATRIARCHE\r\n ou\r\n code num\u00e9rique (entier) UNIQUE pour une op\u00e9ration", + "regexp_pre_filter": null, "required": true, - "importer_type": 17, - "description": "Code patriarche ou code num\u00e9rique (entier) unique pour une op\u00e9ration", - "regexp_pre_filter": null + "label": "CODE OPERATION", + "importer_type": 17 } }, { @@ -2294,10 +2509,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 2, - "required": true, - "importer_type": 17, "description": "Nom usuel de l'op\u00e9ration", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": "Nom", + "importer_type": 17 } }, { @@ -2305,10 +2521,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 3, - "required": true, - "importer_type": 17, "description": "Ann\u00e9e de r\u00e9f\u00e9rence (peut \u00eatre celle o\u00f9 le projet d'op\u00e9ration a \u00e9t\u00e9 cr\u00e9\u00e9 ou bien celle de la r\u00e9alisation selon votre usage) ", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": "Ann\u00e9e", + "importer_type": 17 } }, { @@ -2316,10 +2533,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 4, - "required": false, - "importer_type": 17, "description": "Index (num\u00e9ro par ann\u00e9e), le couple ann\u00e9e + index doit \u00eatre unique", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2327,10 +2545,23 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 5, - "required": true, - "importer_type": 17, "description": "Type d'op\u00e9ration (parmi une liste)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 17 + } + }, + { + "pk": 335, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 6, + "description": "Ancien code unique de l'op\u00e9ration, peut \u00eatre la r\u00e9f\u00e9rence unique d'une op\u00e9ration pass\u00e9e comme un code DRACAR par exemple, 200 carac. max.", + "regexp_pre_filter": null, + "required": false, + "label": "Ancien code", + "importer_type": 17 } }, { @@ -2338,10 +2569,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 7, + "description": "R\u00e9f\u00e9rence du dossier administratif associ\u00e9 \u00e0 l'op\u00e9ration sous la forme ANNEE-INDEX. Exemple : \"2002-4\".", + "regexp_pre_filter": null, "required": false, - "importer_type": 17, - "description": "R\u00e9f\u00e9rence du dossier administratif associ\u00e9 \u00e0 l'op\u00e9ration sous la forme ANNEE-INDEX par exemple : \"2002-4\"", - "regexp_pre_filter": null + "label": "", + "importer_type": 17 } }, { @@ -2349,10 +2581,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 8, - "required": false, - "importer_type": 17, "description": "Identifiants des sites (entit\u00e9s arch\u00e9ologiques) concern\u00e9es par l'op\u00e9ration, s\u00e9par\u00e9es par \u00ab\u00a0&\u00a0\u00bb. \r\nExemple : \"44 125 0028 & 44 125 0029\"", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": "", + "importer_type": 17 } }, { @@ -2360,10 +2593,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 9, - "required": false, - "importer_type": 17, "description": "Types de vestiges (s\u00e9par\u00e9s par un \u00ab\u00a0&\u00a0\u00bb)\r\nExemple : \"four & fosses & villa\"", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2371,10 +2605,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 10, + "description": "P\u00e9riodes concern\u00e9es (s\u00e9par\u00e9es par un \u00ab\u00a0&\u00a0\u00bb). \r\nExemple : \"Gallo-romain & Fer & Med\".", + "regexp_pre_filter": null, "required": false, - "importer_type": 17, - "description": "P\u00e9riodes concern\u00e9es (s\u00e9par\u00e9es par un \u00ab\u00a0&\u00a0\u00bb)\r\nExemple : \"Gallo-romain & Fer & Med\"", - "regexp_pre_filter": null + "label": "", + "importer_type": 17 } }, { @@ -2382,10 +2617,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 11, - "required": false, - "importer_type": 17, "description": "Titre (M., Mme), du responsable d'op\u00e9ration (RO)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2393,10 +2629,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 12, - "required": false, - "importer_type": 17, "description": "Pr\u00e9nom du Responsable scientifique (responsable d'op\u00e9ration)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2404,10 +2641,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 13, - "required": false, - "importer_type": 17, "description": "Nom du Responsable scientifique (responsable d'op\u00e9ration)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2415,10 +2653,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 14, + "description": "Rattachement du Responsable scientifique (responsable d'op\u00e9ration)\r\nExemple : \"INRAP\" ou plus pr\u00e9cis \"INRAP Direction interr\u00e9gionale Grand Ouest\" selon votre degr\u00e9 de pr\u00e9cision dans la gestion des rattachements et des organisations.", + "regexp_pre_filter": null, "required": false, - "importer_type": 17, - "description": "Rattachement du Responsable scientifique (responsable d'op\u00e9ration)\r\nExemple : \"INRAP\" ou plus pr\u00e9cis \"INRAP Direction interr\u00e9gionale Grand Ouest\" selon votre degr\u00e9 de pr\u00e9cision dans la gestion des rattachements et des organisation.", - "regexp_pre_filter": null + "label": null, + "importer_type": 17 } }, { @@ -2426,10 +2665,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 15, + "description": "Nom de l'op\u00e9rateur (organisation). Peut \u00eatre diff\u00e9rent de l'organisation de rattachement du responsable d'op\u00e9ration.", + "regexp_pre_filter": null, "required": false, - "importer_type": 17, - "description": "Nom de l'op\u00e9rateur (organisation)", - "regexp_pre_filter": null + "label": null, + "importer_type": 17 } }, { @@ -2437,10 +2677,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 16, - "required": false, - "importer_type": 17, "description": "R\u00e9f\u00e9rence de l'op\u00e9rateur (code ou autre r\u00e9f\u00e9rence interne de l'op\u00e9rateur)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2448,10 +2689,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 17, - "required": false, - "importer_type": 17, "description": "Titre (M., Mme), du responsable du suivi scientifique", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2459,10 +2701,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 18, - "required": false, - "importer_type": 17, "description": "Pr\u00e9nom du responsable du suivi scientifique (ex\u00a0: resp. SRA ou pilote de l'op\u00e9ration, mais non responsable de celle-ci)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2470,10 +2713,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 19, - "required": false, - "importer_type": 17, "description": "Nom du responsable du suivi scientifique (ex : resp. SRA ou pilote de l'op\u00e9ration, mais non responsable de celle-ci)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2481,10 +2725,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 20, - "required": false, - "importer_type": 17, "description": "Rattachement du resp. du suivi scientifique", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2492,10 +2737,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 21, - "required": false, - "importer_type": 17, "description": "Surface couverte par l'op\u00e9ration (m2)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2503,10 +2749,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 22, - "required": false, - "importer_type": 17, "description": "Date de d\u00e9but de l'op\u00e9ration (d\u00e9but du terrain d'ordinaire mais vous pouvez utiliser autre chose)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2514,10 +2761,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 23, - "required": false, - "importer_type": 17, "description": "Date de fin de l'op\u00e9ration (fin du terrain d'ordinaire mais vous pouvez utiliser autre chose)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2525,10 +2773,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 24, - "required": false, - "importer_type": 17, "description": "Date de cl\u00f4ture (peut-\u00eatre la date de rendu de la documentation, la fin de la recherche associ\u00e9e ou autre) d\u2019ordinaire cela repr\u00e9sente la date \u00e0 partir de laquelle la documentation issue de l'op\u00e9ration n'est plus du ressort du responsable d'op\u00e9ration, mais vous pouvez utiliser autre chose.", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2536,10 +2785,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 25, - "required": false, - "importer_type": 17, "description": "Date d'avis (ex\u00a0: avis de CIRA ou autre selon votre usage)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2547,10 +2797,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 26, - "required": false, - "importer_type": 17, "description": "R\u00e9sultats consid\u00e9r\u00e9s comme n\u00e9gatif (d\u2019ordinaire utilis\u00e9 pour les diagnostics n\u00e9gatifs)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2558,10 +2809,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 27, - "required": false, - "importer_type": 17, "description": "Pr\u00e9nom du rapporteur (CIRA ou autre selon votre usage de la notion d'avis)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2569,10 +2821,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 28, - "required": false, - "importer_type": 17, "description": "Nom du rapporteur (CIRA ou autre selon votre usage de la notion d'avis)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2580,10 +2833,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 29, - "required": false, - "importer_type": 17, "description": "Rattachement rapporteur (organisation)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2591,10 +2845,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 30, - "required": false, - "importer_type": 17, "description": "Date limite pr\u00e9vue pour le rendu de la documentation scientifique", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2602,10 +2857,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 31, - "required": false, - "importer_type": 17, "description": "Documentation re\u00e7ue", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2613,10 +2869,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 32, - "required": false, - "importer_type": 17, "description": "Date limite pr\u00e9vue pour le rendu du mobilier", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2624,10 +2881,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 33, + "description": "Mobilier re\u00e7u ou livr\u00e9 selon vos usages et proc\u00e9dures", + "regexp_pre_filter": null, "required": false, - "importer_type": 17, - "description": "Mobilier re\u00e7u (ou livr\u00e9)", - "regexp_pre_filter": null + "label": null, + "importer_type": 17 } }, { @@ -2635,10 +2893,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 34, - "required": false, - "importer_type": 17, "description": "Commentaire g\u00e9n\u00e9ral", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2646,10 +2905,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 35, - "required": false, - "importer_type": 17, "description": "Date de livraison du rapport", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2657,10 +2917,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 36, - "required": false, - "importer_type": 17, "description": "\u00c9tat de traitement du rapport", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2668,10 +2929,11 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 37, - "required": false, - "importer_type": 17, "description": "Commentaire sur la documentation scientifique (y compris mobilier)", - "regexp_pre_filter": null + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 17 } }, { @@ -2679,34 +2941,765 @@ "model": "ishtar_common.importercolumn", "fields": { "col_number": 38, + "description": "Nom du fichier image (jpg ou png), exemple \"IMG_5023.jpg\"\r\nLes fichiers images doivent \u00eatre joints \u00e0 l'import dans un fichier ZIP", + "regexp_pre_filter": null, "required": false, - "importer_type": 17, - "description": "Image (nom du fichier)", - "regexp_pre_filter": null + "label": null, + "importer_type": 17 } }, { - "pk": 46, - "model": "ishtar_common.importtarget", + "pk": 302, + "model": "ishtar_common.importercolumn", "fields": { - "comment": null, - "target": "find__conservatory_state", - "column": 45, - "formater_type": 22, - "concat_str": null, - "regexp_filter": null, - "concat": false, - "force_new": false + "col_number": 1, + "description": "Code PATRIARCHE ou code UNIQUE de l'op\u00e9ration associ\u00e9e", + "regexp_pre_filter": null, + "required": true, + "label": "CODE OPERATION", + "importer_type": 18 } }, { - "pk": 47, + "pk": 311, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 2, + "description": "Commune (via num\u00e9ro INSEE)", + "regexp_pre_filter": null, + "required": true, + "label": "INSEE", + "importer_type": 18 + } + }, + { + "pk": 312, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 3, + "description": "Parcelle (identifiant externe), soit la section plus la parcelle sans espaces, par exemple \"ZA253\"", + "regexp_pre_filter": null, + "required": true, + "label": "Parcelle", + "importer_type": 18 + } + }, + { + "pk": 313, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 4, + "description": "Ann\u00e9e de la r\u00e9f\u00e9rence cadastrale (exemple : \"1980\")", + "regexp_pre_filter": null, + "required": false, + "label": "Ann\u00e9e cadastre", + "importer_type": 18 + } + }, + { + "pk": 314, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 5, + "description": "Label / Identifiant (externe) de l'UE, ex: \"US 145\", \"Tranch\u00e9e 145\", \"145\", \"St 17\" etc.\r\nDoit \u00eatre unique pour une parcelle donn\u00e9e", + "regexp_pre_filter": null, + "required": true, + "label": "Label UE", + "importer_type": 18 + } + }, + { + "pk": 315, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 6, + "description": "Type d'UE, exemple : \"US\", \"Couche\", \"Tranch\u00e9e\", \"zone\", \"Secteur\", \"Log\", \"Carr\u00e9\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "Type", + "importer_type": 18 + } + }, + { + "pk": 316, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 7, + "description": "Description (texte, 1000 carac. max.)", + "regexp_pre_filter": null, + "required": false, + "label": "Description", + "importer_type": 18 + } + }, + { + "pk": 317, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 8, + "description": "Commentaire g\u00e9n\u00e9ral (1000 carac. max.)", + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 18 + } + }, + { + "pk": 318, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 9, + "description": "Taille ou longueur (en m\u00e8tre), exemple \"1.2\", \"12\"", + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 18 + } + }, + { + "pk": 319, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 10, + "description": "Largeur (en m\u00e8tre), exemple \"1.2\", \"12\"", + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 18 + } + }, + { + "pk": 320, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 11, + "description": "\u00c9paisseur (en m\u00e8tre), exemple \"0.2\", \"2\"", + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 18 + } + }, + { + "pk": 321, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 12, + "description": "Profondeur (en m\u00e8tre), exemple \"0.2\", \"2\"", + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 18 + } + }, + { + "pk": 322, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 13, + "description": "Lieu, description textuelle de la localisation exemple : \"Au pied de l'arbre du P\u00e8re Jahouen\", \"En limite nord de la parcelle\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 18 + } + }, + { + "pk": 323, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 14, + "description": "Contient ou non du mobilier (oui/non)", + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 18 + } + }, + { + "pk": 324, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 15, + "description": "Nom du fichier image (jpg ou png), exemple \"IMG_5023.jpg\".\r\nLes fichiers images doivent \u00eatre joints \u00e0 l'import dans un fichier ZIP", + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 18 + } + }, + { + "pk": 325, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 16, + "description": "Chronologies associ\u00e9es (plusieurs possibles s\u00e9par\u00e9es par &), exemple : \"Gallo-romain & M\u00e9di\u00e9val\", \"GR&MED\", \"M\u00e9solithique final & M\u00e9so moyen & Epipal\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 18 + } + }, + { + "pk": 326, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 17, + "description": "Commentaire sur les datations (texte 1000 carac. max.), exemple : \"IIe - IIIe s.\", \"fin XVe ou plus tard\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 18 + } + }, + { + "pk": 327, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 18, + "description": "Description du remplissage, 1000 carac. max. exemple \"Limons argileux brun riche en charbons\"", + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 18 + } + }, + { + "pk": 328, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 19, + "description": "Interpr\u00e9tation, texte 1000 carac. max., exemple \"Mur de cl\u00f4ture\", \"Sol couvert d'une mosa\u00efque, \"Pal\u00e9osol du d\u00e9but de l'Holoc\u00e8ne\", \"Four de r\u00e9duction de minerai de fer\", \"TP\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "Interpr\u00e9tation", + "importer_type": 18 + } + }, + { + "pk": 329, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 20, + "description": "Activit\u00e9, r\u00e9f\u00e9rence \u00e0 des types, par exemple : \"Naturelle\", \"Construction\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "Type d'activit\u00e9", + "importer_type": 18 + } + }, + { + "pk": 330, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 21, + "description": "Identification (type), par exemple \"Niveau d'occupation\", \"Mur\", \"Colluvions\", \"Chablis\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "Identification (type)", + "importer_type": 18 + } + }, + { + "pk": 331, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 22, + "description": "Terminus ante quem, limite temporelle avant laquelle l'UE s'est form\u00e9e, ici sous la forme de valeurs enti\u00e8res, exemple : \"322\", \"-45\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "TAQ", + "importer_type": 18 + } + }, + { + "pk": 332, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 23, + "description": "Terminus post quem, limite temporelle apr\u00e8s laquelle l'UE s'est form\u00e9e, ici sous la forme de valeurs enti\u00e8res, exemple : \"322\", \"-45\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "TPQ", + "importer_type": 18 + } + }, + { + "pk": 333, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 24, + "description": "Terminus ante quem estim\u00e9e, limite temporelle avant laquelle l'UE s'est form\u00e9e, ici sous la forme de valeurs enti\u00e8res, exemple : \"322\", \"-45\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "TAQ estim\u00e9e", + "importer_type": 18 + } + }, + { + "pk": 334, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 25, + "description": "Terminus post quem estim\u00e9e, limite temporelle avant laquelle l'UE s'est form\u00e9e, ici sous la forme de valeurs enti\u00e8res, exemple : \"322\", \"-45\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "TPQ estim\u00e9e", + "importer_type": 18 + } + }, + { + "pk": 303, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 1, + "description": "Code PATRIARCHE\r\n ou\r\n code num\u00e9rique (entier) UNIQUE pour une op\u00e9ration", + "regexp_pre_filter": null, + "required": true, + "label": "CODE OPERATION", + "importer_type": 19 + } + }, + { + "pk": 304, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 2, + "description": "Commune (via num\u00e9ro INSEE)", + "regexp_pre_filter": 2, + "required": true, + "label": null, + "importer_type": 19 + } + }, + { + "pk": 305, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 3, + "description": "Identifiant externe", + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 19 + } + }, + { + "pk": 306, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 4, + "description": "Section (ex : \"ZA\"), maximum 4 caract\u00e8res", + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 19 + } + }, + { + "pk": 307, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 5, + "description": "Num\u00e9ro de la parcelle (ex: \"253\"), mais peut accueillir une r\u00e9f\u00e9rence sous la forme de caract\u00e8res (maximum 6)", + "regexp_pre_filter": null, + "required": true, + "label": null, + "importer_type": 19 + } + }, + { + "pk": 308, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 6, + "description": "Ann\u00e9e de la r\u00e9f\u00e9rence cadastrale (exemple : \"1980\")", + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 19 + } + }, + { + "pk": 309, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 7, + "description": "Lieu dit ou adresse associ\u00e9s \u00e0 la parcelle", + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 19 + } + }, + { + "pk": 310, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 8, + "description": "Parcelle dans le domaine public ou non (binaire, oui/non)", + "regexp_pre_filter": null, + "required": false, + "label": null, + "importer_type": 19 + } + }, + { + "pk": 336, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 1, + "description": "Code PATRIARCHE ou code num\u00e9rique (entier) UNIQUE pour une op\u00e9ration.", + "regexp_pre_filter": null, + "required": true, + "label": "CODE OPERATION", + "importer_type": 20 + } + }, + { + "pk": 337, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 2, + "description": "Commune (via num\u00e9ro INSEE).", + "regexp_pre_filter": null, + "required": true, + "label": "INSEE", + "importer_type": 20 + } + }, + { + "pk": 338, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 3, + "description": "Parcelle (identifiant externe), soit la section plus la parcelle sans espaces. Exemple : \"ZA253\".", + "regexp_pre_filter": null, + "required": true, + "label": "Parcelle", + "importer_type": 20 + } + }, + { + "pk": 339, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 4, + "description": "Label / Identifiant (externe) de l'UE. Exemple : \"US 145\", \"Tranch\u00e9e 145\", \"145\", \"St 17\", etc. Doit \u00eatre unique pour une parcelle donn\u00e9e.", + "regexp_pre_filter": null, + "required": true, + "label": "Label UE", + "importer_type": 20 + } + }, + { + "pk": 340, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 5, + "description": "Identifiant libre pour le mobilier. Exemple : \"12\", \"Lot 24\", \"Sac vert\", etc.\r\nDoit \u00eatre unique \u00e0 l'\u00e9chelle de l'UE associ\u00e9e.", + "regexp_pre_filter": null, + "required": true, + "label": "Label mobilier", + "importer_type": 20 + } + }, + { + "pk": 341, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 6, + "description": "Identifiant pr\u00e9c\u00e9dent, li\u00e9 \u00e0 une base de donn\u00e9e ou un autre mode d'enregistrement. Exemple : \"400.01.05\", \"Beau biface\", \"inv. 4523\", \"Iso.4220\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "Identifiant pr\u00e9c\u00e9dent", + "importer_type": 20 + } + }, + { + "pk": 343, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 7, + "description": "R\u00e9f\u00e9rence du point topo, d'ordinaire un entier mais peut \u00eatre autre chose. Champ texte, max. 120 caract\u00e8res. Exemple : \"7220\", \"pt. 72\", etc.\r\n\r\nNON LI\u00c9 POUR L'INSTANT.", + "regexp_pre_filter": null, + "required": false, + "label": "Ref. point topo", + "importer_type": 20 + } + }, + { + "pk": 342, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 8, + "description": "Description du mobilier, objet ou lot. Champ texte, max. 1000 caract\u00e8res. Exemple : \"Fibule aviforme \u00e0 roustade bipolaire\".", + "regexp_pre_filter": null, + "required": false, + "label": "Description", + "importer_type": 20 + } + }, + { + "pk": 344, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 9, + "description": "D\u00e9finit si on enregistre ici un objet seul (parfois appel\u00e9 Isolation) ou un lot d'objets. Exemple : \"lot\", \"objet\", \"Iso\", \"vrac\", etc.\r\nEst ici traduit en binaire : \"objet\" ou \"lot\".", + "regexp_pre_filter": null, + "required": false, + "label": "Lot ou objet", + "importer_type": 20 + } + }, + { + "pk": 345, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 10, + "description": "D\u00e9finit si un objet est complet ou non. Exemple : \"complet\", \"est complet\", \"incomplet\".\r\nEst ici traduit en binaire : \"complet\" ou \"incomplet\". ", + "regexp_pre_filter": null, + "required": false, + "label": "Compl\u00e9tude", + "importer_type": 20 + } + }, + { + "pk": 346, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 11, + "description": "Type(s) de mat\u00e9riau(x) s\u00e9par\u00e9s par des \"&\". Exemple : \"m\u00e9tal & os\", \"LT\", \"Min\u00e9ral\", \"Granito\u00efde & Basalte & Ardoise\".", + "regexp_pre_filter": null, + "required": false, + "label": "Materiaux(x)", + "importer_type": 20 + } + }, + { + "pk": 347, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 12, + "description": "\u00c9tat de conservation. Exemple : \"Instable\", \"Stable\", \"Inconnu\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "\u00c9tat de conservation", + "importer_type": 20 + } + }, + { + "pk": 348, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 13, + "description": "Commentaire relatif \u00e0 la conservation. Champ texte, max. 1000 caract\u00e8res. Exemple : \"Devrait \u00eatre conserv\u00e9 dans une chambre climatis\u00e9e\", \"Ne sera plus qu'une poudre, si on ne s'en occupe pas sous peu\", \" \u00e0 jeter\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "Commentaire conservation", + "importer_type": 20 + } + }, + { + "pk": 349, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 14, + "description": "Type(s) d'objet(s), s\u00e9par\u00e9s par des \"&\". Exemple : \"tesson & charbon\", \"os & m\u00e9tal\", \"faune\", \"fibule & bague\", \"lame & lamelle\", \"\u00e9clat & nucl\u00e9us\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "Type(s) d'objet(s)", + "importer_type": 20 + } + }, + { + "pk": 350, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 15, + "description": "Type(s) d'actions de conservation \u00e0 mener, s\u00e9par\u00e9s par des \"&\". Exemple : \"\u00c0 restaurer\", \"reconditionnement\", \"\u00c0 reconditionner & \u00c0 stabiliser\"", + "regexp_pre_filter": null, + "required": false, + "label": "Type(s) d'actions de conservation \u00e0 mener", + "importer_type": 20 + } + }, + { + "pk": 351, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 16, + "description": "Type(s) d'int\u00e9r\u00eat scientifique ou d'int\u00e9grit\u00e9, s\u00e9par\u00e9s par des \"&\". Exemple : \"Arch\u00e9ologiquement complet\", \"absent\", \"perdu\", etc.\r\nPeut \u00e9galement qualifier (selon votre usage) des qualit\u00e9s de fragmentation : \"proximal\", \"distal\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "Type(s) d'int\u00e9grit\u00e9(s) et/ou int\u00e9r\u00eat(s)", + "importer_type": 20 + } + }, + { + "pk": 352, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 17, + "description": "Type(s) de remarquabilit\u00e9(s), s\u00e9par\u00e9s par des \"&\". Exemple : \"Mus\u00e9e\", \"Publication\", \"Tessonier & Publication\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "Type(s) de remarqualibit\u00e9(s)", + "importer_type": 20 + } + }, + { + "pk": 353, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 18, + "description": "Longueur en cm (nombre d\u00e9cimal).", + "regexp_pre_filter": null, + "required": false, + "label": "Longueur (cm)", + "importer_type": 20 + } + }, + { + "pk": 354, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 19, + "description": "Largeur en cm (nombre d\u00e9cimal).", + "regexp_pre_filter": null, + "required": false, + "label": "Largeur (cm)", + "importer_type": 20 + } + }, + { + "pk": 355, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 20, + "description": "Hauteur en cm (nombre d\u00e9cimal).", + "regexp_pre_filter": null, + "required": false, + "label": "Hauteur (cm)", + "importer_type": 20 + } + }, + { + "pk": 356, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 21, + "description": "Diam\u00e8tre en cm (nombre d\u00e9cimal).", + "regexp_pre_filter": null, + "required": false, + "label": "Diam\u00e8tre (cm)", + "importer_type": 20 + } + }, + { + "pk": 357, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 22, + "description": "Commentaire permettant de donner des pr\u00e9cisions (ou d'importer des donn\u00e9es mixtes). Champ texte, max. 1000 caract\u00e8res. Exemple : \"18 x 12 x 5\", \"col de 43 mm\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "Commentaire / Pr\u00e9cisions sur les dimensions ", + "importer_type": 20 + } + }, + { + "pk": 358, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 23, + "description": "Nombre d'objet(s) li\u00e9(s) \u00e0 cet enregistrement (entier). Exemple : \"12\".\r\nAttention, ce champ n'est pas contraint par l'information de type OBJET/LOT (colonne n\u00b09).", + "regexp_pre_filter": null, + "required": false, + "label": "Nombre", + "importer_type": 20 + } + }, + { + "pk": 359, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 24, + "description": "Marquage visible sur le mobilier. Champ texte, max. 1000 caract\u00e8res. Exemple : \"id1234 la Roche aux F\u00e9es\", \"MTX-45\", etc.\r\nCeci reproduit d'ordinaire un marquage r\u00e9alis\u00e9 par un arch\u00e9ologue. Il ne s'agit pas ici de reproduire une \u00e9pigraphie ou tout autre inscription arch\u00e9ologique (graffito, d\u00e9dicaces, defixio, etc.) , mais vous pouvez l'utiliser pour cela si vous n'avez pas \u00e0 utiliser de marquage arch\u00e9ologique.", + "regexp_pre_filter": null, + "required": false, + "label": "Marque", + "importer_type": 20 + } + }, + { + "pk": 360, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 25, + "description": "Commentaire g\u00e9n\u00e9ral libre. Champ texte, max. 2000 caract\u00e8res. Exemple : \"habillage en nid d'abeille, poli g\u00e9n\u00e9ralis\u00e9, encoche emmanchement lat\u00e9ral ouvert sur la face sup\u00e9rieure\", \"1 bord + bec tubulaire\", \"fibule de Langton Down\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "Commentaire g\u00e9n\u00e9ral", + "importer_type": 20 + } + }, + { + "pk": 361, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 26, + "description": "Commentaire g\u00e9n\u00e9ral sur les datations, si besoin. Champ texte, max. 1000 caract\u00e8res. Exemple : \"plut\u00f4t fin IIe s. ou d\u00e9but IIIe s.\", \"Datation \u00e0 pr\u00e9ciser avant publication\", \" Datation rapide faite par M. Dupont\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "Commentaire g\u00e9n\u00e9ral sur les datations", + "importer_type": 20 + } + }, + { + "pk": 362, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 27, + "description": "Valeur estim\u00e9e (\u20ac), sous la forme d'un nombre d\u00e9cimal. Exemple : \"4500\", \"0.2\", etc.\r\nUtile essentiellement pour les probl\u00e8mes de partage, vente, assurance etc.", + "regexp_pre_filter": null, + "required": false, + "label": "Valeur estim\u00e9e", + "importer_type": 20 + } + }, + { + "pk": 363, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 28, + "description": "Nom exact du fichier image, sous la forme XXXXX.jpg.\r\nAttention au respect strict des caract\u00e8res et majuscules lors d'un import de ce type, \".JPG\" ou \"*.jpg\", etc.\r\nExemple : \"P1030831.JPG\", \"IMG_6485.JPG\", \"fibule.jpg\", etc.\r\nLors de l'import il faut ajouter ces images sous la forme d'un fichier zip (joint au csv import\u00e9) pour que les images soient automatiquement int\u00e9gr\u00e9es.\r\n", + "regexp_pre_filter": null, + "required": false, + "label": "Image", + "importer_type": 20 + } + }, + { + "pk": 364, + "model": "ishtar_common.importercolumn", + "fields": { + "col_number": 29, + "description": "Chronologies associ\u00e9es (plusieurs possibles s\u00e9par\u00e9es par &). Exemple : \"Gallo-romain & M\u00e9di\u00e9val\", \"GR&MED\", \"M\u00e9solithique final & M\u00e9so moyen & Epipal\", etc.", + "regexp_pre_filter": null, + "required": false, + "label": "P\u00e9riodes", + "importer_type": 20 + } + }, + { + "pk": 46, "model": "ishtar_common.importtarget", "fields": { "comment": null, - "target": "find__preservation_to_considers", - "column": 46, - "formater_type": 23, + "target": "find__conservatory_state", + "column": 45, + "formater_type": 22, "concat_str": null, "regexp_filter": null, "concat": false, @@ -3610,6 +4603,370 @@ } }, { + "pk": 47, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__preservation_to_considers", + "column": 46, + "formater_type": 23, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 325, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "image", + "column": 301, + "formater_type": 27, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 328, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "town__numero_insee", + "column": 304, + "formater_type": 11, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 331, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "parcel_number", + "column": 307, + "formater_type": 8, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 334, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "public_domain", + "column": 310, + "formater_type": 19, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 335, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "parcel__external_id", + "column": 311, + "formater_type": 28, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 338, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "remains", + "column": 272, + "formater_type": 41, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 341, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "description", + "column": 316, + "formater_type": 16, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 344, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "width", + "column": 319, + "formater_type": 21, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 347, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "location", + "column": 322, + "formater_type": 16, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 349, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "image", + "column": 324, + "formater_type": 27, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 350, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "datings__period", + "column": 325, + "formater_type": 6, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 353, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "interpretation", + "column": 328, + "formater_type": 16, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 356, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "taq", + "column": 331, + "formater_type": 1, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 359, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "tpq_estimated", + "column": 334, + "formater_type": 1, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 362, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "context_record__external_id", + "column": 337, + "formater_type": 28, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 365, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "label", + "column": 340, + "formater_type": 3, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 368, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "is_isolated", + "column": 344, + "formater_type": 19, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 371, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__conservatory_state", + "column": 347, + "formater_type": 22, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 374, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__preservation_to_considers", + "column": 350, + "formater_type": 23, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 377, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__length", + "column": 353, + "formater_type": 21, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 379, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__height", + "column": 355, + "formater_type": 21, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 382, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__find_number", + "column": 358, + "formater_type": 1, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 384, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__comment", + "column": 360, + "formater_type": 33, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 385, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__dating_comment", + "column": 361, + "formater_type": 16, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 388, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__datings__period", + "column": 364, + "formater_type": 6, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { "pk": 38, "model": "ishtar_common.importtarget", "fields": { @@ -3680,20 +5037,6 @@ } }, { - "pk": 297, - "model": "ishtar_common.importtarget", - "fields": { - "comment": "", - "target": "archaeological_sites__reference", - "column": 271, - "formater_type": 40, - "concat_str": "", - "regexp_filter": null, - "concat": false, - "force_new": false - } - }, - { "pk": 303, "model": "ishtar_common.importtarget", "fields": { @@ -3806,6 +5149,314 @@ } }, { + "pk": 326, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "operation__code_patriarche", + "column": 302, + "formater_type": 1, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 329, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "external_id", + "column": 305, + "formater_type": 11, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 332, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "year", + "column": 308, + "formater_type": 14, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 336, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "parcel__external_id", + "column": 312, + "formater_type": 11, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 339, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "label", + "column": 314, + "formater_type": 3, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 342, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "comment", + "column": 317, + "formater_type": 16, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 345, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "thickness", + "column": 320, + "formater_type": 21, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 348, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "has_furniture", + "column": 323, + "formater_type": 19, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 351, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "datings_comment", + "column": 326, + "formater_type": 16, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 354, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "activity", + "column": 329, + "formater_type": 42, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 357, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "tpq", + "column": 332, + "formater_type": 1, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 360, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "old_code", + "column": 335, + "formater_type": 30, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 363, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "context_record__external_id", + "column": 338, + "formater_type": 35, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 366, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__previous_id", + "column": 341, + "formater_type": 3, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 372, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__conservatory_comment", + "column": 348, + "formater_type": 16, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 369, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__is_complete", + "column": 345, + "formater_type": 19, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 378, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__width", + "column": 354, + "formater_type": 21, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 375, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__integrities", + "column": 351, + "formater_type": 43, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 380, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__diameter", + "column": 356, + "formater_type": 21, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 383, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__mark", + "column": 359, + "formater_type": 16, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 386, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__estimated_value", + "column": 362, + "formater_type": 21, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 297, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "archaeological_sites__reference", + "column": 271, + "formater_type": 45, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { "pk": 61, "model": "ishtar_common.importtarget", "fields": { @@ -5500,13 +7151,153 @@ } }, { + "pk": 295, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "associated_file__external_id", + "column": 270, + "formater_type": 35, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 298, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "scientist__title", + "column": 274, + "formater_type": 11, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 304, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "in_charge__title", + "column": 280, + "formater_type": 11, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 310, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "excavation_end_date", + "column": 286, + "formater_type": 25, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 313, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "negative_result", + "column": 289, + "formater_type": 19, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 319, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "finds_deadline", + "column": 295, + "formater_type": 25, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 322, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "report_delivery_date", + "column": 298, + "formater_type": 25, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 327, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "code_patriarche", + "column": 303, + "formater_type": 1, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 330, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "section", + "column": 306, + "formater_type": 7, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 333, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "address", + "column": 309, + "formater_type": 10, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { "pk": 292, "model": "ishtar_common.importtarget", "fields": { "comment": "", "target": "year", "column": 267, - "formater_type": 1, + "formater_type": 14, "concat_str": "", "regexp_filter": null, "concat": false, @@ -5514,13 +7305,13 @@ } }, { - "pk": 295, + "pk": 337, "model": "ishtar_common.importtarget", "fields": { "comment": "", - "target": "associated_file__external_id", - "column": 270, - "formater_type": 35, + "target": "parcel__year", + "column": 313, + "formater_type": 14, "concat_str": "", "regexp_filter": null, "concat": false, @@ -5528,13 +7319,41 @@ } }, { - "pk": 298, + "pk": 340, "model": "ishtar_common.importtarget", "fields": { "comment": "", - "target": "scientist__title", - "column": 274, - "formater_type": 11, + "target": "unit", + "column": 315, + "formater_type": 18, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 343, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "length", + "column": 318, + "formater_type": 21, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 346, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "depth", + "column": 321, + "formater_type": 21, "concat_str": "", "regexp_filter": null, "concat": false, @@ -5546,7 +7365,7 @@ "model": "ishtar_common.importtarget", "fields": { "comment": "", - "target": "scientist__organization__name", + "target": "scientist__attached_to__name", "column": 277, "formater_type": 30, "concat_str": "", @@ -5556,13 +7375,13 @@ } }, { - "pk": 304, + "pk": 307, "model": "ishtar_common.importtarget", "fields": { "comment": "", - "target": "in_charge__title", - "column": 280, - "formater_type": 11, + "target": "in_charge__attached_to__name", + "column": 283, + "formater_type": 3, "concat_str": "", "regexp_filter": null, "concat": false, @@ -5570,12 +7389,12 @@ } }, { - "pk": 307, + "pk": 316, "model": "ishtar_common.importtarget", "fields": { "comment": "", - "target": "in_charge__organization__name", - "column": 283, + "target": "cira_rapporteur__attached_to__name", + "column": 292, "formater_type": 3, "concat_str": "", "regexp_filter": null, @@ -5584,13 +7403,13 @@ } }, { - "pk": 310, + "pk": 352, "model": "ishtar_common.importtarget", "fields": { "comment": "", - "target": "excavation_end_date", - "column": 286, - "formater_type": 25, + "target": "filling", + "column": 327, + "formater_type": 16, "concat_str": "", "regexp_filter": null, "concat": false, @@ -5598,13 +7417,13 @@ } }, { - "pk": 313, + "pk": 355, "model": "ishtar_common.importtarget", "fields": { "comment": "", - "target": "negative_result", - "column": 289, - "formater_type": 19, + "target": "identification", + "column": 330, + "formater_type": 24, "concat_str": "", "regexp_filter": null, "concat": false, @@ -5612,12 +7431,40 @@ } }, { - "pk": 316, + "pk": 358, "model": "ishtar_common.importtarget", "fields": { "comment": "", - "target": "cira_rapporteur__organization__name", - "column": 292, + "target": "taq_estimated", + "column": 333, + "formater_type": 1, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 361, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "context_record__external_id", + "column": 336, + "formater_type": 11, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 364, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "context_record__external_id", + "column": 339, "formater_type": 3, "concat_str": "", "regexp_filter": null, @@ -5626,13 +7473,13 @@ } }, { - "pk": 319, + "pk": 367, "model": "ishtar_common.importtarget", "fields": { "comment": "", - "target": "finds_deadline", - "column": 295, - "formater_type": 25, + "target": "find__description", + "column": 342, + "formater_type": 16, "concat_str": "", "regexp_filter": null, "concat": false, @@ -5640,13 +7487,69 @@ } }, { - "pk": 322, + "pk": 370, "model": "ishtar_common.importtarget", "fields": { "comment": "", - "target": "report_delivery_date", - "column": 298, - "formater_type": 25, + "target": "find__material_types", + "column": 346, + "formater_type": 20, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 373, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__object_types", + "column": 349, + "formater_type": 26, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 376, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__remarkabilities", + "column": 352, + "formater_type": 44, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 381, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__dimensions_comment", + "column": 357, + "formater_type": 16, + "concat_str": "", + "regexp_filter": null, + "concat": false, + "force_new": false + } + }, + { + "pk": 387, + "model": "ishtar_common.importtarget", + "fields": { + "comment": "", + "target": "find__image", + "column": 363, + "formater_type": 27, "concat_str": "", "regexp_filter": null, "concat": false, @@ -5708,6 +7611,15 @@ } }, { + "pk": 42, + "model": "ishtar_common.formatertype", + "fields": { + "formater_type": "TypeFormater", + "many_split": "", + "options": "archaeological_context_records.models.ActivityType" + } + }, + { "pk": 24, "model": "ishtar_common.formatertype", "fields": { @@ -5753,6 +7665,15 @@ } }, { + "pk": 43, + "model": "ishtar_common.formatertype", + "fields": { + "formater_type": "TypeFormater", + "many_split": "&", + "options": "archaeological_finds.models.IntegrityType" + } + }, + { "pk": 20, "model": "ishtar_common.formatertype", "fields": { @@ -5780,12 +7701,12 @@ } }, { - "pk": 40, + "pk": 44, "model": "ishtar_common.formatertype", "fields": { "formater_type": "TypeFormater", "many_split": "&", - "options": "archaeological_operations.models.archaeological_sites" + "options": "archaeological_finds.models.RemarkabilityType" } }, { @@ -5807,6 +7728,15 @@ } }, { + "pk": 41, + "model": "ishtar_common.formatertype", + "fields": { + "formater_type": "TypeFormater", + "many_split": "&", + "options": "archaeological_operations.models.RemainType" + } + }, + { "pk": 37, "model": "ishtar_common.formatertype", "fields": { @@ -5888,6 +7818,15 @@ } }, { + "pk": 45, + "model": "ishtar_common.formatertype", + "fields": { + "formater_type": "UnicodeFormater", + "many_split": "", + "options": "20" + } + }, + { "pk": 30, "model": "ishtar_common.formatertype", "fields": { @@ -6311,5 +8250,203 @@ "concat": false, "force_new": false } + }, + { + "pk": 34, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 303, + "concat_str": "", + "field_name": "external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 33, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 304, + "concat_str": "-", + "field_name": "external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 31, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 302, + "concat_str": "-", + "field_name": "parcel__external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 32, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 302, + "concat_str": "-", + "field_name": "external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 35, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 311, + "concat_str": "-", + "field_name": "external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 36, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 312, + "concat_str": "-", + "field_name": "external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 37, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 314, + "concat_str": "-", + "field_name": "external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 38, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 336, + "concat_str": "-", + "field_name": "external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 39, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 336, + "concat_str": "-", + "field_name": "find__external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 40, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 337, + "concat_str": "-", + "field_name": "external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 41, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 337, + "concat_str": "-", + "field_name": "find__external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 42, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 338, + "concat_str": "-", + "field_name": "external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 43, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 338, + "concat_str": "-", + "field_name": "find__external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 44, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 339, + "concat_str": "-", + "field_name": "external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 45, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 339, + "concat_str": "-", + "field_name": "find__external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 46, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 340, + "concat_str": "", + "field_name": "find__label", + "concat": false, + "force_new": false + } + }, + { + "pk": 47, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 340, + "concat_str": "-", + "field_name": "external_id", + "concat": false, + "force_new": false + } + }, + { + "pk": 48, + "model": "ishtar_common.importerduplicatefield", + "fields": { + "column": 340, + "concat_str": "-", + "field_name": "find__external_id", + "concat": false, + "force_new": false + } } ] diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index 043b03f61..42d74f9ef 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -33,6 +33,7 @@ from django.utils.translation import ugettext_lazy as _ import models import widgets +from wizards import MultiValueDict # from formwizard.forms import NamedUrlSessionFormWizard @@ -224,7 +225,6 @@ class ManageOldType(object): if prefix not in k: continue new_k = k[len(prefix) + 1:] - items = [] if hasattr(kwargs['data'], 'getlist'): items = kwargs['data'].getlist(k) else: @@ -238,7 +238,6 @@ class ManageOldType(object): if 'initial' in kwargs and kwargs['initial']: for k in kwargs['initial']: if k not in self.init_data or not self.init_data[k]: - items = [] if hasattr(kwargs['initial'], 'getlist'): items = kwargs['initial'].getlist(k) else: @@ -249,6 +248,7 @@ class ManageOldType(object): if k not in self.init_data: self.init_data[k] = [] self.init_data[k].append(val) + self.init_data = MultiValueDict(self.init_data) super(ManageOldType, self).__init__(*args, **kwargs) diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index c15999721..7ab09f9f7 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -40,7 +40,7 @@ from forms import FinalForm, FormSet, reverse_lazy, name_validator, \ def get_town_field(label=_(u"Town"), required=True): help_text = _( - u"<p>Type name, department code and/or postal code of the " + u"<p>Type name, department code of the " u"town you would like to select. The search is insensitive to case." u"</p>\n<p>Only the first twenty results are displayed but specifying " u"the department code is generally sufficient to get the appropriate " @@ -241,7 +241,7 @@ class ManualMerge(object): except ValueError: pass if len(values) < 2: - raise forms.ValidationError(_(u"At leat two items have to be " + raise forms.ValidationError(_(u"At least two items have to be " u"selected.")) self.cleaned_data['to_merge'] = values return values diff --git a/ishtar_common/ishtar_menu.py b/ishtar_common/ishtar_menu.py index 1f30bec0f..5ed8cad37 100644 --- a/ishtar_common/ishtar_menu.py +++ b/ishtar_common/ishtar_menu.py @@ -30,7 +30,7 @@ MENU_SECTIONS = [ childs=[ SectionItem( 'account', _(u"Account"), - childs=[MenuItem('account_management', _(u"Add/modify"), + childs=[MenuItem('account_management', _(u"Addition/modification"), model=models.IshtarUser, access_controls=['add_ishtaruser', ]), MenuItem('account_deletion', _(u"Deletion"), @@ -67,7 +67,7 @@ MENU_SECTIONS = [ model=models.Person, access_controls=['merge_person']), MenuItem( - 'person_deletion', _(u"Delete"), + 'person_deletion', _(u"Deletion"), model=models.Person, access_controls=['change_person', 'change_own_person']), ]), @@ -98,7 +98,7 @@ MENU_SECTIONS = [ model=models.Organization, access_controls=['merge_organization']), MenuItem( - 'organization_deletion', _(u"Delete"), + 'organization_deletion', _(u"Deletion"), model=models.Organization, access_controls=['change_organization', 'change_own_organization']), diff --git a/ishtar_common/locale/django.pot b/ishtar_common/locale/django.pot index 5110bca31..2a60902e5 100644 --- a/ishtar_common/locale/django.pot +++ b/ishtar_common/locale/django.pot @@ -5,6 +5,7 @@ # Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata # Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata # Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata +# Valérie-Emma Leroux <emma@iggdrasil.net>, 2017. #zanata msgid "" msgstr "" @@ -127,40 +128,40 @@ msgstr "" msgid "\"%(value)s\" not in %(values)s" msgstr "" -#: forms.py:55 +#: forms.py:73 msgid "Enter a valid name consisting of letters, spaces and hyphens." msgstr "" -#: forms.py:71 forms_common.py:618 +#: forms.py:89 forms_common.py:618 msgid "Confirm" msgstr "" -#: forms.py:76 +#: forms.py:94 msgid "Are you sure you want to delete?" msgstr "" -#: forms.py:85 +#: forms.py:103 msgid "There are identical items." msgstr "" -#: forms.py:123 forms.py:124 +#: forms.py:141 forms.py:142 msgid "Closing date" msgstr "" -#: forms.py:137 +#: forms.py:155 msgid "You should select an item." msgstr "" -#: forms.py:138 +#: forms.py:156 msgid "Add a new item" msgstr "" -#: forms.py:245 models.py:1310 +#: forms.py:262 models.py:1367 msgid "Template" msgstr "" #: forms_common.py:41 forms_common.py:59 forms_common.py:182 -#: forms_common.py:406 models.py:1376 models.py:2758 +#: forms_common.py:406 models.py:1433 models.py:2825 #: templates/blocks/JQueryAdvancedTown.html:19 #: templates/ishtar/sheet_organization.html:13 msgid "Town" @@ -168,16 +169,16 @@ msgstr "" #: forms_common.py:43 msgid "" -"<p>Type name, department code and/or postal code of the town you would like " -"to select. The search is insensitive to case.</p>\n" +"<p>Type name, department code of the town you would like to select. The " +"search is insensitive to case.</p>\n" "<p>Only the first twenty results are displayed but specifying the department " "code is generally sufficient to get the appropriate result.</p>\n" "<p class='example'>For instance type \"saint denis 93\" for getting the " "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:1546 -#: models.py:2384 models.py:2566 models.py:2628 +#: forms_common.py:68 forms_common.py:855 ishtar_menu.py:47 models.py:1606 +#: models.py:2452 models.py:2634 models.py:2695 #: templates/ishtar/sheet_person.html:4 msgid "Person" msgstr "" @@ -189,63 +190,63 @@ msgid "" msgstr "" #: forms_common.py:170 forms_common.py:327 forms_common.py:451 -#: ishtar_menu.py:75 models.py:1547 models.py:2273 +#: ishtar_menu.py:75 models.py:1607 models.py:2338 #: 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:977 models.py:1309 -#: models.py:1592 models.py:1810 models.py:2267 models.py:2370 models.py:2744 +#: forms_common.py:376 forms_common.py:446 models.py:1034 models.py:1366 +#: models.py:1652 models.py:1871 models.py:2332 models.py:2438 models.py:2811 #: templates/ishtar/sheet_organization.html:8 #: templates/ishtar/sheet_organization.html:21 msgid "Name" msgstr "" -#: forms_common.py:174 models.py:1531 models.py:1941 +#: forms_common.py:174 models.py:1588 models.py:2002 msgid "Organization type" msgstr "" -#: forms_common.py:176 forms_common.py:400 models.py:1371 +#: forms_common.py:176 forms_common.py:400 models.py:1428 #: templates/ishtar/sheet_organization.html:10 msgid "Address" msgstr "" -#: forms_common.py:178 forms_common.py:403 models.py:1372 +#: forms_common.py:178 forms_common.py:403 models.py:1429 #: templates/ishtar/sheet_organization.html:11 msgid "Address complement" msgstr "" -#: forms_common.py:180 forms_common.py:404 models.py:1374 +#: forms_common.py:180 forms_common.py:404 models.py:1431 #: templates/ishtar/sheet_organization.html:12 msgid "Postal code" msgstr "" -#: forms_common.py:183 forms_common.py:407 models.py:1377 +#: forms_common.py:183 forms_common.py:407 models.py:1434 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:1404 +#: forms_common.py:448 forms_common.py:572 models.py:1461 msgid "Email" msgstr "" -#: forms_common.py:186 forms_common.py:383 models.py:1389 +#: forms_common.py:186 forms_common.py:383 models.py:1446 #: 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:1401 +#: forms_common.py:187 forms_common.py:392 models.py:1458 #: 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:1969 -#: models.py:2269 models.py:2679 templates/sheet_ope.html:85 +#: forms_common.py:211 forms_common.py:325 forms_common.py:449 models.py:2032 +#: models.py:2334 models.py:2746 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 @@ -253,12 +254,12 @@ msgstr "" msgid "Type" msgstr "" -#: forms_common.py:220 views.py:139 +#: forms_common.py:220 views.py:142 msgid "Organization search" msgstr "" #: forms_common.py:244 -msgid "At leat two items have to be selected." +msgid "At least two items have to be selected." msgstr "" #: forms_common.py:262 @@ -269,12 +270,12 @@ msgstr "" msgid "Organization to merge" msgstr "" -#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2368 +#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2436 #: templates/ishtar/sheet_organization.html:22 msgid "Surname" msgstr "" -#: forms_common.py:339 forms_common.py:434 views.py:104 +#: forms_common.py:339 forms_common.py:434 views.py:107 msgid "Person search" msgstr "" @@ -287,25 +288,25 @@ msgstr "" msgid "Identity" msgstr "" -#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:1942 -#: models.py:2362 models.py:2364 models.py:2676 templates/sheet_ope.html:104 +#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:2003 +#: models.py:2430 models.py:2432 models.py:2743 templates/sheet_ope.html:104 #: templates/ishtar/blocks/window_tables/documents.html:7 msgid "Title" msgstr "" -#: forms_common.py:372 models.py:2366 +#: forms_common.py:372 models.py:2434 msgid "Salutation" msgstr "" -#: forms_common.py:378 models.py:2372 +#: forms_common.py:378 models.py:2440 msgid "Raw name" msgstr "" -#: forms_common.py:381 models.py:1390 +#: forms_common.py:381 models.py:1447 msgid "Phone description" msgstr "" -#: forms_common.py:384 models.py:1392 models.py:1394 +#: forms_common.py:384 models.py:1449 models.py:1451 msgid "Phone description 2" msgstr "" @@ -313,11 +314,11 @@ msgstr "" msgid "Phone 2" msgstr "" -#: forms_common.py:388 models.py:1398 +#: forms_common.py:388 models.py:1455 msgid "Phone description 3" msgstr "" -#: forms_common.py:390 models.py:1396 +#: forms_common.py:390 models.py:1453 msgid "Phone 3" msgstr "" @@ -325,23 +326,23 @@ msgstr "" msgid "Current organization" msgstr "" -#: forms_common.py:409 models.py:1379 +#: forms_common.py:409 models.py:1436 msgid "Other address: address" msgstr "" -#: forms_common.py:412 models.py:1382 +#: forms_common.py:412 models.py:1439 msgid "Other address: address complement" msgstr "" -#: forms_common.py:414 models.py:1383 +#: forms_common.py:414 models.py:1440 msgid "Other address: postal code" msgstr "" -#: forms_common.py:416 models.py:1385 +#: forms_common.py:416 models.py:1442 msgid "Other address: town" msgstr "" -#: forms_common.py:418 models.py:1387 +#: forms_common.py:418 models.py:1444 msgid "Other address: country" msgstr "" @@ -357,7 +358,7 @@ msgstr "" msgid "Account search" msgstr "" -#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2321 +#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2386 msgid "Person type" msgstr "" @@ -365,7 +366,7 @@ msgstr "" msgid "Account" msgstr "" -#: forms_common.py:575 wizards.py:1192 +#: forms_common.py:575 wizards.py:1256 msgid "New password" msgstr "" @@ -389,7 +390,7 @@ msgstr "" msgid "Send the new password by email?" msgstr "" -#: forms_common.py:628 forms_common.py:641 models.py:2759 +#: forms_common.py:628 forms_common.py:641 models.py:2826 msgid "Towns" msgstr "" @@ -405,7 +406,7 @@ msgstr "" msgid "Documentation informations" msgstr "" -#: forms_common.py:775 forms_common.py:823 models.py:1943 models.py:2653 +#: forms_common.py:775 forms_common.py:823 models.py:2004 models.py:2720 msgid "Source type" msgstr "" @@ -417,37 +418,37 @@ msgstr "" msgid "Internal reference" msgstr "" -#: forms_common.py:783 models.py:2690 +#: forms_common.py:783 models.py:2757 msgid "Numerical ressource (web address)" msgstr "" -#: forms_common.py:784 models.py:2692 +#: forms_common.py:784 models.py:2759 msgid "Receipt date" msgstr "" -#: forms_common.py:786 models.py:2096 models.py:2694 +#: forms_common.py:786 models.py:2161 models.py:2761 msgid "Creation date" msgstr "" -#: forms_common.py:789 models.py:2697 +#: forms_common.py:789 models.py:2764 msgid "Receipt date in documentation" msgstr "" -#: forms_common.py:791 forms_common.py:827 models.py:317 models.py:577 -#: models.py:1837 models.py:2376 models.py:2704 +#: forms_common.py:791 forms_common.py:827 models.py:323 models.py:634 +#: models.py:1898 models.py:2444 models.py:2771 msgid "Comment" msgstr "" -#: forms_common.py:793 forms_common.py:826 models.py:979 models.py:1596 -#: models.py:1769 models.py:1811 models.py:2703 templates/sheet_ope.html:128 +#: forms_common.py:793 forms_common.py:826 models.py:1036 models.py:1656 +#: models.py:1830 models.py:1872 models.py:2770 templates/sheet_ope.html:128 msgid "Description" msgstr "" -#: forms_common.py:796 models.py:2705 +#: forms_common.py:796 models.py:2772 msgid "Additional information" msgstr "" -#: forms_common.py:798 forms_common.py:830 models.py:2707 +#: forms_common.py:798 forms_common.py:830 models.py:2774 msgid "Has a duplicate" msgstr "" @@ -462,7 +463,7 @@ msgid "" "p>" msgstr "" -#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2633 +#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2700 #: templates/ishtar/wizard/wizard_person_deletion.html:124 msgid "Author" msgstr "" @@ -475,7 +476,7 @@ msgstr "" msgid "Would you like to delete this documentation?" msgstr "" -#: forms_common.py:856 models.py:1944 models.py:2621 models.py:2630 +#: forms_common.py:856 models.py:2005 models.py:2688 models.py:2697 msgid "Author type" msgstr "" @@ -487,7 +488,7 @@ msgstr "" msgid "There are identical authors." msgstr "" -#: forms_common.py:893 models.py:2634 models.py:2686 +#: forms_common.py:893 models.py:2701 models.py:2753 #: templates/sheet_ope.html:106 #: templates/ishtar/blocks/window_tables/documents.html:9 msgid "Authors" @@ -498,14 +499,14 @@ msgid "Administration" msgstr "" #: ishtar_menu.py:33 -msgid "Add/modify" +msgid "Addition/modification" msgstr "" -#: ishtar_menu.py:36 +#: ishtar_menu.py:36 ishtar_menu.py:70 ishtar_menu.py:101 msgid "Deletion" msgstr "" -#: ishtar_menu.py:39 models.py:1105 views.py:1484 +#: ishtar_menu.py:39 models.py:1162 views.py:1530 msgid "Global variables" msgstr "" @@ -533,20 +534,15 @@ msgstr "" msgid "Manual merge" msgstr "" -#: ishtar_menu.py:70 ishtar_menu.py:101 models.py:2133 widgets.py:110 -#: templates/ishtar/form_delete.html:11 -msgid "Delete" -msgstr "" - -#: ishtar_menu.py:109 models.py:2107 +#: ishtar_menu.py:109 models.py:2172 msgid "Imports" msgstr "" -#: ishtar_menu.py:112 views.py:1492 +#: ishtar_menu.py:112 views.py:1538 msgid "New import" msgstr "" -#: ishtar_menu.py:116 views.py:1506 +#: ishtar_menu.py:116 views.py:1552 msgid "Current imports" msgstr "" @@ -554,212 +550,212 @@ msgstr "" msgid "Old imports" msgstr "" -#: models.py:178 +#: models.py:183 msgid "Not a valid item." msgstr "" -#: models.py:191 +#: models.py:196 msgid "A selected item is not a valid item." msgstr "" -#: models.py:202 +#: models.py:207 msgid "This item already exists." msgstr "" -#: models.py:313 models.py:576 models.py:1344 models.py:1356 +#: models.py:319 models.py:633 models.py:1401 models.py:1413 models.py:1827 msgid "Label" msgstr "" -#: models.py:315 +#: models.py:321 msgid "Textual ID" msgstr "" -#: models.py:318 models.py:579 models.py:1313 +#: models.py:324 models.py:636 models.py:1370 msgid "Available" msgstr "" -#: models.py:598 models.py:1883 +#: models.py:655 models.py:1944 msgid "Key" msgstr "" -#: models.py:604 +#: models.py:661 msgid "Specific key to an import" msgstr "" -#: models.py:696 +#: models.py:753 msgid "Last editor" msgstr "" -#: models.py:699 +#: models.py:756 msgid "Creator" msgstr "" -#: models.py:841 models.py:2770 +#: models.py:898 models.py:2837 msgid "Order" msgstr "" -#: models.py:842 +#: models.py:899 msgid "Symmetrical" msgstr "" -#: models.py:843 +#: models.py:900 msgid "Tiny label" msgstr "" -#: models.py:857 +#: models.py:914 msgid "Cannot have symmetrical and an inverse_relation" msgstr "" -#: models.py:971 +#: models.py:1028 msgid "Euro" msgstr "" -#: models.py:972 +#: models.py:1029 msgid "US dollar" msgstr "" -#: models.py:978 models.py:1594 +#: models.py:1035 models.py:1654 msgid "Slug" msgstr "" -#: models.py:980 +#: models.py:1037 msgid "Files module" msgstr "" -#: models.py:981 +#: models.py:1038 msgid "Context records module" msgstr "" -#: models.py:983 +#: models.py:1040 msgid "Finds module" msgstr "" -#: models.py:984 +#: models.py:1041 msgid "Need context records module" msgstr "" -#: models.py:986 +#: models.py:1043 msgid "Warehouses module" msgstr "" -#: models.py:987 +#: models.py:1044 msgid "Need finds module" msgstr "" -#: models.py:989 +#: models.py:1046 msgid "Home page" msgstr "" -#: models.py:990 +#: models.py:1047 #, 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:994 +#: models.py:1051 msgid "File external id" msgstr "" -#: models.py:996 +#: models.py:1053 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:1001 +#: models.py:1058 msgid "Parcel external id" msgstr "" -#: models.py:1004 +#: models.py:1061 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:1009 +#: models.py:1066 msgid "Context record external id" msgstr "" -#: models.py:1011 +#: models.py:1068 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:1016 +#: models.py:1073 msgid "Base find external id" msgstr "" -#: models.py:1018 +#: models.py:1075 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:1023 +#: models.py:1080 msgid "Find external id" msgstr "" -#: models.py:1025 +#: models.py:1082 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:1030 +#: models.py:1087 msgid "Raw name for person" msgstr "" -#: models.py:1032 +#: models.py:1089 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:1036 +#: models.py:1093 msgid "Current active" msgstr "" -#: models.py:1037 +#: models.py:1094 msgid "Currency" msgstr "" -#: models.py:1041 +#: models.py:1098 msgid "Ishtar site profile" msgstr "" -#: models.py:1042 +#: models.py:1099 msgid "Ishtar site profiles" msgstr "" -#: models.py:1098 +#: models.py:1155 msgid "Variable name" msgstr "" -#: models.py:1099 +#: models.py:1156 msgid "Description of the variable" msgstr "" -#: models.py:1101 models.py:1884 +#: models.py:1158 models.py:1945 msgid "Value" msgstr "" -#: models.py:1104 +#: models.py:1161 msgid "Global variable" msgstr "" -#: models.py:1214 models.py:1244 +#: models.py:1271 models.py:1301 msgid "Total" msgstr "" -#: models.py:1221 models.py:1345 models.py:1357 +#: models.py:1278 models.py:1402 models.py:1414 #: templates/ishtar/sheet_person.html:22 #: templates/ishtar/dashboards/dashboard_main_detail.html:141 #: templates/ishtar/dashboards/dashboard_main_detail_users.html:26 @@ -767,718 +763,742 @@ msgstr "" msgid "Number" msgstr "" -#: models.py:1308 +#: models.py:1365 msgid "Administrative Act" msgstr "" -#: models.py:1312 +#: models.py:1369 msgid "Associated object" msgstr "" -#: models.py:1316 +#: models.py:1373 msgid "Document template" msgstr "" -#: models.py:1317 +#: models.py:1374 msgid "Document templates" msgstr "" -#: models.py:1348 models.py:1358 models.py:2091 +#: models.py:1405 models.py:1415 models.py:2156 msgid "State" msgstr "" -#: models.py:1362 templates/blocks/JQueryAdvancedTown.html:12 +#: models.py:1419 templates/blocks/JQueryAdvancedTown.html:12 msgid "Department" msgstr "" -#: models.py:1363 +#: models.py:1420 msgid "Departments" msgstr "" -#: models.py:1400 +#: models.py:1457 msgid "Raw phone" msgstr "" -#: models.py:1406 +#: models.py:1463 msgid "Alternative address is prefered" msgstr "" -#: models.py:1445 +#: models.py:1502 msgid "Tel: " msgstr "" -#: models.py:1449 +#: models.py:1506 msgid "Mobile: " msgstr "" -#: models.py:1453 +#: models.py:1510 msgid "Email: " msgstr "" -#: models.py:1458 +#: models.py:1515 msgid "Merge key" msgstr "" -#: models.py:1532 +#: models.py:1589 msgid "Organization types" msgstr "" -#: models.py:1548 views.py:234 +#: models.py:1608 views.py:237 msgid "Operation" msgstr "" -#: models.py:1550 +#: models.py:1610 msgid "Archaeological site" msgstr "" -#: models.py:1551 +#: models.py:1611 msgid "Parcels" msgstr "" -#: models.py:1553 +#: models.py:1613 msgid "Operation source" msgstr "" -#: models.py:1556 views.py:1299 views.py:1350 +#: models.py:1616 views.py:1346 views.py:1396 msgid "Archaeological files" msgstr "" -#: models.py:1558 views.py:1302 views.py:1358 +#: models.py:1618 views.py:1349 views.py:1404 msgid "Context records" msgstr "" -#: models.py:1560 +#: models.py:1620 msgid "Context record relations" msgstr "" -#: models.py:1562 views.py:1304 views.py:1361 -msgid "Finds" +#: models.py:1622 +msgid "Base finds" msgstr "" -#: models.py:1598 templates/ishtar/dashboards/dashboard_main.html:25 +#: models.py:1658 templates/ishtar/dashboards/dashboard_main.html:25 msgid "Users" msgstr "" -#: models.py:1600 +#: models.py:1660 msgid "Associated model" msgstr "" -#: models.py:1603 +#: models.py:1663 msgid "Is template" msgstr "" -#: models.py:1604 +#: models.py:1664 msgid "Unicity keys (separator \";\")" msgstr "" -#: models.py:1608 +#: models.py:1668 msgid "Importer - Type" msgstr "" -#: models.py:1609 +#: models.py:1669 msgid "Importer - Types" msgstr "" -#: models.py:1699 +#: models.py:1759 msgid "Importer - Default" msgstr "" -#: models.py:1700 +#: models.py:1760 msgid "Importer - Defaults" msgstr "" -#: models.py:1735 +#: models.py:1795 msgid "Importer - Default value" msgstr "" -#: models.py:1736 +#: models.py:1796 msgid "Importer - Default values" msgstr "" -#: models.py:1768 +#: models.py:1829 msgid "Column number" msgstr "" -#: models.py:1771 +#: models.py:1832 msgid "Required" msgstr "" -#: models.py:1774 +#: models.py:1835 msgid "Importer - Column" msgstr "" -#: models.py:1775 +#: models.py:1836 msgid "Importer - Columns" msgstr "" -#: models.py:1795 +#: models.py:1856 msgid "Field name" msgstr "" -#: models.py:1797 models.py:1831 +#: models.py:1858 models.py:1892 msgid "Force creation of new items" msgstr "" -#: models.py:1799 models.py:1833 +#: models.py:1860 models.py:1894 msgid "Concatenate with existing" msgstr "" -#: models.py:1801 models.py:1835 +#: models.py:1862 models.py:1896 msgid "Concatenate character" msgstr "" -#: models.py:1805 +#: models.py:1866 msgid "Importer - Duplicate field" msgstr "" -#: models.py:1806 +#: models.py:1867 msgid "Importer - Duplicate fields" msgstr "" -#: models.py:1813 +#: models.py:1874 msgid "Regular expression" msgstr "" -#: models.py:1816 +#: models.py:1877 msgid "Importer - Regular expression" msgstr "" -#: models.py:1817 +#: models.py:1878 msgid "Importer - Regular expressions" msgstr "" -#: models.py:1840 +#: models.py:1901 msgid "Importer - Target" msgstr "" -#: models.py:1841 +#: models.py:1902 msgid "Importer - Targets" msgstr "" -#: models.py:1865 views.py:518 +#: models.py:1926 views.py:536 msgid "True" msgstr "" -#: models.py:1866 views.py:520 +#: models.py:1927 views.py:538 msgid "False" msgstr "" -#: models.py:1885 +#: models.py:1946 msgid "Is set" msgstr "" -#: models.py:1892 +#: models.py:1953 msgid "Importer - Target key" msgstr "" -#: models.py:1893 +#: models.py:1954 msgid "Importer - Targets keys" msgstr "" -#: models.py:1945 models.py:2669 models.py:2682 +#: models.py:2006 models.py:2736 models.py:2749 msgid "Format" msgstr "" -#: models.py:1946 models.py:2774 +#: models.py:2007 models.py:2841 msgid "Operation type" msgstr "" -#: models.py:1947 +#: models.py:2008 msgid "Period" msgstr "" -#: models.py:1948 +#: models.py:2009 msgid "Report state" msgstr "" -#: models.py:1949 +#: models.py:2010 +msgid "Remain type" +msgstr "" + +#: models.py:2011 msgid "Unit" msgstr "" -#: models.py:1950 +#: models.py:2012 +msgid "Activity type" +msgstr "" + +#: models.py:2013 msgid "Material" msgstr "" -#: models.py:1952 +#: models.py:2015 msgid "Conservatory state" msgstr "" -#: models.py:1953 +#: models.py:2016 msgid "Preservation type" msgstr "" -#: models.py:1954 +#: models.py:2017 msgid "Object type" msgstr "" -#: models.py:1956 +#: models.py:2019 msgid "Identification type" msgstr "" -#: models.py:1958 +#: models.py:2021 msgid "Context record relation type" msgstr "" -#: models.py:1959 models.py:2661 +#: models.py:2022 models.py:2728 msgid "Support type" msgstr "" -#: models.py:1965 +#: models.py:2028 msgid "Integer" msgstr "" -#: models.py:1966 +#: models.py:2029 msgid "Float" msgstr "" -#: models.py:1967 +#: models.py:2030 msgid "String" msgstr "" -#: models.py:1968 templates/sheet_ope.html:86 +#: models.py:2031 templates/sheet_ope.html:86 msgid "Date" msgstr "" -#: models.py:1970 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83 +#: models.py:2033 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83 #: templates/ishtar/dashboards/dashboard_main_detail.html:126 msgid "Year" msgstr "" -#: models.py:1971 +#: models.py:2034 msgid "String to boolean" msgstr "" -#: models.py:1972 +#: models.py:2035 msgctxt "filesystem" msgid "File" msgstr "" -#: models.py:1973 +#: models.py:2036 msgid "Unknow type" msgstr "" -#: models.py:1989 +#: models.py:2052 msgid "4 digit year. e.g.: \"2015\"" msgstr "" -#: models.py:1990 +#: models.py:2053 msgid "4 digit year/month/day. e.g.: \"2015/02/04\"" msgstr "" -#: models.py:1991 +#: models.py:2054 msgid "Day/month/4 digit year. e.g.: \"04/02/2015\"" msgstr "" -#: models.py:2001 +#: models.py:2064 msgid "Options" msgstr "" -#: models.py:2003 +#: models.py:2066 msgid "Split character(s)" msgstr "" -#: models.py:2007 +#: models.py:2070 msgid "Importer - Formater type" msgstr "" -#: models.py:2008 +#: models.py:2071 msgid "Importer - Formater types" msgstr "" -#: models.py:2055 templates/ishtar/dashboards/dashboard_main_detail.html:63 +#: models.py:2120 templates/ishtar/dashboards/dashboard_main_detail.html:63 msgid "Created" msgstr "" -#: models.py:2056 +#: models.py:2121 msgid "Analyse in progress" msgstr "" -#: models.py:2057 +#: models.py:2122 msgid "Analysed" msgstr "" -#: models.py:2058 +#: models.py:2123 msgid "Import pending" msgstr "" -#: models.py:2059 +#: models.py:2124 msgid "Import in progress" msgstr "" -#: models.py:2060 +#: models.py:2125 msgid "Finished with errors" msgstr "" -#: models.py:2061 +#: models.py:2126 msgid "Finished" msgstr "" -#: models.py:2062 +#: models.py:2127 msgid "Archived" msgstr "" -#: models.py:2074 +#: models.py:2139 msgid "Imported file" msgstr "" -#: models.py:2077 +#: models.py:2142 msgid "Associated images (zip file)" msgstr "" -#: models.py:2079 +#: models.py:2144 msgid "Encoding" msgstr "" -#: models.py:2081 +#: models.py:2146 msgid "Skip lines" msgstr "" -#: models.py:2082 templates/ishtar/import_list.html:47 +#: models.py:2147 templates/ishtar/import_list.html:47 msgid "Error file" msgstr "" -#: models.py:2085 +#: models.py:2150 msgid "Result file" msgstr "" -#: models.py:2088 templates/ishtar/import_list.html:53 +#: models.py:2153 templates/ishtar/import_list.html:53 msgid "Match file" msgstr "" -#: models.py:2094 +#: models.py:2159 msgid "Conservative import" msgstr "" -#: models.py:2099 +#: models.py:2164 msgid "End date" msgstr "" -#: models.py:2101 +#: models.py:2166 msgid "Remaining seconds" msgstr "" -#: models.py:2106 +#: models.py:2171 msgid "Import" msgstr "" -#: models.py:2123 +#: models.py:2188 msgid "Analyse" msgstr "" -#: models.py:2125 models.py:2128 +#: models.py:2190 models.py:2193 msgid "Re-analyse" msgstr "" -#: models.py:2126 +#: models.py:2191 msgid "Launch import" msgstr "" -#: models.py:2129 +#: models.py:2194 msgid "Re-import" msgstr "" -#: models.py:2130 +#: models.py:2195 msgid "Archive" msgstr "" -#: models.py:2132 +#: models.py:2197 msgid "Unarchive" msgstr "" -#: models.py:2274 +#: models.py:2198 widgets.py:129 templates/ishtar/form_delete.html:11 +msgid "Delete" +msgstr "" + +#: models.py:2339 msgid "Organizations" msgstr "" -#: models.py:2276 +#: models.py:2341 msgid "Can view all Organizations" msgstr "" -#: models.py:2277 +#: models.py:2342 msgid "Can view own Organization" msgstr "" -#: models.py:2278 +#: models.py:2343 msgid "Can add own Organization" msgstr "" -#: models.py:2280 +#: models.py:2345 msgid "Can change own Organization" msgstr "" -#: models.py:2282 +#: models.py:2347 msgid "Can delete own Organization" msgstr "" -#: models.py:2317 +#: models.py:2382 msgid "Groups" msgstr "" -#: models.py:2322 +#: models.py:2387 msgid "Person types" msgstr "" -#: models.py:2330 +#: models.py:2398 msgid "Title type" msgstr "" -#: models.py:2331 +#: models.py:2399 msgid "Title types" msgstr "" -#: models.py:2340 +#: models.py:2408 msgid "Mr" msgstr "" -#: models.py:2341 +#: models.py:2409 msgid "Miss" msgstr "" -#: models.py:2342 +#: models.py:2410 msgid "Mr and Mrs" msgstr "" -#: models.py:2343 +#: models.py:2411 msgid "Mrs" msgstr "" -#: models.py:2344 +#: models.py:2412 msgid "Doctor" msgstr "" -#: models.py:2374 +#: models.py:2442 msgid "Contact type" msgstr "" -#: models.py:2377 models.py:2441 +#: models.py:2445 models.py:2509 msgid "Types" msgstr "" -#: models.py:2380 +#: models.py:2448 msgid "Is attached to" msgstr "" -#: models.py:2385 +#: models.py:2453 msgid "Persons" msgstr "" -#: models.py:2387 +#: models.py:2455 msgid "Can view all Persons" msgstr "" -#: models.py:2388 +#: models.py:2456 msgid "Can view own Person" msgstr "" -#: models.py:2389 +#: models.py:2457 msgid "Can add own Person" msgstr "" -#: models.py:2390 +#: models.py:2458 msgid "Can change own Person" msgstr "" -#: models.py:2391 +#: models.py:2459 msgid "Can delete own Person" msgstr "" -#: models.py:2569 +#: models.py:2637 msgid "Advanced shortcut menu" msgstr "" -#: models.py:2572 +#: models.py:2640 msgid "Ishtar user" msgstr "" -#: models.py:2573 +#: models.py:2641 msgid "Ishtar users" msgstr "" -#: models.py:2616 +#: models.py:2683 msgid "To modify the password use the form in Auth > User" msgstr "" -#: models.py:2622 +#: models.py:2689 msgid "Author types" msgstr "" -#: models.py:2654 +#: models.py:2721 msgid "Source types" msgstr "" -#: models.py:2662 +#: models.py:2729 msgid "Support types" msgstr "" -#: models.py:2670 +#: models.py:2737 msgid "Formats" msgstr "" -#: models.py:2677 +#: models.py:2744 msgid "External ID" msgstr "" -#: models.py:2680 +#: models.py:2747 msgid "Support" msgstr "" -#: models.py:2684 +#: models.py:2751 msgid "Scale" msgstr "" -#: models.py:2698 +#: models.py:2765 msgid "Item number" msgstr "" -#: models.py:2699 +#: models.py:2766 msgid "Ref." msgstr "" -#: models.py:2702 +#: models.py:2769 msgid "Internal ref." msgstr "" -#: models.py:2745 +#: models.py:2812 msgid "Surface (m2)" msgstr "" -#: models.py:2746 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107 +#: models.py:2813 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107 msgid "Localisation" msgstr "" -#: models.py:2771 +#: models.py:2838 msgid "Is preventive" msgstr "" -#: models.py:2775 +#: models.py:2842 msgid "Operation types" msgstr "" -#: models.py:2804 +#: models.py:2871 msgid "Preventive" msgstr "" -#: models.py:2805 +#: models.py:2872 msgid "Research" msgstr "" -#: utils.py:74 +#: utils.py:81 msgid " (...)" msgstr "" -#: utils.py:107 +#: utils.py:114 msgid "Load another random image?" msgstr "" -#: views.py:111 +#: views.py:114 msgid "New person" msgstr "" -#: views.py:119 +#: views.py:122 msgid "Person modification" msgstr "" -#: views.py:134 +#: views.py:137 msgid "Person deletion" msgstr "" -#: views.py:145 +#: views.py:148 msgid "New organization" msgstr "" -#: views.py:152 +#: views.py:155 msgid "Organization modification" msgstr "" -#: views.py:168 +#: views.py:171 msgid "Organization deletion" msgstr "" -#: views.py:175 +#: views.py:178 msgid "Account management" msgstr "" -#: views.py:181 +#: views.py:184 msgid "Account deletion" msgstr "" -#: views.py:233 +#: views.py:236 msgid "Archaeological file" msgstr "" -#: views.py:236 +#: views.py:239 msgid "Context record" msgstr "" -#: views.py:238 +#: views.py:241 msgid "Find" msgstr "" -#: views.py:1238 views.py:1281 +#: views.py:243 +msgid "Treatment request" +msgstr "" + +#: views.py:244 +msgid "Treatment" +msgstr "" + +#: views.py:1285 views.py:1328 msgid "Operation not permitted." msgstr "" -#: views.py:1240 +#: views.py:1287 #, python-format msgid "New %s" msgstr "" -#: views.py:1300 views.py:1354 +#: views.py:1347 views.py:1400 msgid "Operations" msgstr "" -#: views.py:1553 templates/ishtar/import_list.html:43 +#: views.py:1351 views.py:1407 +msgid "Finds" +msgstr "" + +#: views.py:1599 templates/ishtar/import_list.html:43 msgid "Link unmatched items" msgstr "" -#: views.py:1568 +#: views.py:1614 msgid "Delete import" msgstr "" -#: views.py:1607 +#: views.py:1653 msgid "Merge persons" msgstr "" -#: views.py:1631 +#: views.py:1677 msgid "Select the main person" msgstr "" -#: views.py:1640 +#: views.py:1686 msgid "Merge organization" msgstr "" -#: views.py:1650 +#: views.py:1696 msgid "Select the main organization" msgstr "" -#: views.py:1690 views.py:1706 +#: views.py:1736 views.py:1752 msgid "Corporation manager" msgstr "" -#: widgets.py:239 widgets.py:347 widgets.py:463 +#: widgets.py:258 widgets.py:365 widgets.py:480 msgid "Search..." msgstr "" -#: widgets.py:623 templatetags/window_tables.py:79 +#: widgets.py:670 templatetags/window_tables.py:91 msgid "No results" msgstr "" -#: widgets.py:624 templatetags/window_tables.py:80 +#: widgets.py:671 templatetags/window_tables.py:92 msgid "Loading..." msgstr "" -#: widgets.py:625 +#: widgets.py:672 msgid "Remove" msgstr "" -#: wizards.py:323 templates/ishtar/import_delete.html:20 +#: wizards.py:342 templates/ishtar/import_delete.html:20 msgid "Yes" msgstr "" -#: wizards.py:325 +#: wizards.py:344 msgid "No" msgstr "" -#: wizards.py:1249 +#: wizards.py:1313 #, python-format msgid "[%(app_name)s] Account creation/modification" msgstr "" @@ -1518,11 +1538,11 @@ msgid "The %(app_name)s team" msgstr "" #: templates/base.html:41 -msgid "Searches in the shortcut menu deals with all items." +msgid "Searches in the shortcut menu deal with all items." msgstr "" #: templates/base.html:42 -msgid "Searches in the shortcut menu deals with only your items." +msgid "Searches in the shortcut menu deal with only your items." msgstr "" #: templates/base.html:49 @@ -1686,7 +1706,7 @@ msgid "Operator's reference code:" msgstr "" #: templates/sheet_ope.html:36 -msgid "Town planning service:" +msgid "Planning service:" msgstr "" #: templates/sheet_ope.html:37 @@ -1846,7 +1866,7 @@ msgid "where the magic happens." msgstr "" #: templates/window.html:40 templates/blocks/JQueryJqGrid.html:28 -#: templates/ishtar/manage_basket.html:9 +#: templates/ishtar/manage_basket.html:12 msgid "Add" msgstr "" @@ -1926,7 +1946,7 @@ msgstr "" #: templates/ishtar/import_list.html:58 templates/ishtar/merge.html:31 #: templates/ishtar/simple_form.html:7 #: templates/ishtar/wizard/confirm_wizard.html:42 -#: templates/ishtar/wizard/default_wizard.html:30 +#: templates/ishtar/wizard/default_wizard.html:31 #: templates/ishtar/wizard/search.html:13 #: templates/ishtar/wizard/validation_bar.html:4 msgid "Validate" @@ -1973,11 +1993,11 @@ msgstr "" msgid "Control file" msgstr "" -#: templates/ishtar/manage_basket.html:7 -msgid "Checking \"Select all\" only select the current page." +#: templates/ishtar/manage_basket.html:9 +msgid "Checking \"Select all\" only selects the current page." msgstr "" -#: templates/ishtar/manage_basket.html:10 +#: templates/ishtar/manage_basket.html:13 msgid "Basket content" msgstr "" @@ -2070,11 +2090,11 @@ msgid "No person in this organization" msgstr "" #: templates/ishtar/sheet_organization.html:38 -msgid "General contractor organization of archaelogical files" +msgid "General contractor organization of archaeological files" msgstr "" #: templates/ishtar/sheet_organization.html:43 -msgid "Town planning service of archaelogical files" +msgid "Planning service of archaeological files" msgstr "" #: templates/ishtar/sheet_person.html:21 @@ -2105,15 +2125,18 @@ msgid "Associated operations as responsible" msgstr "" #: templates/ishtar/sheet_person.html:80 -msgid "In charge of archaelogical files" +#: templates/ishtar/wizard/wizard_person_deletion.html:6 +msgid "In charge of archaeological files" msgstr "" #: templates/ishtar/sheet_person.html:85 -msgid "General contractor of archaelogical files" +#: templates/ishtar/wizard/wizard_person_deletion.html:14 +msgid "General contractor of archaeological files" msgstr "" #: templates/ishtar/sheet_person.html:90 -msgid "Responsible for town planning service of archaelogical files" +#: templates/ishtar/wizard/wizard_person_deletion.html:22 +msgid "Responsible for planning service of archaeological files" msgstr "" #: templates/ishtar/sheet_person.html:96 @@ -2185,8 +2208,8 @@ msgstr "" #: templates/ishtar/blocks/window_nav.html:17 msgid "" -"Are you sure to restore to this version? All changement made since this " -"version will be lost." +"Are you sure to restore to this version? All changes made since this version " +"will be lost." msgstr "" #: templates/ishtar/blocks/window_nav.html:22 @@ -2316,7 +2339,7 @@ msgstr "" msgid "Would you like to save them?" msgstr "" -#: templates/ishtar/wizard/default_wizard.html:36 +#: templates/ishtar/wizard/default_wizard.html:37 #: templates/ishtar/wizard/parcels_wizard.html:24 #: templates/ishtar/wizard/relations_wizard.html:23 #: templates/ishtar/wizard/search.html:20 @@ -2324,9 +2347,10 @@ msgstr "" msgid "Add/Modify" msgstr "" -#: templates/ishtar/wizard/default_wizard.html:58 +#: templates/ishtar/wizard/default_wizard.html:59 msgid "" -"The form has changed if you don't validate it all your changes will be lost." +"The form has changed. If you don't validate it, all your changes will be " +"lost." msgstr "" #: templates/ishtar/wizard/parcels_wizard.html:12 @@ -2385,18 +2409,6 @@ msgstr "" msgid "Adminact: operator of archaeological operations" msgstr "" -#: templates/ishtar/wizard/wizard_person_deletion.html:6 -msgid "In charge of archaeological files" -msgstr "" - -#: templates/ishtar/wizard/wizard_person_deletion.html:14 -msgid "General contractor of archaeological files" -msgstr "" - -#: templates/ishtar/wizard/wizard_person_deletion.html:22 -msgid "Responsible town planning service of archaeological files" -msgstr "" - #: templates/ishtar/wizard/wizard_person_deletion.html:30 msgid "Scientist in charge of archaeological files" msgstr "" diff --git a/ishtar_common/migrations/0011_generate_title.py b/ishtar_common/migrations/0011_generate_title.py index 3fcb82ee5..d30850cab 100644 --- a/ishtar_common/migrations/0011_generate_title.py +++ b/ishtar_common/migrations/0011_generate_title.py @@ -15,6 +15,7 @@ TYPE = ( class Migration(SchemaMigration): + no_dry_run = True def forwards(self, orm): keys = {} diff --git a/ishtar_common/migrations/0015_remove_ishtar_local_prefix.py b/ishtar_common/migrations/0015_remove_ishtar_local_prefix.py index 67624b039..38532daee 100644 --- a/ishtar_common/migrations/0015_remove_ishtar_local_prefix.py +++ b/ishtar_common/migrations/0015_remove_ishtar_local_prefix.py @@ -6,6 +6,7 @@ from django.db import models class Migration(SchemaMigration): + no_dry_run = True def forwards(self, orm): if not db.dry_run: diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 72a3432f8..ccb817adc 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -25,6 +25,7 @@ import copy import datetime from PIL import Image from importlib import import_module +import logging import os import re import shutil @@ -65,6 +66,9 @@ from ishtar_common.data_importer import Importer, ImportFormater, \ TypeFormater, YearFormater, StrToBoolean, FileFormater +logger = logging.getLogger(__name__) + + def post_save_user(sender, **kwargs): user = kwargs['instance'] try: @@ -95,6 +99,7 @@ class Imported(models.Model): class ValueGetter(object): _prefix = "" GET_VALUES_EXTRA = [] + EXTRA_FULL_FIELDS_LABELS = {} def get_values(self, prefix=''): if not prefix: @@ -249,9 +254,10 @@ class OwnPerms: query = cls.get_query_owns(user) if not query and not replace_query: return cls.objects.filter(pk__isnull=True) - q = cls.objects.filter(query) + if query: + q = cls.objects.filter(query) if replace_query: - q = cls.objects.filter(**replace_query) + q = cls.objects.filter(replace_query) if limit: items += list(q.order_by('-pk')[:limit]) else: @@ -408,10 +414,12 @@ class GeneralType(Cached, models.Model): new_vals = [] if not initial: return [] + if type(initial) not in (list, tuple): + initial = [initial] for value in initial: try: pk = int(value) - except ValueError: + except (ValueError, TypeError): continue if pk in type_pks: continue @@ -442,6 +450,7 @@ class GeneralType(Cached, models.Model): keys = ['__get_types'] keys += [u"{}".format(ex) for ex in exclude] + [ empty_first and 'empty_first' or ''] + [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: return value @@ -480,7 +489,10 @@ class GeneralType(Cached, models.Model): pass items = cls.objects.filter(**dct) if default and default != "None": - exclude.append(default.txt_idx) + if hasattr(default, 'txt_idx'): + exclude.append(default.txt_idx) + else: + exclude.append(default) if exclude: items = items.exclude(txt_idx__in=exclude) for item in items.order_by(*cls._meta.ordering).all(): @@ -659,7 +671,7 @@ class ImageModel(models.Model): null=True, max_length=255) IMAGE_MAX_SIZE = settings.IMAGE_MAX_SIZE THUMB_MAX_SIZE = settings.THUMB_MAX_SIZE - IMAGE_PREFIX = '/' + IMAGE_PREFIX = '' class Meta: abstract = True @@ -1487,15 +1499,15 @@ class Address(BaseHistorizedItem): if self.phone: if lbl: lbl += u"\n" - lbl += u"{}{}".format(unicode(_("Tel: ")), self.phone) + lbl += u"{} {}".format(unicode(_("Tel: ")), self.phone) if self.mobile_phone: if lbl: lbl += u"\n" - lbl += u"{}{}".format(unicode(_("Mobile: ")), self.mobile_phone) + lbl += u"{} {}".format(unicode(_("Mobile: ")), self.mobile_phone) if self.email: if lbl: lbl += u"\n" - lbl += u"{}{}".format(unicode(_("Email: ")), self.email) + lbl += u"{} {}".format(unicode(_("Email: ")), self.email) return lbl @@ -1607,7 +1619,7 @@ def get_importer_models(): ('archaeological_context_records.models.RecordRelations', _(u"Context record relations"))] + MODELS MODELS = [('archaeological_finds.models.BaseFind', - _(u"Finds")), ] + MODELS + _(u"Base finds")), ] + MODELS return MODELS @@ -1995,7 +2007,9 @@ TARGET_MODELS = [ ('archaeological_operations.models.OperationType', _(u"Operation type")), ('archaeological_operations.models.Period', _(u"Period")), ('archaeological_operations.models.ReportState', _(u"Report state")), + ('archaeological_operations.models.RemainType', _(u"Remain type")), ('archaeological_context_records.models.Unit', _(u"Unit")), + ('archaeological_context_records.models.ActivityType', _(u"Activity type")), ('archaeological_finds.models.MaterialType', _(u"Material")), ('archaeological_finds.models.ConservatoryState', _(u"Conservatory state")), @@ -2077,7 +2091,9 @@ class FormaterType(models.Model): kwargs['many_split'] = self.many_split if self.formater_type == 'TypeFormater': if self.options not in TARGET_MODELS_KEYS: - print('%s not in TARGET_MODELS_KEYS' % self.options) + logger.warning( + "**WARN FormaterType.get_formater_type**: {} " + "is not in TARGET_MODELS_KEYS".format(self.options)) return model = None if self.options in dir(): @@ -2630,7 +2646,6 @@ class IshtarUser(User): surname = user.first_name or default name = user.last_name or default email = user.email - person_type = None if user.is_superuser: ADMINISTRATOR, created = PersonType.objects.get_or_create( txt_idx='administrator') diff --git a/ishtar_common/static/js/ishtar.js b/ishtar_common/static/js/ishtar.js index 8abf23289..b5f4f1a79 100644 --- a/ishtar_common/static/js/ishtar.js +++ b/ishtar_common/static/js/ishtar.js @@ -102,6 +102,18 @@ function init_shortcut_fields(){ load_shortcut_menu ); }); + $("#current_treatment").change(function(){ + $.post('/' + url_path + 'update-current-item/', + {item:'treatment', value:$("#current_treatment").val()}, + load_shortcut_menu + ); + }); + $("#current_treatmentfile").change(function(){ + $.post('/' + url_path + 'update-current-item/', + {item:'treatmentfile', value:$("#current_treatmentfile").val()}, + load_shortcut_menu + ); + }); } function init_advanced_shortcut_fields(){ diff --git a/ishtar_common/static/media/style.css b/ishtar_common/static/media/style.css index 00fed380d..b1939eaf0 100644 --- a/ishtar_common/static/media/style.css +++ b/ishtar_common/static/media/style.css @@ -60,6 +60,10 @@ a.add-button, color:#000; } +#context_menu .blue { + color:#00a8ff; +} + .chosen-container, #context_menu .green, #context_menu .red, @@ -272,7 +276,9 @@ button.ui-widget-header:hover { .chosen-container-single .chosen-single{ background: none; background-color: #fff; - border-radius:4px; + border-radius: 0; + box-shadow: none; + border: 1px solid #fff; } textarea, @@ -847,6 +853,11 @@ ul.form .help_text{ .autocomplete{ width:350px; + font-size: 13px; +} + +#current_items .autocomplete{ + width:400px; } .delete td{ diff --git a/ishtar_common/templates/base.html b/ishtar_common/templates/base.html index 7101ed7de..dcd3043ca 100644 --- a/ishtar_common/templates/base.html +++ b/ishtar_common/templates/base.html @@ -38,8 +38,8 @@ var get_find_url = '{% url "get-find-shortcut" %}'; var activate_all_search_url = '{% url "activate-all-search" %}'; var activate_own_search_url = '{% url "activate-own-search" %}'; - var activate_all_search_msg = "{% trans 'Searches in the shortcut menu deals with all items.' %}"; - var activate_own_search_msg = "{% trans 'Searches in the shortcut menu deals with only your items.' %}"; + var activate_all_search_msg = "{% trans 'Searches in the shortcut menu deal with all items.' %}"; + var activate_own_search_msg = "{% trans 'Searches in the shortcut menu deal with only your items.' %}"; </script> </head> <body{% if current_theme%} id='{{current_theme}}'{%endif%}> diff --git a/ishtar_common/templates/ishtar/blocks/window_nav.html b/ishtar_common/templates/ishtar/blocks/window_nav.html index 4ce316217..3c52063f4 100644 --- a/ishtar_common/templates/ishtar/blocks/window_nav.html +++ b/ishtar_common/templates/ishtar/blocks/window_nav.html @@ -14,7 +14,7 @@ <span class='history-nav'> </span> {% endif %} {% if next %} - <a class='history-nav' title="{% trans 'Restore this version' %}" href="#" onclick='if(confirm("{%trans 'Are you sure to restore to this version? All changement made since this version will be lost.' %}")){load_url("{% url revert_url item.pk item.history_date|date:"c"%}");closeAllWindows();load_window("{% url show_url item.pk None %}");}'> + <a class='history-nav' title="{% trans 'Restore this version' %}" href="#" onclick='if(confirm("{%trans 'Are you sure to restore to this version? All changes made since this version will be lost.' %}")){load_url("{% url revert_url item.pk item.history_date|date:"c"%}");closeAllWindows();load_window("{% url show_url item.pk None %}");}'> <span class="fa-stack fa-lg"> <i class="fa fa-circle fa-stack-2x"></i> <i class="fa fa-history fa-stack-1x fa-inverse"></i> diff --git a/ishtar_common/templates/ishtar/manage_basket.html b/ishtar_common/templates/ishtar/manage_basket.html index 64793c46d..de17f3ad7 100644 --- a/ishtar_common/templates/ishtar/manage_basket.html +++ b/ishtar_common/templates/ishtar/manage_basket.html @@ -4,7 +4,10 @@ <h2>{{page_name}}{% trans ":"%} {{basket}}</h2> <form enctype="multipart/form-data" action="." method="post">{% csrf_token %} <div class='form'> -<p class='alert'><i class="fa fa-exclamation-triangle" aria-hidden="true"></i> {% trans 'Checking "Select all" only select the current page.' %}</p> +<p class='alert'> + <i class="fa fa-exclamation-triangle" aria-hidden="true"></i> + {% trans 'Checking "Select all" only selects the current page.' %} +</p> {{form}} <button id='add_to' onclick='return false'>{% trans "Add" %}</button> <h3>{% trans "Basket content" %}</h3> diff --git a/ishtar_common/templates/ishtar/sheet_organization.html b/ishtar_common/templates/ishtar/sheet_organization.html index 8a47c35f5..1f4bd77b7 100644 --- a/ishtar_common/templates/ishtar/sheet_organization.html +++ b/ishtar_common/templates/ishtar/sheet_organization.html @@ -35,12 +35,12 @@ {% endfor %} </table> -{% trans "General contractor organization of archaelogical files" as af %} +{% trans "General contractor organization of archaeological files" as af %} {% if item.general_contractor_files.count %} {% dynamic_table_document af 'files' 'corporation_general_contractor' item.pk '' output %} {% endif %} -{% trans "Town planning service of archaelogical files" as af %} +{% trans "Planning service of archaeological files" as af %} {% if item.planning_service_files.count %} {% dynamic_table_document af 'files' 'planning_service' item.pk '' output %} {% endif %} diff --git a/ishtar_common/templates/ishtar/sheet_person.html b/ishtar_common/templates/ishtar/sheet_person.html index c84c56996..bcf39c363 100644 --- a/ishtar_common/templates/ishtar/sheet_person.html +++ b/ishtar_common/templates/ishtar/sheet_person.html @@ -77,17 +77,17 @@ {% dynamic_table_document ao 'operations' 'in_charge' item.pk '' output %} {% endif %} -{% trans "In charge of archaelogical files" as af %} +{% trans "In charge of archaeological files" as af %} {% if item.file_responsability.count %} {% dynamic_table_document af 'files' 'in_charge' item.pk '' output %} {% endif %} -{% trans "General contractor of archaelogical files" as af %} +{% trans "General contractor of archaeological files" as af %} {% if item.general_contractor_files.count %} {% dynamic_table_document af 'files' 'general_contractor' item.pk '' output %} {% endif %} -{% trans "Responsible for town planning service of archaelogical files" as af %} +{% trans "Responsible for planning service of archaeological files" as af %} {% if item.responsible_town_planning_service_files.count %} {% dynamic_table_document af 'files' 'responsible_town_planning_service' item.pk '' output %} {% endif %} diff --git a/ishtar_common/templates/ishtar/wizard/confirm_wizard.html b/ishtar_common/templates/ishtar/wizard/confirm_wizard.html index 9007c867c..1fbaadcd1 100644 --- a/ishtar_common/templates/ishtar/wizard/confirm_wizard.html +++ b/ishtar_common/templates/ishtar/wizard/confirm_wizard.html @@ -6,9 +6,9 @@ <form action="." method="post">{% csrf_token %} <ul id='form_path'> {% for step in previous_steps %} - <li><button name="form_prev_step" value="{{forloop.counter0}}">{{step.form_label}}</button></li> + <li><button name="form_prev_step" value="{{forloop.counter0}}">{{step}}</button></li> {% endfor %} - <li class='current'><a href='#'>{{current_step.form_label}}</a></li> + <li class='current'><a href='#'>{{current_step_label}}</a></li> </ul> </form> <form action="." method="post">{% csrf_token %} diff --git a/ishtar_common/templates/ishtar/wizard/default_wizard.html b/ishtar_common/templates/ishtar/wizard/default_wizard.html index 6491b7a0f..fad1895bd 100644 --- a/ishtar_common/templates/ishtar/wizard/default_wizard.html +++ b/ishtar_common/templates/ishtar/wizard/default_wizard.html @@ -10,11 +10,11 @@ <form action="." method="post">{% csrf_token %} <ul id='form_path'> {% for step in previous_steps %} - <li><button class='change_step' name="form_prev_step" value="{{forloop.counter0}}">{{step.form_label}}</button></li> + <li><button class='change_step' name="form_prev_step" value="{{forloop.counter0}}">{{step}}</button></li> {% endfor %} - <li class='current'><a href='#'>{{current_step.form_label}}</a></li> + <li class='current'><a href='#'>{{current_step_label}}</a></li> {% for step in next_steps %} - <li><button class='change_step' name="form_prev_step" value="{{forloop.counter|add:previous_step_counter}}">{{step.form_label}}</button></li> + <li><button class='change_step' name="form_prev_step" value="{{forloop.counter|add:previous_step_counter}}">{{step}}</button></li> {% endfor %} </ul> </form> @@ -24,6 +24,7 @@ <div class='form'> {{ wizard.form.media }} {{ wizard.management_form }} +{% block form_head %}{% endblock %} {% block form_detail %} {% if wizard.form.forms %} {{ wizard.form.management_form }} @@ -55,7 +56,7 @@ $(document).ready(function(){ $('form :input').change(function(){form_changed=true;}); $('.change_step').click(function(){ if(!form_changed || - confirm("{% trans "The form has changed if you don't validate it all your changes will be lost." %}")){ + confirm("{% trans "The form has changed. If you don't validate it, all your changes will be lost." %}")){ return true; } return false; diff --git a/ishtar_common/templates/ishtar/wizard/wizard_person_deletion.html b/ishtar_common/templates/ishtar/wizard/wizard_person_deletion.html index 03b941c60..86286fad0 100644 --- a/ishtar_common/templates/ishtar/wizard/wizard_person_deletion.html +++ b/ishtar_common/templates/ishtar/wizard/wizard_person_deletion.html @@ -19,7 +19,7 @@ {% endif %} {% if current_object.responsible_town_planning_service.count %} -<h3>{% trans "Responsible town planning service of archaeological files" %}</h3> +<h3>{% trans "Responsible for planning service of archaeological files" %}</h3> <ul class='list'> {% for file in current_object.responsible_town_planning_service.all %} <li>{{file}} <a class='display_details_inline' href="#" onclick='load_window("{%url show-file file.pk ''%}")'><i class="fa fa-info-circle" aria-hidden="true"></i></a></li>{% endfor %} diff --git a/ishtar_common/templates/sheet_ope.html b/ishtar_common/templates/sheet_ope.html index 28390af45..1e18e8b7e 100644 --- a/ishtar_common/templates/sheet_ope.html +++ b/ishtar_common/templates/sheet_ope.html @@ -33,7 +33,7 @@ <p><label>{%trans "Related file:"%}</label> <span class='value'><a href='{% url show-file item.related_file.pk ''%}'>{{ item.related_file }}</a></span></p><!-- Displayed as Year/index/Commune/Common_name This should be a link to the file sheet of the related file --> {% if item.related_file.is_preventive %} {% if item.operator_reference_code %}<p><label>{%trans "Operator's reference code:"%}</label> <span class='value'>{{ item.operator_reference_code }}</span></p>{% endif %} -{% if item.related_file.town_planning_service %}<p><label>{%trans "Town planning service:"%}</label> <span class='value'>{{ item.related_file.town_planning_service }}</span></p>{% endif %} +{% if item.related_file.town_planning_service %}<p><label>{%trans "Planning service:"%}</label> <span class='value'>{{ item.related_file.town_planning_service }}</span></p>{% endif %} {% if item.related_file.permit_type %}<p><label>{%trans "Permit type:"%}</label> <span class='value'>{{ item.related_file.permit_type }}</span></p>{% endif %} {% if item.related_file.permit_reference %}<p><label>{%trans "Permit reference:"%}</label> <span class='value'>{{ item.related_file.permit_reference }}</span></p>{% endif %} {% if item.related_file.general_contractor.attached_to %}<p><label>{%trans "General contractor organisation:"%}</label> <span class='value'>{{ item.related_file.general_contractor.attached_to }}</span></p>{% endif %} <!-- Contractor's organisation displayed as concat of Name/Adress/postal_code/city --> diff --git a/ishtar_common/templatetags/window_tables.py b/ishtar_common/templatetags/window_tables.py index acb3d4a0a..05592557a 100644 --- a/ishtar_common/templatetags/window_tables.py +++ b/ishtar_common/templatetags/window_tables.py @@ -15,9 +15,11 @@ from ishtar_common.widgets import JQueryJqGrid from archaeological_files.models import File from archaeological_operations.models import OperationSource, Operation from archaeological_context_records.models import ContextRecord, \ - ContextRecordSource, RecordRelations as CRRecordRelations + ContextRecordSource, RecordRelationView, \ + RecordRelations as CRRecordRelations from archaeological_finds.models import Find, FindSource, \ - FindUpstreamTreatments, FindDownstreamTreatments + FindUpstreamTreatments, FindDownstreamTreatments, FindTreatments +from archaeological_warehouse.models import Container register = template.Library() @@ -40,27 +42,37 @@ ASSOCIATED_MODELS['context_records_docs'] = ( ContextRecordSource, 'get-contextrecordsource', 'get-contextrecordsource-full') ASSOCIATED_MODELS['context_records_relations'] = ( - CRRecordRelations, 'get-contextrecordrelation', '') + RecordRelationView, 'get-contextrecordrelation', '') +ASSOCIATED_MODELS['context_records_relations_detail'] = ( + CRRecordRelations, 'get-contextrecordrelationdetail', '') ASSOCIATED_MODELS['finds'] = (Find, 'get-find', 'get-find-full') ASSOCIATED_MODELS['finds_for_ope'] = ( Find, 'get-find-for-ope', 'get-find-full') +ASSOCIATED_MODELS['finds_for_treatment'] = ( + Find, 'get-find-for-treatment', 'get-find-full') ASSOCIATED_MODELS['finds_docs'] = ( FindSource, 'get-findsource', 'get-findsource-full') ASSOCIATED_MODELS['finds_upstreamtreatments'] = ( FindUpstreamTreatments, 'get-upstreamtreatment', '') ASSOCIATED_MODELS['finds_downstreamtreatments'] = ( FindDownstreamTreatments, 'get-downstreamtreatment', '') +ASSOCIATED_MODELS['treatments'] = ( + FindTreatments, 'get-treatment', '') +ASSOCIATED_MODELS['containers'] = ( + Container, 'get-container', '') @register.simple_tag(takes_context=True) def dynamic_table_document( context, caption, associated_model, key, value, - table_cols='TABLE_COLS', output='html', large=False): + table_cols='TABLE_COLS', output='html', large=False, + col_prefix=''): if not table_cols: table_cols = 'TABLE_COLS' model, url, url_full = ASSOCIATED_MODELS[associated_model] - grid = JQueryJqGrid(None, None, model, table_cols=table_cols) + grid = JQueryJqGrid(None, None, model, table_cols=table_cols, + col_prefix=col_prefix) source = unicode(reverse_lazy(url)) source_full = unicode(reverse_lazy(url_full)) if url_full else '' source_attrs = mark_safe('?submited=1&{}={}'.format(key, value)) @@ -69,7 +81,7 @@ def dynamic_table_document( t = get_template('ishtar/blocks/window_tables/dynamic_documents.html') context = template.Context({ 'caption': caption, - 'name': slugify(caption) + '{}'.format(int(time.time())), + 'name': '{}{}{}'.format(slugify(caption), key, int(time.time())), 'source': source + source_attrs, 'source_full': source_full, 'simple_source': source, diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index 0c4bbda08..6db425cab 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -29,6 +29,7 @@ from django.core.urlresolvers import reverse from django.template.defaultfilters import slugify from django.test import TestCase from django.test.client import Client +from django.test.simple import DjangoTestSuiteRunner from ishtar_common import models @@ -75,6 +76,55 @@ def create_user(): return username, password, user +class WizardTestFormData(object): + """ + Test set to simulate wizard steps + """ + def __init__(self, name, form_datas, ignored=[], 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 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.extra_tests = extra_tests + + def tests(self, test_object, final_step_response): + """ + Specific tests for theses datas. Raise Exception if not OK. + """ + for test in self.extra_tests: + test(test_object, final_step_response) + + +class ManagedModelTestRunner(DjangoTestSuiteRunner): + """ + Test runner that automatically makes all unmanaged models in your Django + project managed for the duration of the test run, so that one doesn't need + to execute the SQL manually to create them. + """ + def setup_test_environment(self, *args, **kwargs): + from django.db.models.loading import get_models + self.unmanaged_models = [m for m in get_models() + if not m._meta.managed] + for m in self.unmanaged_models: + m._meta.managed = True + super(ManagedModelTestRunner, self).setup_test_environment(*args, + **kwargs) + + def teardown_test_environment(self, *args, **kwargs): + super(ManagedModelTestRunner, self).teardown_test_environment(*args, + **kwargs) + # reset unmanaged models + for m in self.unmanaged_models: + m._meta.managed = False + + class WizardTest(object): url_name = None wizard_name = '' @@ -92,10 +142,29 @@ class WizardTest(object): def post_wizard(self): pass + def pass_test(self): + return False + + def check_response(self, response, current_step): + if "errorlist" in response.content: + soup = Soup(response.content) + errorlist = soup.findAll( + "ul", {"class": "errorlist"}) + errors = [] + for li in errorlist: + lbl = li.findParent().findParent().findChild().text + errors.append(u"{} - {}".format(lbl, li.text)) + raise ValidationError(u"Errors: {} on {}.".format( + u" ".join(errors), current_step)) + def test_wizard(self): + if self.pass_test(): + return url = reverse(self.url_name) self.pre_wizard() - for form_data, ignored in self.form_datas: + for test_form_data in self.form_datas: + form_data = test_form_data.form_datas + ignored = test_form_data.ignored for idx, step in enumerate(self.steps): current_step, current_form = step if current_step in ignored: @@ -116,28 +185,22 @@ class WizardTest(object): next_form = self.steps[idx + 1][0] break next_idx = 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)) - if "errorlist" in response.content: - soup = Soup(response.content) - errorlist = soup.findAll( - "ul", {"class": "errorlist"}) - errors = [] - for li in errorlist: - lbl = li.findParent().findParent().findChild().text - errors.append(u"{} - {}".format(lbl, li.text)) - raise ValidationError(u"Errors: {} on {}.".format( - u" ".join(errors), current_step)) + self.check_response(response, current_step) self.assertRedirects( response, '/{}/{}'.format(self.url_name, next_form)) else: response = self.client.post(url, data, follow=True) + self.check_response(response, current_step) + test_form_data.tests(self, response) self.post_wizard() diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 44112bca3..9b3c85694 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -60,11 +60,18 @@ def cached_label_changed(sender, **kwargs): and instance._cached_label_checked: return instance._cached_label_checked = True - lbl = instance._generate_cached_label() - if lbl != instance.cached_label: + cached_labels = ['cached_label'] + if hasattr(sender, 'CACHED_LABELS'): + cached_labels = sender.CACHED_LABELS + changed = False + for cached_label in cached_labels: + lbl = getattr(instance, '_generate_' + cached_label)() + if lbl != getattr(instance, cached_label): + setattr(instance, cached_label, lbl) + changed = True + if changed: if hasattr(instance, '_cascade_change') and instance._cascade_change: instance.skip_history_when_saving = True - instance.cached_label = lbl instance.save() if hasattr(instance, '_get_associated_cached_labels'): for item in instance._get_associated_cached_labels(): diff --git a/ishtar_common/views.py b/ishtar_common/views.py index cd34a2019..d827ae065 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -58,7 +58,7 @@ 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 +from archaeological_finds.models import Find, Treatment, TreatmentFile from archaeological_operations.forms import DashboardForm as DashboardFormOpe from archaeological_files.forms import DashboardForm as DashboardFormFile @@ -239,6 +239,9 @@ def shortcut_menu(request): CURRENT_ITEMS.append((_(u"Context record"), ContextRecord)) if profile.find: CURRENT_ITEMS.append((_(u"Find"), Find)) + if profile.warehouse: + CURRENT_ITEMS.append((_(u"Treatment request"), TreatmentFile)) + CURRENT_ITEMS.append((_(u"Treatment"), Treatment)) if hasattr(request.user, 'ishtaruser') and \ request.user.ishtaruser.advanced_shortcut_menu: dct = {'current_menu': [], 'menu': [], @@ -261,7 +264,7 @@ def shortcut_menu(request): 'ishtar/blocks/advanced_shortcut_menu.html', dct, context_instance=RequestContext(request)) dct = {'current_menu': []} - current_selected_item = None + current_selected_item = {} for lbl, model in CURRENT_ITEMS: new_selected_item = None model_name = model.SLUG @@ -291,7 +294,8 @@ def shortcut_menu(request): pass if items: dct['current_menu'].append((lbl, model_name, cls, items)) - current_selected_item = new_selected_item + if new_selected_item: + current_selected_item[model_name] = new_selected_item return render_to_response('ishtar/blocks/shortcut_menu.html', dct, context_instance=RequestContext(request)) @@ -301,7 +305,9 @@ def get_current_items(request): for key, model in (('file', File), ('operation', Operation), ('contextrecord', ContextRecord), - ('find', Find)): + ('find', Find), + ('treatmentfile', TreatmentFile), + ('treatment', Treatment)): currents[key] = None if key in request.session and request.session[key]: try: @@ -312,6 +318,16 @@ def get_current_items(request): def unpin(request, item_type): + if item_type not in ('find', 'contextrecord', 'operation', 'file', + 'treatment', 'treatmentfile'): + logger.warning("unpin unknow type: {}".format(item_type)) + return HttpResponse('nok') + request.session['treatment'] = '' + if item_type == 'treatment': + return HttpResponse('ok') + request.session['treatmentfile'] = '' + if item_type == 'treatmentfile': + return HttpResponse('ok') request.session['find'] = '' if item_type == 'find': return HttpResponse('ok') @@ -322,7 +338,8 @@ def unpin(request, item_type): if item_type == 'operation': return HttpResponse('ok') request.session['file'] = '' - return HttpResponse('ok') + if item_type == 'file': + return HttpResponse('ok') def update_current_item(request, item_type=None, pk=None): @@ -462,9 +479,8 @@ def autocomplete_town(request): for q in q.split(' '): extra = Q(name__icontains=q) if settings.COUNTRY == 'fr': - extra = (extra | Q(numero_insee__istartswith=q) | - Q(departement__label__istartswith=q)) - query = query & extra + extra |= Q(numero_insee__istartswith=q) + query &= extra limit = 20 towns = models.Town.objects.filter(query)[:limit] data = json.dumps([{'id': town.pk, 'value': unicode(town)} @@ -528,7 +544,7 @@ HIERARCHIC_FIELDS = ['periods', 'period', 'unit', 'material_types', def get_item(model, func_name, default_name, extra_request_keys=[], - base_request={}, bool_fields=[], reversed_bool_fields=[], + base_request=None, bool_fields=[], reversed_bool_fields=[], dated_fields=[], associated_models=[], relative_session_names=[], specific_perms=[], own_table_cols=None, relation_types_prefix={}): """ @@ -577,10 +593,12 @@ def get_item(model, func_name, default_name, extra_request_keys=[], my_extra_request_keys = copy(model.EXTRA_REQUEST_KEYS) else: my_extra_request_keys = copy(extra_request_keys) - if not base_request and hasattr(model, 'BASE_REQUEST'): + if base_request is None and hasattr(model, 'BASE_REQUEST'): my_base_request = copy(model.BASE_REQUEST) - else: + elif base_request is not None: my_base_request = copy(base_request) + else: + my_base_request = {} if not bool_fields and hasattr(model, 'BOOL_FIELDS'): my_bool_fields = model.BOOL_FIELDS[:] else: @@ -677,7 +695,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[], request.session[default_name].split('-')[-1]} else: dct = {"pk": request.session[default_name]} - elif dct == base_request: + 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]: @@ -750,7 +768,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[], alt_dct = dct.copy() alt_dct.pop(k) alt_dct.update(or_req) - query = query | Q(**alt_dct) + query |= Q(**alt_dct) for rtype_prefix in relation_types: vals = list(relation_types[rtype_prefix]) @@ -775,8 +793,8 @@ def get_item(model, func_name, default_name, extra_request_keys=[], if not dct: # fake condition to trick Django (1.4): without it only the # alt_dct is managed - query = query & Q(pk__isnull=False) - query = query | Q(**alt_dct) + query &= Q(pk__isnull=False) + query |= Q(**alt_dct) for k, or_req in or_reqs: altor_dct = alt_dct.copy() altor_dct.pop(k) @@ -787,7 +805,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[], altor_dct[ rtype_prefix + 'right_relations__right_record__' + j] =\ val - query = query | Q(**altor_dct) + query |= Q(**altor_dct) if own: query = query & model.get_query_owns(request.user) @@ -809,7 +827,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[], and request.session[model_name] if current: dct = {upper_key: current} - query = query & Q(**dct) + query &= Q(**dct) items = model.objects.filter(query).distinct() # print(items.query) @@ -910,6 +928,14 @@ def get_item(model, func_name, default_name, extra_request_keys=[], keys = [keys] my_vals = [] for k in keys: + if hasattr(model, 'EXTRA_REQUEST_KEYS') \ + and k in model.EXTRA_REQUEST_KEYS: + k = model.EXTRA_REQUEST_KEYS[k] + if type(k) in (list, tuple): + k = k[0] + for filtr in ('__icontains', '__contains'): + if k.endswith(filtr): + k = k[:len(k) - len(filtr)] vals = [item] # foreign key may be divided by "." or "__" splitted_k = [] @@ -929,10 +955,14 @@ def get_item(model, func_name, default_name, extra_request_keys=[], v = v() new_vals.append(v) elif val: - val = getattr(val, ky) - if callable(val): - val = val() - new_vals.append(val) + try: + val = getattr(val, ky) + if callable(val): + val = val() + new_vals.append(val) + except AttributeError: + # must be a query key such as "contains" + pass vals = new_vals # manage last related objects if vals and hasattr(vals[0], 'all'): @@ -981,8 +1011,8 @@ def get_item(model, func_name, default_name, extra_request_keys=[], lnk = link_template % reverse('show-' + default_name, args=[data[0], '']) except NoReverseMatch: - print( - '"show-' + default_name + "\" args (" + logger.warning( + '**WARN "show-' + default_name + '" args (' + unicode(data[0]) + ") url not available") lnk = '' res = {'id': data[0], 'link': lnk} @@ -995,9 +1025,9 @@ def get_item(model, func_name, default_name, extra_request_keys=[], # foreign key may be divided by "." or "__" for tc in table_col: if '.' in tc: - tab_cols.append(tc.split('.')[-1]) + tab_cols += tc.split('.') elif '__' in tc: - tab_cols.append(tc.split('__')[-1]) + tab_cols += tc.split('__') else: tab_cols.append(tc) k = "__".join(tab_cols) @@ -1027,6 +1057,8 @@ def get_item(model, func_name, default_name, extra_request_keys=[], writer = csv.writer(response, **CSV_OPTIONS) col_names = [] for field_name in table_cols: + if type(field_name) in (list, tuple): + field_name = " ; ".join(field_name) if hasattr(model, 'EXTRA_FULL_FIELDS_LABELS') and\ field_name in model.EXTRA_FULL_FIELDS_LABELS: field = model.EXTRA_FULL_FIELDS_LABELS[field_name] @@ -1037,6 +1069,11 @@ def get_item(model, func_name, default_name, extra_request_keys=[], field = model._meta.get_field(field_name) except: col_names.append(u"".encode(ENCODING)) + logger.warning( + "**WARN get_item - csv export**: no col name for " + "{}\nadd explicit label to " + "EXTRA_FULL_FIELDS_LABELS attribute of " + "{}".format(field_name, model)) continue col_names.append( unicode(field.verbose_name).encode(ENCODING)) @@ -1111,7 +1148,6 @@ def show_item(model, name, extra_dct=None): context_instance = RequestContext(request) context_instance.update(dct) context_instance['output'] = 'html' - filename = "" if hasattr(item, 'history_object'): filename = item.history_object.associated_filename else: diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py index 1183836bc..ddbfa91bf 100644 --- a/ishtar_common/widgets.py +++ b/ishtar_common/widgets.py @@ -19,12 +19,15 @@ # See the file COPYING for details. +import logging + from django import forms from django.conf import settings -from django.core.urlresolvers import reverse +from django.core.urlresolvers import reverse, NoReverseMatch from django.db.models import fields from django.forms import ClearableFileInput -from django.forms.widgets import flatatt +from django.forms.widgets import flatatt, \ + CheckboxSelectMultiple as CheckboxSelectMultipleBase from django.template import Context, loader from django.template.defaultfilters import slugify from django.utils.encoding import smart_unicode @@ -36,6 +39,8 @@ from django.utils.translation import ugettext_lazy as _ from ishtar_common import models +logger = logging.getLogger(__name__) + reverse_lazy = lazy(reverse, unicode) @@ -56,6 +61,20 @@ class Select2Multiple(forms.SelectMultiple): return super(Select2Multiple, self).render(name, value, attrs, choices) +class CheckboxSelectMultiple(CheckboxSelectMultipleBase): + """ + Fix initialization bug. + Should be corrected on recent Django version. + TODO: test and remove (test case: treatment type not keep on modif) + """ + def render(self, name, value, attrs=None, choices=()): + if type(value) in (str, unicode): + value = value.split(',') + if type(value) not in (list, tuple): + value = [value] + return super(CheckboxSelectMultiple, self).render(name, value, attrs, + choices) + class MultipleAutocompleteField(forms.MultipleChoiceField): def __init__(self, *args, **kwargs): @@ -322,7 +341,6 @@ class JQueryTown(forms.TextInput): @classmethod def encode_source(cls, source): - encoded_src = '' if isinstance(source, list): encoded_src = JSONEncoder().encode(source) elif isinstance(source, str) \ @@ -515,7 +533,8 @@ class JQueryJqGrid(forms.RadioSelect): def __init__(self, source, form, associated_model, attrs={}, table_cols='TABLE_COLS', multiple=False, multiple_cols=[2], new=False, new_message="", source_full=None, - multiple_select=False, sortname="__default__"): + multiple_select=False, sortname="__default__", + col_prefix=''): """ JQueryJqGrid widget init. @@ -531,6 +550,7 @@ class JQueryJqGrid(forms.RadioSelect): :param source_full: url to get full listing :param multiple_select: :param sortname: column name (model attribute) to use to sort + :param col_prefix: prefix to remove to col_names """ super(JQueryJqGrid, self).__init__(attrs=attrs) self.source = source @@ -546,13 +566,15 @@ class JQueryJqGrid(forms.RadioSelect): self.new, self.new_message = new, new_message self.source_full = source_full self.sortname = sortname + self.col_prefix = col_prefix + if self.col_prefix and not self.col_prefix.endswith('__'): + self.col_prefix += "__" def get_cols(self, python=False): jq_col_names, extra_cols = [], [] col_labels = {} - if hasattr(self.associated_model, self.table_cols + '_LBL'): - col_labels = getattr(self.associated_model, - self.table_cols + '_LBL') + if hasattr(self.associated_model, 'COL_LABELS'): + col_labels = self.associated_model.COL_LABELS for col_names in getattr(self.associated_model, self.table_cols): field_verbose_names = [] field_verbose_name, field_name = "", "" @@ -563,24 +585,26 @@ class JQueryJqGrid(forms.RadioSelect): keys = col_name.split('__') if '.' in col_name: keys = col_name.split('.') - f_name = '' for key in keys: if hasattr(field, 'rel') and field.rel: field = field.rel.to try: field = field._meta.get_field(key) field_verbose_name = field.verbose_name - f_name = field.name except (fields.FieldDoesNotExist, AttributeError): if hasattr(field, key + '_lbl'): - f_name = key field_verbose_name = getattr(field, key + '_lbl') else: continue if field_name: field_name += "__" - field_name += f_name + if col_name.startswith(self.col_prefix): + field_name += col_name[len(self.col_prefix):] + else: + field_name += col_name field_verbose_names.append(unicode(field_verbose_name)) + if not field_name: + field_name = "__".join(col_names) if field_name in col_labels: jq_col_names.append(unicode(col_labels[field_name])) elif col_names and col_names[0] in col_labels: @@ -618,7 +642,11 @@ class JQueryJqGrid(forms.RadioSelect): col_idx = col_idx and ", ".join(col_idx) or "" dct['encoding'] = settings.ENCODING or 'utf-8' - dct['source'] = unicode(self.source) + try: + dct['source'] = unicode(self.source) + except NoReverseMatch: + logger.warning('Cannot resolve source for {} widget'.format( + self.form)) if unicode(self.source_full) and unicode(self.source_full) != 'None': dct['source_full'] = unicode(self.source_full) diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index c065459f6..4f0295421 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -18,6 +18,7 @@ # See the file COPYING for details. import datetime +import logging # from functools import wraps from django.conf import settings @@ -38,6 +39,8 @@ from django.utils.datastructures import MultiValueDict as BaseMultiValueDict from django.utils.translation import ugettext_lazy as _ import models +logger = logging.getLogger(__name__) + class MultiValueDict(BaseMultiValueDict): def get(self, *args, **kwargs): @@ -124,8 +127,12 @@ class Wizard(NamedUrlWizardView): wizard_templates = {} filter_owns = {} current_obj_slug = '' + current_object_key = 'pk' + ignore_init_steps = [] file_storage = default_storage + saved_args = {} # argument to pass on object save + ''' # buggy and unecessary... def __init__(self, *args, **kwargs): @@ -165,6 +172,13 @@ class Wizard(NamedUrlWizardView): return super(Wizard, self).dispatch(request, *args, **kwargs) + def get_form_kwargs(self, step=None): + kwargs = super(Wizard, self).get_form_kwargs(step) + if hasattr(self.form_list[step], 'need_user_for_initialization') and\ + self.form_list[step].need_user_for_initialization: + kwargs['user'] = self.request.user + return kwargs + def get_prefix(self, *args, **kwargs): """As the class name can interfere when reused prefix with the url_name """ @@ -188,13 +202,17 @@ class Wizard(NamedUrlWizardView): templates = [self.wizard_confirm] + templates return templates + def get_ignore_init_steps(self): + return ['{}-{}'.format(step, self.url_name) for step in + self.ignore_init_steps] + def get_context_data(self, form, **kwargs): """Add previous, next and current steps to manage the wizard path""" context = super(Wizard, self).get_context_data(form) self.request.session['CURRENT_ACTION'] = self.get_wizard_name() step = self.steps.first current_step = self.steps.current - dct = {'current_step': self.form_list[current_step], + dct = {'current_step_label': self.form_list[current_step].form_label, 'wizard_label': self.label, 'current_object': self.get_current_object(), 'is_search': current_step.startswith('selec-') @@ -209,7 +227,7 @@ class Wizard(NamedUrlWizardView): or (previous_steps and previous_steps[-1] == self.form_list[step]): break - previous_steps.append(self.form_list[step]) + previous_steps.append(self.form_list[step].form_label) previous_step_counter += 1 if previous_step_counter >= len(self.steps): break @@ -242,7 +260,8 @@ class Wizard(NamedUrlWizardView): for key in v: form_key = next_step + prefix + key prefixed_values[form_key] = v[key] - if not prefixed_values: + 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'] = '' @@ -250,7 +269,7 @@ class Wizard(NamedUrlWizardView): if step == next_step: current_step_passed = True elif current_step_passed: - next_steps.append(self.form_list[next_step]) + next_steps.append(self.form_list[next_step].form_label) next_step = self.get_next_step(next_step) context.update({'next_steps': next_steps}) # not last step: validation @@ -469,6 +488,8 @@ class Wizard(NamedUrlWizardView): for k in dct: if k.startswith('pk'): continue + if k not in obj.__class__._meta.get_all_field_names(): + continue # False set to None for images and files if not k.endswith('_id') and ( isinstance(obj.__class__._meta.get_field(k), FileField) or @@ -483,9 +504,12 @@ class Wizard(NamedUrlWizardView): elif type(dct[k]) not in (list, tuple): dct[k] = [dct[k]] setattr(obj, k, dct[k]) + if hasattr(obj, 'pre_save'): + obj.pre_save() try: obj.full_clean() - except ValidationError: + except ValidationError as e: + logger.warning(unicode(e)) return self.render(form_list[-1]) for dependant_item in other_objs: c_item = getattr(obj, dependant_item) @@ -543,12 +567,25 @@ class Wizard(NamedUrlWizardView): dct[dependant_item] = c_item if 'pk' in dct: dct.pop('pk') + # remove non relevant fields + all_field_names = self.get_saved_model()._meta.get_all_field_names() + for k in dct.copy(): + if (k.endswith('_id') and k[:-3] not in all_field_names) and \ + k not in all_field_names: + dct.pop(k) + saved_args = self.saved_args.copy() + for k in saved_args: + if k in dct: + saved_args[k] = dct.pop(k) obj = self.get_saved_model()(**dct) + if hasattr(obj, 'pre_save'): + obj.pre_save() try: obj.full_clean() - except ValidationError: + except ValidationError as e: + logger.warning(unicode(e)) return self.render(form_list[-1]) - obj.save() + obj.save(**saved_args) for k in adds: getattr(obj, k).add(adds[k]) # necessary to manage interaction between models like @@ -561,6 +598,12 @@ class Wizard(NamedUrlWizardView): old_m2ms = {} for model in whole_associated_models: related_model = getattr(obj, model + 's') + # manage through + if hasattr(related_model, 'through') and related_model.through: + related_set_name = str( + related_model.through.__name__ + '_set').lower() + if hasattr(obj, related_set_name): + related_model = getattr(obj, related_set_name) # clear real m2m if hasattr(related_model, 'clear'): old_m2ms[model] = [] @@ -587,6 +630,9 @@ class Wizard(NamedUrlWizardView): if value not in m2m_items[key]: if type(value) == dict: model = related_model.model + if hasattr(related_model, 'through') and \ + related_model.through: + model = related_model.through # not m2m -> foreign key if not hasattr(related_model, 'clear'): assert hasattr(model, 'MAIN_ATTR'), \ @@ -611,8 +657,13 @@ class Wizard(NamedUrlWizardView): else: if issubclass(model, models.BaseHistorizedItem): value['history_modifier'] = self.request.user - value = model.objects.create(**value) - value.save() + if hasattr(model, 'RELATIVE_MODELS') and \ + self.get_saved_model() in \ + model.RELATIVE_MODELS: + value[model.RELATIVE_MODELS[ + self.get_saved_model()]] = obj + value, created = model.objects.get_or_create(**value) + value.save() # force post_save # check that an item is not add multiple times (forged forms) if value not in related_model.all() and\ hasattr(related_model, 'add'): @@ -626,6 +677,7 @@ class Wizard(NamedUrlWizardView): self.request.session[self.current_obj_slug] = unicode(obj.pk) self.request.session[self.get_object_name(obj)] = unicode(obj.pk) dct = {'item': obj} + self.current_object = obj # force evaluation of lazy urls wizard_done_window = unicode(self.wizard_done_window) if wizard_done_window: @@ -877,7 +929,7 @@ class Wizard(NamedUrlWizardView): current_obj = None main_form_key = 'selec-' + self.url_name try: - idx = self.session_get_value(main_form_key, 'pk') + idx = self.session_get_value(main_form_key, self.current_object_key) idx = int(idx) current_obj = self.model.objects.get(pk=idx) except(TypeError, ValueError, ObjectDoesNotExist): @@ -980,8 +1032,18 @@ class Wizard(NamedUrlWizardView): if not hasattr(obj, key): return initial keys = c_form.form.base_fields.keys() - query = getattr(obj, key) - if not obj._meta.ordering: + related = getattr(obj, key) + # manage through + through = False + if hasattr(related, 'through') and related.through: + related_set_name = str( + related.through.__name__ + '_set').lower() + if hasattr(obj, related_set_name): + through = True + related = getattr(obj, related_set_name) + + query = related + if not through and not obj._meta.ordering: query = query.order_by('pk') for child_obj in query.all(): if not keys: diff --git a/translations/de/ishtar_common.po b/translations/de/ishtar_common.po index 9e764c203..e281d0e4f 100644 --- a/translations/de/ishtar_common.po +++ b/translations/de/ishtar_common.po @@ -8,7 +8,7 @@ msgstr "" "Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n" "Language-Team: German (Germany)\n" "Language: de-DE\n" -"X-Generator: Zanata 3.9.5\n" +"X-Generator: Zanata 3.9.6\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:8 @@ -130,40 +130,40 @@ msgstr "" msgid "\"%(value)s\" not in %(values)s" msgstr "" -#: forms.py:55 +#: forms.py:73 msgid "Enter a valid name consisting of letters, spaces and hyphens." msgstr "" -#: forms.py:71 forms_common.py:618 +#: forms.py:89 forms_common.py:618 msgid "Confirm" msgstr "" -#: forms.py:76 +#: forms.py:94 msgid "Are you sure you want to delete?" msgstr "" -#: forms.py:85 +#: forms.py:103 msgid "There are identical items." msgstr "" -#: forms.py:123 forms.py:124 +#: forms.py:141 forms.py:142 msgid "Closing date" msgstr "" -#: forms.py:137 +#: forms.py:155 msgid "You should select an item." msgstr "" -#: forms.py:138 +#: forms.py:156 msgid "Add a new item" msgstr "" -#: forms.py:245 models.py:1310 +#: forms.py:262 models.py:1367 msgid "Template" msgstr "" #: forms_common.py:41 forms_common.py:59 forms_common.py:182 -#: forms_common.py:406 models.py:1376 models.py:2758 +#: forms_common.py:406 models.py:1433 models.py:2825 #: templates/blocks/JQueryAdvancedTown.html:19 #: templates/ishtar/sheet_organization.html:13 msgid "Town" @@ -171,16 +171,16 @@ msgstr "" #: forms_common.py:43 msgid "" -"<p>Type name, department code and/or postal code of the town you would like " -"to select. The search is insensitive to case.</p>\n" +"<p>Type name, department code of the town you would like to select. The " +"search is insensitive to case.</p>\n" "<p>Only the first twenty results are displayed but specifying the department " "code is generally sufficient to get the appropriate result.</p>\n" "<p class='example'>For instance type \"saint denis 93\" for getting the " "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:1546 -#: models.py:2384 models.py:2566 models.py:2628 +#: forms_common.py:68 forms_common.py:855 ishtar_menu.py:47 models.py:1606 +#: models.py:2452 models.py:2634 models.py:2695 #: templates/ishtar/sheet_person.html:4 msgid "Person" msgstr "" @@ -192,63 +192,63 @@ msgid "" msgstr "" #: forms_common.py:170 forms_common.py:327 forms_common.py:451 -#: ishtar_menu.py:75 models.py:1547 models.py:2273 +#: ishtar_menu.py:75 models.py:1607 models.py:2338 #: 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:977 models.py:1309 -#: models.py:1592 models.py:1810 models.py:2267 models.py:2370 models.py:2744 +#: forms_common.py:376 forms_common.py:446 models.py:1034 models.py:1366 +#: models.py:1652 models.py:1871 models.py:2332 models.py:2438 models.py:2811 #: templates/ishtar/sheet_organization.html:8 #: templates/ishtar/sheet_organization.html:21 msgid "Name" msgstr "" -#: forms_common.py:174 models.py:1531 models.py:1941 +#: forms_common.py:174 models.py:1588 models.py:2002 msgid "Organization type" msgstr "" -#: forms_common.py:176 forms_common.py:400 models.py:1371 +#: forms_common.py:176 forms_common.py:400 models.py:1428 #: templates/ishtar/sheet_organization.html:10 msgid "Address" msgstr "" -#: forms_common.py:178 forms_common.py:403 models.py:1372 +#: forms_common.py:178 forms_common.py:403 models.py:1429 #: templates/ishtar/sheet_organization.html:11 msgid "Address complement" msgstr "" -#: forms_common.py:180 forms_common.py:404 models.py:1374 +#: forms_common.py:180 forms_common.py:404 models.py:1431 #: templates/ishtar/sheet_organization.html:12 msgid "Postal code" msgstr "" -#: forms_common.py:183 forms_common.py:407 models.py:1377 +#: forms_common.py:183 forms_common.py:407 models.py:1434 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:1404 +#: forms_common.py:448 forms_common.py:572 models.py:1461 msgid "Email" msgstr "" -#: forms_common.py:186 forms_common.py:383 models.py:1389 +#: forms_common.py:186 forms_common.py:383 models.py:1446 #: 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:1401 +#: forms_common.py:187 forms_common.py:392 models.py:1458 #: 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:1969 -#: models.py:2269 models.py:2679 templates/sheet_ope.html:85 +#: forms_common.py:211 forms_common.py:325 forms_common.py:449 models.py:2032 +#: models.py:2334 models.py:2746 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 @@ -256,12 +256,12 @@ msgstr "" msgid "Type" msgstr "" -#: forms_common.py:220 views.py:139 +#: forms_common.py:220 views.py:142 msgid "Organization search" msgstr "" #: forms_common.py:244 -msgid "At leat two items have to be selected." +msgid "At least two items have to be selected." msgstr "" #: forms_common.py:262 @@ -272,12 +272,12 @@ msgstr "" msgid "Organization to merge" msgstr "" -#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2368 +#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2436 #: templates/ishtar/sheet_organization.html:22 msgid "Surname" msgstr "" -#: forms_common.py:339 forms_common.py:434 views.py:104 +#: forms_common.py:339 forms_common.py:434 views.py:107 msgid "Person search" msgstr "" @@ -290,25 +290,25 @@ msgstr "" msgid "Identity" msgstr "" -#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:1942 -#: models.py:2362 models.py:2364 models.py:2676 templates/sheet_ope.html:104 +#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:2003 +#: models.py:2430 models.py:2432 models.py:2743 templates/sheet_ope.html:104 #: templates/ishtar/blocks/window_tables/documents.html:7 msgid "Title" msgstr "" -#: forms_common.py:372 models.py:2366 +#: forms_common.py:372 models.py:2434 msgid "Salutation" msgstr "" -#: forms_common.py:378 models.py:2372 +#: forms_common.py:378 models.py:2440 msgid "Raw name" msgstr "" -#: forms_common.py:381 models.py:1390 +#: forms_common.py:381 models.py:1447 msgid "Phone description" msgstr "" -#: forms_common.py:384 models.py:1392 models.py:1394 +#: forms_common.py:384 models.py:1449 models.py:1451 msgid "Phone description 2" msgstr "" @@ -316,11 +316,11 @@ msgstr "" msgid "Phone 2" msgstr "" -#: forms_common.py:388 models.py:1398 +#: forms_common.py:388 models.py:1455 msgid "Phone description 3" msgstr "" -#: forms_common.py:390 models.py:1396 +#: forms_common.py:390 models.py:1453 msgid "Phone 3" msgstr "" @@ -328,23 +328,23 @@ msgstr "" msgid "Current organization" msgstr "" -#: forms_common.py:409 models.py:1379 +#: forms_common.py:409 models.py:1436 msgid "Other address: address" msgstr "" -#: forms_common.py:412 models.py:1382 +#: forms_common.py:412 models.py:1439 msgid "Other address: address complement" msgstr "" -#: forms_common.py:414 models.py:1383 +#: forms_common.py:414 models.py:1440 msgid "Other address: postal code" msgstr "" -#: forms_common.py:416 models.py:1385 +#: forms_common.py:416 models.py:1442 msgid "Other address: town" msgstr "" -#: forms_common.py:418 models.py:1387 +#: forms_common.py:418 models.py:1444 msgid "Other address: country" msgstr "" @@ -360,7 +360,7 @@ msgstr "" msgid "Account search" msgstr "" -#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2321 +#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2386 msgid "Person type" msgstr "" @@ -368,7 +368,7 @@ msgstr "" msgid "Account" msgstr "" -#: forms_common.py:575 wizards.py:1192 +#: forms_common.py:575 wizards.py:1256 msgid "New password" msgstr "" @@ -392,7 +392,7 @@ msgstr "" msgid "Send the new password by email?" msgstr "" -#: forms_common.py:628 forms_common.py:641 models.py:2759 +#: forms_common.py:628 forms_common.py:641 models.py:2826 msgid "Towns" msgstr "" @@ -408,7 +408,7 @@ msgstr "" msgid "Documentation informations" msgstr "" -#: forms_common.py:775 forms_common.py:823 models.py:1943 models.py:2653 +#: forms_common.py:775 forms_common.py:823 models.py:2004 models.py:2720 msgid "Source type" msgstr "" @@ -420,37 +420,37 @@ msgstr "" msgid "Internal reference" msgstr "" -#: forms_common.py:783 models.py:2690 +#: forms_common.py:783 models.py:2757 msgid "Numerical ressource (web address)" msgstr "" -#: forms_common.py:784 models.py:2692 +#: forms_common.py:784 models.py:2759 msgid "Receipt date" msgstr "" -#: forms_common.py:786 models.py:2096 models.py:2694 +#: forms_common.py:786 models.py:2161 models.py:2761 msgid "Creation date" msgstr "" -#: forms_common.py:789 models.py:2697 +#: forms_common.py:789 models.py:2764 msgid "Receipt date in documentation" msgstr "" -#: forms_common.py:791 forms_common.py:827 models.py:317 models.py:577 -#: models.py:1837 models.py:2376 models.py:2704 +#: forms_common.py:791 forms_common.py:827 models.py:323 models.py:634 +#: models.py:1898 models.py:2444 models.py:2771 msgid "Comment" msgstr "" -#: forms_common.py:793 forms_common.py:826 models.py:979 models.py:1596 -#: models.py:1769 models.py:1811 models.py:2703 templates/sheet_ope.html:128 +#: forms_common.py:793 forms_common.py:826 models.py:1036 models.py:1656 +#: models.py:1830 models.py:1872 models.py:2770 templates/sheet_ope.html:128 msgid "Description" msgstr "" -#: forms_common.py:796 models.py:2705 +#: forms_common.py:796 models.py:2772 msgid "Additional information" msgstr "" -#: forms_common.py:798 forms_common.py:830 models.py:2707 +#: forms_common.py:798 forms_common.py:830 models.py:2774 msgid "Has a duplicate" msgstr "" @@ -465,7 +465,7 @@ msgid "" "p>" msgstr "" -#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2633 +#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2700 #: templates/ishtar/wizard/wizard_person_deletion.html:124 msgid "Author" msgstr "" @@ -478,7 +478,7 @@ msgstr "" msgid "Would you like to delete this documentation?" msgstr "" -#: forms_common.py:856 models.py:1944 models.py:2621 models.py:2630 +#: forms_common.py:856 models.py:2005 models.py:2688 models.py:2697 msgid "Author type" msgstr "" @@ -490,7 +490,7 @@ msgstr "" msgid "There are identical authors." msgstr "" -#: forms_common.py:893 models.py:2634 models.py:2686 +#: forms_common.py:893 models.py:2701 models.py:2753 #: templates/sheet_ope.html:106 #: templates/ishtar/blocks/window_tables/documents.html:9 msgid "Authors" @@ -501,14 +501,14 @@ msgid "Administration" msgstr "" #: ishtar_menu.py:33 -msgid "Add/modify" +msgid "Addition/modification" msgstr "" -#: ishtar_menu.py:36 +#: ishtar_menu.py:36 ishtar_menu.py:70 ishtar_menu.py:101 msgid "Deletion" msgstr "" -#: ishtar_menu.py:39 models.py:1105 views.py:1484 +#: ishtar_menu.py:39 models.py:1162 views.py:1530 msgid "Global variables" msgstr "" @@ -536,20 +536,15 @@ msgstr "" msgid "Manual merge" msgstr "" -#: ishtar_menu.py:70 ishtar_menu.py:101 models.py:2133 widgets.py:110 -#: templates/ishtar/form_delete.html:11 -msgid "Delete" -msgstr "" - -#: ishtar_menu.py:109 models.py:2107 +#: ishtar_menu.py:109 models.py:2172 msgid "Imports" msgstr "" -#: ishtar_menu.py:112 views.py:1492 +#: ishtar_menu.py:112 views.py:1538 msgid "New import" msgstr "" -#: ishtar_menu.py:116 views.py:1506 +#: ishtar_menu.py:116 views.py:1552 msgid "Current imports" msgstr "" @@ -557,212 +552,212 @@ msgstr "" msgid "Old imports" msgstr "" -#: models.py:178 +#: models.py:183 msgid "Not a valid item." msgstr "" -#: models.py:191 +#: models.py:196 msgid "A selected item is not a valid item." msgstr "" -#: models.py:202 +#: models.py:207 msgid "This item already exists." msgstr "" -#: models.py:313 models.py:576 models.py:1344 models.py:1356 +#: models.py:319 models.py:633 models.py:1401 models.py:1413 models.py:1827 msgid "Label" msgstr "" -#: models.py:315 +#: models.py:321 msgid "Textual ID" msgstr "" -#: models.py:318 models.py:579 models.py:1313 +#: models.py:324 models.py:636 models.py:1370 msgid "Available" msgstr "" -#: models.py:598 models.py:1883 +#: models.py:655 models.py:1944 msgid "Key" msgstr "" -#: models.py:604 +#: models.py:661 msgid "Specific key to an import" msgstr "" -#: models.py:696 +#: models.py:753 msgid "Last editor" msgstr "" -#: models.py:699 +#: models.py:756 msgid "Creator" msgstr "" -#: models.py:841 models.py:2770 +#: models.py:898 models.py:2837 msgid "Order" msgstr "" -#: models.py:842 +#: models.py:899 msgid "Symmetrical" msgstr "" -#: models.py:843 +#: models.py:900 msgid "Tiny label" msgstr "" -#: models.py:857 +#: models.py:914 msgid "Cannot have symmetrical and an inverse_relation" msgstr "" -#: models.py:971 +#: models.py:1028 msgid "Euro" msgstr "" -#: models.py:972 +#: models.py:1029 msgid "US dollar" msgstr "" -#: models.py:978 models.py:1594 +#: models.py:1035 models.py:1654 msgid "Slug" msgstr "" -#: models.py:980 +#: models.py:1037 msgid "Files module" msgstr "" -#: models.py:981 +#: models.py:1038 msgid "Context records module" msgstr "" -#: models.py:983 +#: models.py:1040 msgid "Finds module" msgstr "" -#: models.py:984 +#: models.py:1041 msgid "Need context records module" msgstr "" -#: models.py:986 +#: models.py:1043 msgid "Warehouses module" msgstr "" -#: models.py:987 +#: models.py:1044 msgid "Need finds module" msgstr "" -#: models.py:989 +#: models.py:1046 msgid "Home page" msgstr "" -#: models.py:990 +#: models.py:1047 #, 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:994 +#: models.py:1051 msgid "File external id" msgstr "" -#: models.py:996 +#: models.py:1053 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:1001 +#: models.py:1058 msgid "Parcel external id" msgstr "" -#: models.py:1004 +#: models.py:1061 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:1009 +#: models.py:1066 msgid "Context record external id" msgstr "" -#: models.py:1011 +#: models.py:1068 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:1016 +#: models.py:1073 msgid "Base find external id" msgstr "" -#: models.py:1018 +#: models.py:1075 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:1023 +#: models.py:1080 msgid "Find external id" msgstr "" -#: models.py:1025 +#: models.py:1082 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:1030 +#: models.py:1087 msgid "Raw name for person" msgstr "" -#: models.py:1032 +#: models.py:1089 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:1036 +#: models.py:1093 msgid "Current active" msgstr "" -#: models.py:1037 +#: models.py:1094 msgid "Currency" msgstr "" -#: models.py:1041 +#: models.py:1098 msgid "Ishtar site profile" msgstr "" -#: models.py:1042 +#: models.py:1099 msgid "Ishtar site profiles" msgstr "" -#: models.py:1098 +#: models.py:1155 msgid "Variable name" msgstr "" -#: models.py:1099 +#: models.py:1156 msgid "Description of the variable" msgstr "" -#: models.py:1101 models.py:1884 +#: models.py:1158 models.py:1945 msgid "Value" msgstr "" -#: models.py:1104 +#: models.py:1161 msgid "Global variable" msgstr "" -#: models.py:1214 models.py:1244 +#: models.py:1271 models.py:1301 msgid "Total" msgstr "" -#: models.py:1221 models.py:1345 models.py:1357 +#: models.py:1278 models.py:1402 models.py:1414 #: templates/ishtar/sheet_person.html:22 #: templates/ishtar/dashboards/dashboard_main_detail.html:141 #: templates/ishtar/dashboards/dashboard_main_detail_users.html:26 @@ -770,718 +765,742 @@ msgstr "" msgid "Number" msgstr "" -#: models.py:1308 +#: models.py:1365 msgid "Administrative Act" msgstr "" -#: models.py:1312 +#: models.py:1369 msgid "Associated object" msgstr "" -#: models.py:1316 +#: models.py:1373 msgid "Document template" msgstr "" -#: models.py:1317 +#: models.py:1374 msgid "Document templates" msgstr "" -#: models.py:1348 models.py:1358 models.py:2091 +#: models.py:1405 models.py:1415 models.py:2156 msgid "State" msgstr "" -#: models.py:1362 templates/blocks/JQueryAdvancedTown.html:12 +#: models.py:1419 templates/blocks/JQueryAdvancedTown.html:12 msgid "Department" msgstr "" -#: models.py:1363 +#: models.py:1420 msgid "Departments" msgstr "" -#: models.py:1400 +#: models.py:1457 msgid "Raw phone" msgstr "" -#: models.py:1406 +#: models.py:1463 msgid "Alternative address is prefered" msgstr "" -#: models.py:1445 +#: models.py:1502 msgid "Tel: " msgstr "" -#: models.py:1449 +#: models.py:1506 msgid "Mobile: " msgstr "" -#: models.py:1453 +#: models.py:1510 msgid "Email: " msgstr "" -#: models.py:1458 +#: models.py:1515 msgid "Merge key" msgstr "" -#: models.py:1532 +#: models.py:1589 msgid "Organization types" msgstr "" -#: models.py:1548 views.py:234 +#: models.py:1608 views.py:237 msgid "Operation" msgstr "" -#: models.py:1550 +#: models.py:1610 msgid "Archaeological site" msgstr "" -#: models.py:1551 +#: models.py:1611 msgid "Parcels" msgstr "" -#: models.py:1553 +#: models.py:1613 msgid "Operation source" msgstr "" -#: models.py:1556 views.py:1299 views.py:1350 +#: models.py:1616 views.py:1346 views.py:1396 msgid "Archaeological files" msgstr "" -#: models.py:1558 views.py:1302 views.py:1358 +#: models.py:1618 views.py:1349 views.py:1404 msgid "Context records" msgstr "" -#: models.py:1560 +#: models.py:1620 msgid "Context record relations" msgstr "" -#: models.py:1562 views.py:1304 views.py:1361 -msgid "Finds" +#: models.py:1622 +msgid "Base finds" msgstr "" -#: models.py:1598 templates/ishtar/dashboards/dashboard_main.html:25 +#: models.py:1658 templates/ishtar/dashboards/dashboard_main.html:25 msgid "Users" msgstr "" -#: models.py:1600 +#: models.py:1660 msgid "Associated model" msgstr "" -#: models.py:1603 +#: models.py:1663 msgid "Is template" msgstr "" -#: models.py:1604 +#: models.py:1664 msgid "Unicity keys (separator \";\")" msgstr "" -#: models.py:1608 +#: models.py:1668 msgid "Importer - Type" msgstr "" -#: models.py:1609 +#: models.py:1669 msgid "Importer - Types" msgstr "" -#: models.py:1699 +#: models.py:1759 msgid "Importer - Default" msgstr "" -#: models.py:1700 +#: models.py:1760 msgid "Importer - Defaults" msgstr "" -#: models.py:1735 +#: models.py:1795 msgid "Importer - Default value" msgstr "" -#: models.py:1736 +#: models.py:1796 msgid "Importer - Default values" msgstr "" -#: models.py:1768 +#: models.py:1829 msgid "Column number" msgstr "" -#: models.py:1771 +#: models.py:1832 msgid "Required" msgstr "" -#: models.py:1774 +#: models.py:1835 msgid "Importer - Column" msgstr "" -#: models.py:1775 +#: models.py:1836 msgid "Importer - Columns" msgstr "" -#: models.py:1795 +#: models.py:1856 msgid "Field name" msgstr "" -#: models.py:1797 models.py:1831 +#: models.py:1858 models.py:1892 msgid "Force creation of new items" msgstr "" -#: models.py:1799 models.py:1833 +#: models.py:1860 models.py:1894 msgid "Concatenate with existing" msgstr "" -#: models.py:1801 models.py:1835 +#: models.py:1862 models.py:1896 msgid "Concatenate character" msgstr "" -#: models.py:1805 +#: models.py:1866 msgid "Importer - Duplicate field" msgstr "" -#: models.py:1806 +#: models.py:1867 msgid "Importer - Duplicate fields" msgstr "" -#: models.py:1813 +#: models.py:1874 msgid "Regular expression" msgstr "" -#: models.py:1816 +#: models.py:1877 msgid "Importer - Regular expression" msgstr "" -#: models.py:1817 +#: models.py:1878 msgid "Importer - Regular expressions" msgstr "" -#: models.py:1840 +#: models.py:1901 msgid "Importer - Target" msgstr "" -#: models.py:1841 +#: models.py:1902 msgid "Importer - Targets" msgstr "" -#: models.py:1865 views.py:518 +#: models.py:1926 views.py:536 msgid "True" msgstr "" -#: models.py:1866 views.py:520 +#: models.py:1927 views.py:538 msgid "False" msgstr "" -#: models.py:1885 +#: models.py:1946 msgid "Is set" msgstr "" -#: models.py:1892 +#: models.py:1953 msgid "Importer - Target key" msgstr "" -#: models.py:1893 +#: models.py:1954 msgid "Importer - Targets keys" msgstr "" -#: models.py:1945 models.py:2669 models.py:2682 +#: models.py:2006 models.py:2736 models.py:2749 msgid "Format" msgstr "" -#: models.py:1946 models.py:2774 +#: models.py:2007 models.py:2841 msgid "Operation type" msgstr "" -#: models.py:1947 +#: models.py:2008 msgid "Period" msgstr "" -#: models.py:1948 +#: models.py:2009 msgid "Report state" msgstr "" -#: models.py:1949 +#: models.py:2010 +msgid "Remain type" +msgstr "" + +#: models.py:2011 msgid "Unit" msgstr "" -#: models.py:1950 +#: models.py:2012 +msgid "Activity type" +msgstr "" + +#: models.py:2013 msgid "Material" msgstr "" -#: models.py:1952 +#: models.py:2015 msgid "Conservatory state" msgstr "" -#: models.py:1953 +#: models.py:2016 msgid "Preservation type" msgstr "" -#: models.py:1954 +#: models.py:2017 msgid "Object type" msgstr "" -#: models.py:1956 +#: models.py:2019 msgid "Identification type" msgstr "" -#: models.py:1958 +#: models.py:2021 msgid "Context record relation type" msgstr "" -#: models.py:1959 models.py:2661 +#: models.py:2022 models.py:2728 msgid "Support type" msgstr "" -#: models.py:1965 +#: models.py:2028 msgid "Integer" msgstr "" -#: models.py:1966 +#: models.py:2029 msgid "Float" msgstr "" -#: models.py:1967 +#: models.py:2030 msgid "String" msgstr "" -#: models.py:1968 templates/sheet_ope.html:86 +#: models.py:2031 templates/sheet_ope.html:86 msgid "Date" msgstr "" -#: models.py:1970 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83 +#: models.py:2033 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83 #: templates/ishtar/dashboards/dashboard_main_detail.html:126 msgid "Year" msgstr "" -#: models.py:1971 +#: models.py:2034 msgid "String to boolean" msgstr "" -#: models.py:1972 +#: models.py:2035 msgctxt "filesystem" msgid "File" msgstr "" -#: models.py:1973 +#: models.py:2036 msgid "Unknow type" msgstr "" -#: models.py:1989 +#: models.py:2052 msgid "4 digit year. e.g.: \"2015\"" msgstr "" -#: models.py:1990 +#: models.py:2053 msgid "4 digit year/month/day. e.g.: \"2015/02/04\"" msgstr "" -#: models.py:1991 +#: models.py:2054 msgid "Day/month/4 digit year. e.g.: \"04/02/2015\"" msgstr "" -#: models.py:2001 +#: models.py:2064 msgid "Options" msgstr "" -#: models.py:2003 +#: models.py:2066 msgid "Split character(s)" msgstr "" -#: models.py:2007 +#: models.py:2070 msgid "Importer - Formater type" msgstr "" -#: models.py:2008 +#: models.py:2071 msgid "Importer - Formater types" msgstr "" -#: models.py:2055 templates/ishtar/dashboards/dashboard_main_detail.html:63 +#: models.py:2120 templates/ishtar/dashboards/dashboard_main_detail.html:63 msgid "Created" msgstr "" -#: models.py:2056 +#: models.py:2121 msgid "Analyse in progress" msgstr "" -#: models.py:2057 +#: models.py:2122 msgid "Analysed" msgstr "" -#: models.py:2058 +#: models.py:2123 msgid "Import pending" msgstr "" -#: models.py:2059 +#: models.py:2124 msgid "Import in progress" msgstr "" -#: models.py:2060 +#: models.py:2125 msgid "Finished with errors" msgstr "" -#: models.py:2061 +#: models.py:2126 msgid "Finished" msgstr "" -#: models.py:2062 +#: models.py:2127 msgid "Archived" msgstr "" -#: models.py:2074 +#: models.py:2139 msgid "Imported file" msgstr "" -#: models.py:2077 +#: models.py:2142 msgid "Associated images (zip file)" msgstr "" -#: models.py:2079 +#: models.py:2144 msgid "Encoding" msgstr "" -#: models.py:2081 +#: models.py:2146 msgid "Skip lines" msgstr "" -#: models.py:2082 templates/ishtar/import_list.html:47 +#: models.py:2147 templates/ishtar/import_list.html:47 msgid "Error file" msgstr "" -#: models.py:2085 +#: models.py:2150 msgid "Result file" msgstr "" -#: models.py:2088 templates/ishtar/import_list.html:53 +#: models.py:2153 templates/ishtar/import_list.html:53 msgid "Match file" msgstr "" -#: models.py:2094 +#: models.py:2159 msgid "Conservative import" msgstr "" -#: models.py:2099 +#: models.py:2164 msgid "End date" msgstr "" -#: models.py:2101 +#: models.py:2166 msgid "Remaining seconds" msgstr "" -#: models.py:2106 +#: models.py:2171 msgid "Import" msgstr "" -#: models.py:2123 +#: models.py:2188 msgid "Analyse" msgstr "" -#: models.py:2125 models.py:2128 +#: models.py:2190 models.py:2193 msgid "Re-analyse" msgstr "" -#: models.py:2126 +#: models.py:2191 msgid "Launch import" msgstr "" -#: models.py:2129 +#: models.py:2194 msgid "Re-import" msgstr "" -#: models.py:2130 +#: models.py:2195 msgid "Archive" msgstr "" -#: models.py:2132 +#: models.py:2197 msgid "Unarchive" msgstr "" -#: models.py:2274 +#: models.py:2198 widgets.py:129 templates/ishtar/form_delete.html:11 +msgid "Delete" +msgstr "" + +#: models.py:2339 msgid "Organizations" msgstr "" -#: models.py:2276 +#: models.py:2341 msgid "Can view all Organizations" msgstr "" -#: models.py:2277 +#: models.py:2342 msgid "Can view own Organization" msgstr "" -#: models.py:2278 +#: models.py:2343 msgid "Can add own Organization" msgstr "" -#: models.py:2280 +#: models.py:2345 msgid "Can change own Organization" msgstr "" -#: models.py:2282 +#: models.py:2347 msgid "Can delete own Organization" msgstr "" -#: models.py:2317 +#: models.py:2382 msgid "Groups" msgstr "" -#: models.py:2322 +#: models.py:2387 msgid "Person types" msgstr "" -#: models.py:2330 +#: models.py:2398 msgid "Title type" msgstr "" -#: models.py:2331 +#: models.py:2399 msgid "Title types" msgstr "" -#: models.py:2340 +#: models.py:2408 msgid "Mr" msgstr "" -#: models.py:2341 +#: models.py:2409 msgid "Miss" msgstr "" -#: models.py:2342 +#: models.py:2410 msgid "Mr and Mrs" msgstr "" -#: models.py:2343 +#: models.py:2411 msgid "Mrs" msgstr "" -#: models.py:2344 +#: models.py:2412 msgid "Doctor" msgstr "" -#: models.py:2374 +#: models.py:2442 msgid "Contact type" msgstr "" -#: models.py:2377 models.py:2441 +#: models.py:2445 models.py:2509 msgid "Types" msgstr "" -#: models.py:2380 +#: models.py:2448 msgid "Is attached to" msgstr "" -#: models.py:2385 +#: models.py:2453 msgid "Persons" msgstr "" -#: models.py:2387 +#: models.py:2455 msgid "Can view all Persons" msgstr "" -#: models.py:2388 +#: models.py:2456 msgid "Can view own Person" msgstr "" -#: models.py:2389 +#: models.py:2457 msgid "Can add own Person" msgstr "" -#: models.py:2390 +#: models.py:2458 msgid "Can change own Person" msgstr "" -#: models.py:2391 +#: models.py:2459 msgid "Can delete own Person" msgstr "" -#: models.py:2569 +#: models.py:2637 msgid "Advanced shortcut menu" msgstr "" -#: models.py:2572 +#: models.py:2640 msgid "Ishtar user" msgstr "" -#: models.py:2573 +#: models.py:2641 msgid "Ishtar users" msgstr "" -#: models.py:2616 +#: models.py:2683 msgid "To modify the password use the form in Auth > User" msgstr "" -#: models.py:2622 +#: models.py:2689 msgid "Author types" msgstr "" -#: models.py:2654 +#: models.py:2721 msgid "Source types" msgstr "" -#: models.py:2662 +#: models.py:2729 msgid "Support types" msgstr "" -#: models.py:2670 +#: models.py:2737 msgid "Formats" msgstr "" -#: models.py:2677 +#: models.py:2744 msgid "External ID" msgstr "" -#: models.py:2680 +#: models.py:2747 msgid "Support" msgstr "" -#: models.py:2684 +#: models.py:2751 msgid "Scale" msgstr "" -#: models.py:2698 +#: models.py:2765 msgid "Item number" msgstr "" -#: models.py:2699 +#: models.py:2766 msgid "Ref." msgstr "" -#: models.py:2702 +#: models.py:2769 msgid "Internal ref." msgstr "" -#: models.py:2745 +#: models.py:2812 msgid "Surface (m2)" msgstr "" -#: models.py:2746 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107 +#: models.py:2813 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107 msgid "Localisation" msgstr "" -#: models.py:2771 +#: models.py:2838 msgid "Is preventive" msgstr "" -#: models.py:2775 +#: models.py:2842 msgid "Operation types" msgstr "" -#: models.py:2804 +#: models.py:2871 msgid "Preventive" msgstr "" -#: models.py:2805 +#: models.py:2872 msgid "Research" msgstr "" -#: utils.py:74 +#: utils.py:81 msgid " (...)" msgstr "" -#: utils.py:107 +#: utils.py:114 msgid "Load another random image?" msgstr "" -#: views.py:111 +#: views.py:114 msgid "New person" msgstr "" -#: views.py:119 +#: views.py:122 msgid "Person modification" msgstr "" -#: views.py:134 +#: views.py:137 msgid "Person deletion" msgstr "" -#: views.py:145 +#: views.py:148 msgid "New organization" msgstr "" -#: views.py:152 +#: views.py:155 msgid "Organization modification" msgstr "" -#: views.py:168 +#: views.py:171 msgid "Organization deletion" msgstr "" -#: views.py:175 +#: views.py:178 msgid "Account management" msgstr "" -#: views.py:181 +#: views.py:184 msgid "Account deletion" msgstr "" -#: views.py:233 +#: views.py:236 msgid "Archaeological file" msgstr "" -#: views.py:236 +#: views.py:239 msgid "Context record" msgstr "" -#: views.py:238 +#: views.py:241 msgid "Find" msgstr "" -#: views.py:1238 views.py:1281 +#: views.py:243 +msgid "Treatment request" +msgstr "" + +#: views.py:244 +msgid "Treatment" +msgstr "" + +#: views.py:1285 views.py:1328 msgid "Operation not permitted." msgstr "" -#: views.py:1240 +#: views.py:1287 #, python-format msgid "New %s" msgstr "" -#: views.py:1300 views.py:1354 +#: views.py:1347 views.py:1400 msgid "Operations" msgstr "" -#: views.py:1553 templates/ishtar/import_list.html:43 +#: views.py:1351 views.py:1407 +msgid "Finds" +msgstr "" + +#: views.py:1599 templates/ishtar/import_list.html:43 msgid "Link unmatched items" msgstr "" -#: views.py:1568 +#: views.py:1614 msgid "Delete import" msgstr "" -#: views.py:1607 +#: views.py:1653 msgid "Merge persons" msgstr "" -#: views.py:1631 +#: views.py:1677 msgid "Select the main person" msgstr "" -#: views.py:1640 +#: views.py:1686 msgid "Merge organization" msgstr "" -#: views.py:1650 +#: views.py:1696 msgid "Select the main organization" msgstr "" -#: views.py:1690 views.py:1706 +#: views.py:1736 views.py:1752 msgid "Corporation manager" msgstr "" -#: widgets.py:239 widgets.py:347 widgets.py:463 +#: widgets.py:258 widgets.py:365 widgets.py:480 msgid "Search..." msgstr "" -#: widgets.py:623 templatetags/window_tables.py:79 +#: widgets.py:670 templatetags/window_tables.py:91 msgid "No results" msgstr "" -#: widgets.py:624 templatetags/window_tables.py:80 +#: widgets.py:671 templatetags/window_tables.py:92 msgid "Loading..." msgstr "" -#: widgets.py:625 +#: widgets.py:672 msgid "Remove" msgstr "" -#: wizards.py:323 templates/ishtar/import_delete.html:20 +#: wizards.py:342 templates/ishtar/import_delete.html:20 msgid "Yes" msgstr "" -#: wizards.py:325 +#: wizards.py:344 msgid "No" msgstr "" -#: wizards.py:1249 +#: wizards.py:1313 #, python-format msgid "[%(app_name)s] Account creation/modification" msgstr "" @@ -1521,11 +1540,11 @@ msgid "The %(app_name)s team" msgstr "" #: templates/base.html:41 -msgid "Searches in the shortcut menu deals with all items." +msgid "Searches in the shortcut menu deal with all items." msgstr "" #: templates/base.html:42 -msgid "Searches in the shortcut menu deals with only your items." +msgid "Searches in the shortcut menu deal with only your items." msgstr "" #: templates/base.html:49 @@ -1689,7 +1708,7 @@ msgid "Operator's reference code:" msgstr "" #: templates/sheet_ope.html:36 -msgid "Town planning service:" +msgid "Planning service:" msgstr "" #: templates/sheet_ope.html:37 @@ -1849,7 +1868,7 @@ msgid "where the magic happens." msgstr "" #: templates/window.html:40 templates/blocks/JQueryJqGrid.html:28 -#: templates/ishtar/manage_basket.html:9 +#: templates/ishtar/manage_basket.html:12 msgid "Add" msgstr "" @@ -1929,7 +1948,7 @@ msgstr "" #: templates/ishtar/import_list.html:58 templates/ishtar/merge.html:31 #: templates/ishtar/simple_form.html:7 #: templates/ishtar/wizard/confirm_wizard.html:42 -#: templates/ishtar/wizard/default_wizard.html:30 +#: templates/ishtar/wizard/default_wizard.html:31 #: templates/ishtar/wizard/search.html:13 #: templates/ishtar/wizard/validation_bar.html:4 msgid "Validate" @@ -1976,11 +1995,11 @@ msgstr "" msgid "Control file" msgstr "" -#: templates/ishtar/manage_basket.html:7 -msgid "Checking \"Select all\" only select the current page." +#: templates/ishtar/manage_basket.html:9 +msgid "Checking \"Select all\" only selects the current page." msgstr "" -#: templates/ishtar/manage_basket.html:10 +#: templates/ishtar/manage_basket.html:13 msgid "Basket content" msgstr "" @@ -2073,11 +2092,11 @@ msgid "No person in this organization" msgstr "" #: templates/ishtar/sheet_organization.html:38 -msgid "General contractor organization of archaelogical files" +msgid "General contractor organization of archaeological files" msgstr "" #: templates/ishtar/sheet_organization.html:43 -msgid "Town planning service of archaelogical files" +msgid "Planning service of archaeological files" msgstr "" #: templates/ishtar/sheet_person.html:21 @@ -2108,15 +2127,18 @@ msgid "Associated operations as responsible" msgstr "" #: templates/ishtar/sheet_person.html:80 -msgid "In charge of archaelogical files" +#: templates/ishtar/wizard/wizard_person_deletion.html:6 +msgid "In charge of archaeological files" msgstr "" #: templates/ishtar/sheet_person.html:85 -msgid "General contractor of archaelogical files" +#: templates/ishtar/wizard/wizard_person_deletion.html:14 +msgid "General contractor of archaeological files" msgstr "" #: templates/ishtar/sheet_person.html:90 -msgid "Responsible for town planning service of archaelogical files" +#: templates/ishtar/wizard/wizard_person_deletion.html:22 +msgid "Responsible for planning service of archaeological files" msgstr "" #: templates/ishtar/sheet_person.html:96 @@ -2188,8 +2210,8 @@ msgstr "" #: templates/ishtar/blocks/window_nav.html:17 msgid "" -"Are you sure to restore to this version? All changement made since this " -"version will be lost." +"Are you sure to restore to this version? All changes made since this version " +"will be lost." msgstr "" #: templates/ishtar/blocks/window_nav.html:22 @@ -2319,7 +2341,7 @@ msgstr "" msgid "Would you like to save them?" msgstr "" -#: templates/ishtar/wizard/default_wizard.html:36 +#: templates/ishtar/wizard/default_wizard.html:37 #: templates/ishtar/wizard/parcels_wizard.html:24 #: templates/ishtar/wizard/relations_wizard.html:23 #: templates/ishtar/wizard/search.html:20 @@ -2327,9 +2349,10 @@ msgstr "" msgid "Add/Modify" msgstr "" -#: templates/ishtar/wizard/default_wizard.html:58 +#: templates/ishtar/wizard/default_wizard.html:59 msgid "" -"The form has changed if you don't validate it all your changes will be lost." +"The form has changed. If you don't validate it, all your changes will be " +"lost." msgstr "" #: templates/ishtar/wizard/parcels_wizard.html:12 @@ -2388,18 +2411,6 @@ msgstr "" msgid "Adminact: operator of archaeological operations" msgstr "" -#: templates/ishtar/wizard/wizard_person_deletion.html:6 -msgid "In charge of archaeological files" -msgstr "" - -#: templates/ishtar/wizard/wizard_person_deletion.html:14 -msgid "General contractor of archaeological files" -msgstr "" - -#: templates/ishtar/wizard/wizard_person_deletion.html:22 -msgid "Responsible town planning service of archaeological files" -msgstr "" - #: templates/ishtar/wizard/wizard_person_deletion.html:30 msgid "Scientist in charge of archaeological files" msgstr "" diff --git a/translations/fr/archaeological_context_records.po b/translations/fr/archaeological_context_records.po index b5ede5ba3..04aea6bec 100644 --- a/translations/fr/archaeological_context_records.po +++ b/translations/fr/archaeological_context_records.po @@ -3,24 +3,24 @@ # This file is distributed under the same license as the Ishtar package. # Étienne Loks <etienne.loks at peacefrogs net>, 2010-2015. # Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata -# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata +# Étienne Loks <etienne.loks@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-10-17 01:16-0400\n" +"PO-Revision-Date: 2017-01-09 01:15-0500\n" "Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n" "Language-Team: \n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -"X-Generator: Zanata 3.9.5\n" +"X-Generator: Zanata 3.9.6\n" -#: forms.py:47 forms.py:51 models.py:164 wizards.py:77 +#: forms.py:47 forms.py:51 models.py:175 wizards.py:77 msgid "Operation" msgstr "Opération" -#: forms.py:59 forms.py:137 models.py:166 +#: forms.py:59 forms.py:137 models.py:177 models.py:453 msgid "ID" msgstr "Identifiant" @@ -37,14 +37,14 @@ msgid "Operation's number (index by year)" msgstr "Numéro de l'opération (index par année)" #: forms.py:69 -msgid "Archaelogical site" -msgstr "Entité Archéologique" +msgid "Archaeological site" +msgstr "Entité archéologique" #: forms.py:75 -msgid "Search within operation relations" -msgstr "Rechercher parmi les opérations reliées" +msgid "Search within related operations" +msgstr "Rechercher parmi les opérations liées" -#: forms.py:77 forms.py:232 models.py:55 +#: forms.py:77 forms.py:233 models.py:55 msgid "Period" msgstr "Période" @@ -54,15 +54,15 @@ msgstr "Type d'unité" #: forms.py:79 msgid "Parcel (section/number/public domain)" -msgstr "Parcelle (section/nombre/domaine public)" +msgstr "Parcelle (section/numéro/domaine public)" #: forms.py:81 msgid "Search within relations" -msgstr "Recherche parmi les relations" +msgstr "Rechercher parmi les relations" -#: forms.py:111 forms.py:335 views.py:88 +#: forms.py:111 forms.py:336 views.py:92 msgid "Context record search" -msgstr "Recherche d'Unité d'Enregistrement" +msgstr "Rechercher une Unité d'Enregistrement" #: forms.py:125 msgid "You should at least select one context record." @@ -72,43 +72,44 @@ msgstr "Vous devez sélectionner au moins une Unité d'Enregistrement." msgid "General" msgstr "Général" -#: forms.py:136 models.py:131 models.py:162 +#: forms.py:136 models.py:132 models.py:173 models.py:455 msgid "Parcel" msgstr "Parcelle" -#: forms.py:139 models.py:167 templates/ishtar/sheet_contextrecord.html:27 +#: forms.py:139 models.py:178 models.py:456 +#: templates/ishtar/sheet_contextrecord.html:27 msgid "Description" msgstr "Description" -#: forms.py:141 models.py:168 +#: forms.py:141 models.py:179 msgid "General comment" msgstr "Commentaire général" -#: forms.py:143 models.py:172 +#: forms.py:143 models.py:183 msgid "Length (m)" msgstr "Taille (m)" -#: forms.py:144 models.py:173 +#: forms.py:144 models.py:184 msgid "Width (m)" msgstr "Largeur (m)" -#: forms.py:145 models.py:174 +#: forms.py:145 models.py:185 msgid "Thickness (m)" msgstr "Épaisseur (m)" -#: forms.py:146 models.py:176 +#: forms.py:146 models.py:187 msgid "Depth (m)" msgstr "Profondeur (m)" -#: forms.py:147 models.py:184 +#: forms.py:147 models.py:195 models.py:454 msgid "Unit" msgstr "Unité" -#: forms.py:148 models.py:186 +#: forms.py:148 models.py:197 msgid "Has furniture?" msgstr "Contient du mobilier ?" -#: forms.py:151 models.py:178 +#: forms.py:151 models.py:189 msgid "Location" msgstr "Lieu" @@ -125,116 +126,116 @@ msgstr "" "<p>Les images trop grandes sont retaillées en : %(width)dx%(height)d (le " "ratio est conservé).</p>" -#: forms.py:221 +#: forms.py:222 msgid "This ID already exists for this operation." msgstr "Cet identifiant existe déjà pour cette opération." -#: forms.py:227 forms.py:254 models.py:66 +#: forms.py:228 forms.py:255 models.py:66 msgid "Dating" msgstr "Datation" -#: forms.py:233 models.py:56 +#: forms.py:234 models.py:56 msgid "Start date" msgstr "Date de début" -#: forms.py:234 models.py:57 models.py:171 +#: forms.py:235 models.py:57 models.py:182 msgid "End date" msgstr "Date de fin" -#: forms.py:235 models.py:60 +#: forms.py:236 models.py:60 msgid "Quality" msgstr "Qualité" -#: forms.py:236 models.py:38 models.py:58 +#: forms.py:237 models.py:38 models.py:58 msgid "Dating type" msgstr "Type de datation" -#: forms.py:263 ishtar_menu.py:29 models.py:457 +#: forms.py:264 ishtar_menu.py:29 models.py:514 msgid "Context record" msgstr "Unité d'Enregistrement" -#: forms.py:284 +#: forms.py:285 msgid "Relations" msgstr "Relations" -#: forms.py:288 forms.py:296 models.py:189 +#: forms.py:289 forms.py:297 models.py:200 #: templates/ishtar/sheet_contextrecord.html:39 msgid "Interpretation" msgstr "Interprétation" -#: forms.py:292 +#: forms.py:293 msgid "Comments on dating" msgstr "Commentaires sur la datation" -#: forms.py:294 models.py:188 +#: forms.py:295 models.py:199 msgid "Filling" msgstr "Remplissage" -#: forms.py:298 models.py:209 +#: forms.py:299 models.py:220 msgid "Activity" msgstr "Activité" -#: forms.py:300 models.py:207 +#: forms.py:301 models.py:218 msgid "Identification" msgstr "Identification" -#: forms.py:302 models.py:192 +#: forms.py:303 models.py:203 msgid "TAQ" msgstr "TAQ" -#: forms.py:303 models.py:196 +#: forms.py:304 models.py:207 msgid "Estimated TAQ" msgstr "TAQ estimé" -#: forms.py:305 models.py:199 +#: forms.py:306 models.py:210 msgid "TPQ" msgstr "TPQ" -#: forms.py:306 models.py:203 +#: forms.py:307 models.py:214 msgid "Estimated TPQ" msgstr "TPQ estimé" -#: forms.py:321 +#: forms.py:322 msgid "Operation search" -msgstr "Recherche d'Opérations" +msgstr "Rechercher une opération" -#: forms.py:323 +#: forms.py:324 msgid "You should select an operation." msgstr "Vous devez sélectionner une Opération." -#: forms.py:328 +#: forms.py:329 msgid "Would you like to delete this context record?" msgstr "Voulez-vous supprimer cette Unité d'Enregistrement ?" -#: forms.py:337 +#: forms.py:338 msgid "You should select a context record." msgstr "Vous devez sélectionner une Unité d'Enregistrement." -#: forms.py:342 +#: forms.py:343 msgid "Year of the operation" msgstr "Année de l'opération" -#: forms.py:344 +#: forms.py:345 msgid "Numeric reference" msgstr "Référence numérique" -#: forms.py:350 +#: forms.py:351 msgid "Town of the operation" msgstr "Commune de l'opération" -#: forms.py:352 +#: forms.py:353 msgid "Period of the context record" msgstr "Période de l'Unité d'Enregistrement" -#: forms.py:354 +#: forms.py:355 msgid "Unit type of the context record" msgstr "Type d'unité de l'Unité d'Enregistrement" -#: forms.py:367 +#: forms.py:368 msgid "Documentation search" -msgstr "Recherche de documents" +msgstr "Rechercher une documentation" -#: forms.py:369 +#: forms.py:370 msgid "You should select a document." msgstr "Vous devez sélectionner un document." @@ -242,7 +243,7 @@ msgstr "Vous devez sélectionner un document." msgid "Search" msgstr "Recherche" -#: ishtar_menu.py:35 +#: ishtar_menu.py:35 ishtar_menu.py:55 msgid "Creation" msgstr "Ajout" @@ -258,10 +259,6 @@ msgstr "Suppression" msgid "Documentation" msgstr "Documentation" -#: ishtar_menu.py:55 -msgid "Add" -msgstr "Ajout" - #: models.py:39 msgid "Dating types" msgstr "Types de datation" @@ -314,27 +311,51 @@ msgstr "Type d'identification" msgid "Identification Types" msgstr "Types d'identification" -#: models.py:159 +#: models.py:133 models.py:457 +msgid "Periods" +msgstr "Périodes" + +#: models.py:161 +msgid "Parcel (town)" +msgstr "Parcelle (commune)" + +#: models.py:162 +msgid "Related context records" +msgstr "Unités d'Enregistrement liées" + +#: models.py:164 +msgid "Parcel (external ID)" +msgstr "Parcelle (identifiant externe)" + +#: models.py:165 +msgid "Datings (period)" +msgstr "Datations" + +#: models.py:166 +msgid "Parcel (year)" +msgstr "Parcelle (année)" + +#: models.py:170 msgid "External ID" msgstr "ID externe" -#: models.py:161 +#: models.py:172 msgid "External ID is set automatically" msgstr "L'identifiant externe est configuré automatiquement" -#: models.py:169 +#: models.py:180 msgid "Date d'ouverture" msgstr "Date d'ouverture" -#: models.py:179 +#: models.py:190 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:182 +#: models.py:193 msgid "Comment on datings" msgstr "Commentaire sur les datations" -#: models.py:193 +#: models.py:204 msgid "" "\"Terminus Ante Quem\" the context record can't have been created after this " "date" @@ -342,11 +363,11 @@ msgstr "" "« Terminus Ante Quem » l'Unité d'Enregistrement ne peut avoir été créée " "après cette date" -#: models.py:197 +#: models.py:208 msgid "Estimation of a \"Terminus Ante Quem\"" msgstr "Estimation d'un « Terminus Ante Quem »" -#: models.py:200 +#: models.py:211 msgid "" "\"Terminus Post Quem\" the context record can't have been created before " "this date" @@ -354,142 +375,146 @@ msgstr "" "« Terminus Post Quem » l'Unité d'Enregistrement ne peut avoir été créée " "avant cette date" -#: models.py:204 +#: models.py:215 msgid "Estimation of a \"Terminus Post Quem\"" msgstr "Estimation d'un « Terminus Post Quem »" -#: models.py:212 +#: models.py:223 msgid "Point" msgstr "Point" -#: models.py:213 +#: models.py:224 msgid "Polygon" msgstr "Polygone" -#: models.py:214 +#: models.py:225 msgid "Cached name" msgstr "Nom en cache" -#: models.py:218 models.py:219 templates/ishtar/sheet_contextrecord.html:4 +#: models.py:229 models.py:230 templates/ishtar/sheet_contextrecord.html:4 msgid "Context Record" msgstr "Unité d'Enregistrement" -#: models.py:221 +#: models.py:232 msgid "Can view all Context Records" msgstr "Peut voir toutes les Unités d'Enregistrement" -#: models.py:223 +#: models.py:234 msgid "Can view own Context Record" msgstr "Peut voir sa propre Unité d'Enregistrement" -#: models.py:225 +#: models.py:236 msgid "Can add own Context Record" msgstr "Peut ajouter sa propre Unité d'Enregistrement" -#: models.py:227 +#: models.py:238 msgid "Can change own Context Record" msgstr "Peut modifier sa propre Unité d'Enregistrement" -#: models.py:229 +#: models.py:240 msgid "Can delete own Context Record" msgstr "Peut supprimer sa propre Unité d'Enregistrement" -#: models.py:239 +#: models.py:250 msgctxt "short" msgid "Context record" msgstr "UE" -#: models.py:375 +#: models.py:387 msgid "Inverse relation" msgstr "Relation inverse" -#: models.py:379 models.py:403 +#: models.py:391 models.py:414 models.py:452 msgid "Relation type" msgstr "Type de relation" -#: models.py:380 +#: models.py:392 msgid "Relation types" msgstr "Types de relation" -#: models.py:398 +#: models.py:409 msgid "ID (left)" msgstr "ID (gauche)" -#: models.py:399 +#: models.py:410 msgid "Unit (left)" msgstr "Unité (gauche)" -#: models.py:400 +#: models.py:411 msgid "Parcel (left)" msgstr "Parcelle (gauche)" -#: models.py:401 +#: models.py:412 msgid "Description (left)" msgstr "Description (gauche)" -#: models.py:402 +#: models.py:413 msgid "Periods (left)" msgstr "Périodes (gauche)" -#: models.py:404 +#: models.py:415 +msgid "ID (right)" +msgstr "ID (droit)" + +#: models.py:416 msgid "Unit (right)" msgstr "Unité (droite)" -#: models.py:405 models.py:406 +#: models.py:417 msgid "Parcel (right)" msgstr "Parcelle (droite)" -#: models.py:407 +#: models.py:418 msgid "Description (right)" msgstr "Description (droite)" -#: models.py:408 +#: models.py:419 msgid "Periods (right)" msgstr "Périodes (droite)" -#: models.py:417 +#: models.py:428 msgid "Record relation" msgstr "Relation entre Unités d'Enregistrement" -#: models.py:418 +#: models.py:429 msgid "Record relations" msgstr "Relations entre Unités d'Enregistrement" -#: models.py:454 +#: models.py:511 msgid "Context record documentation" msgstr "Documentation d'une Unité d'Enregistrement" -#: models.py:455 +#: models.py:512 msgid "Context record documentations" msgstr "Documentations des Unités d'Enregistrement" -#: views.py:98 +#: views.py:102 msgid "New context record" -msgstr "Nouvelle Unité d'Enregistrement" +msgstr "Ajouter une Unité d'Enregistrement" -#: views.py:109 +#: views.py:113 msgid "Context record modification" -msgstr "Modification d'une Unité d'Enregistrement" +msgstr "Modifier une Unité d'Enregistrement" -#: views.py:123 +#: views.py:127 msgid "Context record deletion" -msgstr "Suppression d'une Unité d'Enregistrement" +msgstr "Supprimer une Unité d'Enregistrement" -#: views.py:128 +#: views.py:132 msgid "Context record: source search" -msgstr "Unité d'Enregistrement : recherche de documentation associée" +msgstr "Unité d'Enregistrement : rechercher une documentation associée" -#: views.py:136 +#: views.py:140 msgid "Context record: new source" -msgstr "Unité d'Enregistrement : nouvelle documentation associée" +msgstr "Unité d'Enregistrement : ajouter une documentation associée" -#: views.py:144 +#: views.py:148 msgid "Context record: source modification" -msgstr "Unité d'Enregistrement : modification d'une documentation associée" +msgstr "Unité d'Enregistrement : modifier une documentation associée" -#: views.py:159 +#: views.py:163 msgid "Context record: source deletion" -msgstr "Unité d'Enregistrement : suppression d'une documentation associée" +msgstr "Unité d'Enregistrement : supprimer une documentation associée" #: templates/ishtar/sheet_contextrecord.html:17 msgid "Complete ID:" diff --git a/translations/fr/archaeological_files.po b/translations/fr/archaeological_files.po index 925f44322..5d1df6224 100644 --- a/translations/fr/archaeological_files.po +++ b/translations/fr/archaeological_files.po @@ -10,254 +10,255 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" "Content-Type: text/plain; charset=UTF-8\n" -"PO-Revision-Date: 2016-08-29 11:35-0400\n" +"PO-Revision-Date: 2016-11-15 04:16-0500\n" "Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n" "Language-Team: \n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -"X-Generator: Zanata 3.9.5\n" +"X-Generator: Zanata 3.9.6\n" -#: forms.py:52 forms.py:212 forms.py:257 forms.py:404 forms.py:431 +#: forms.py:47 forms.py:210 forms.py:255 forms.py:396 forms.py:423 #: models.py:108 templates/ishtar/sheet_file.html:146 msgid "Year" msgstr "Année" -#: forms.py:53 forms.py:217 forms.py:259 models.py:111 +#: forms.py:48 forms.py:215 forms.py:257 models.py:111 msgid "Numeric reference" msgstr "Référence numérique" -#: forms.py:55 forms.py:219 +#: forms.py:50 forms.py:217 msgid "Other reference" msgstr "Autre référence" -#: forms.py:57 forms.py:439 +#: forms.py:52 forms.py:431 msgid "Parcel (section/number/public domain)" -msgstr "Parcelle (section/nombre/domaine public)" +msgstr "Parcelle (section/numéro/domaine public)" -#: forms.py:60 forms.py:415 forms.py:442 models.py:543 +#: forms.py:55 forms.py:407 forms.py:434 models.py:546 msgid "Department" msgstr "Département" -#: forms.py:61 forms.py:451 +#: forms.py:56 forms.py:443 msgid "File name" msgstr "Nom du dossier" -#: forms.py:62 forms.py:158 forms.py:223 models.py:119 +#: forms.py:57 forms.py:154 forms.py:221 models.py:119 msgid "File type" msgstr "Type de dossier" -#: forms.py:63 +#: forms.py:58 msgid "Is active?" msgstr "Est actif ?" -#: forms.py:64 forms.py:160 forms.py:321 +#: forms.py:59 forms.py:156 forms.py:314 msgid "Saisine type" msgstr "Type de saisine" -#: forms.py:65 forms.py:311 models.py:60 models.py:150 +#: forms.py:60 forms.py:304 models.py:60 models.py:150 msgid "Permit type" msgstr "Type de permis" -#: forms.py:67 forms.py:314 models.py:151 +#: forms.py:62 forms.py:307 models.py:151 msgid "Permit reference" msgstr "Référence du permis" -#: forms.py:68 forms.py:229 forms.py:372 models.py:180 +#: forms.py:63 forms.py:227 forms.py:364 models.py:180 #: templates/ishtar/sheet_file.html:99 msgid "Comment" msgstr "Commentaire" -#: forms.py:70 templates/ishtar/sheet_file.html:119 +#: forms.py:65 templates/ishtar/sheet_file.html:119 msgid "In charge" msgstr "Responsable" -#: forms.py:77 forms.py:289 forms.py:453 models.py:126 +#: forms.py:72 forms.py:281 forms.py:445 models.py:126 msgid "General contractor" msgstr "Aménageur" -#: forms.py:84 forms.py:462 +#: forms.py:79 forms.py:453 msgid "Organization of general contractor" msgstr "Organisation de l'aménageur" -#: forms.py:91 forms.py:485 +#: forms.py:87 forms.py:476 msgid "Created by" msgstr "Créé par" -#: forms.py:98 forms.py:493 +#: forms.py:94 forms.py:484 msgid "Modified by" msgstr "Modifié par" -#: forms.py:129 +#: forms.py:125 msgid "Archaeological file search" -msgstr "Recherche de dossiers archéologiques" +msgstr "Rechercher un dossier archéologique" -#: forms.py:143 +#: forms.py:139 msgid "You should select a file." msgstr "Vous devez sélectionner un dossier archéologique." -#: forms.py:146 forms.py:221 models.py:159 +#: forms.py:142 forms.py:219 models.py:159 msgid "Creation date" msgstr "Date de création" -#: forms.py:147 forms.py:324 models.py:161 +#: forms.py:143 forms.py:317 models.py:161 msgid "Reception date" msgstr "Date de réception" -#: forms.py:152 +#: forms.py:148 msgid "Slicing" msgstr "Découpage" -#: forms.py:154 +#: forms.py:150 msgid "Department detail" msgstr "Détail par département" -#: forms.py:156 +#: forms.py:152 msgid "Date get from" msgstr "Date utilisée" -#: forms.py:162 +#: forms.py:158 msgid "Date after" msgstr "Date après" -#: forms.py:164 +#: forms.py:160 msgid "Date before" msgstr "Date avant" -#: forms.py:201 templates/ishtar/sheet_file.html:14 +#: forms.py:197 templates/ishtar/sheet_file.html:14 msgid "General" msgstr "Général" -#: forms.py:206 models.py:121 +#: forms.py:202 models.py:121 msgid "Person in charge" msgstr "Responsable" -#: forms.py:220 models.py:118 +#: forms.py:218 models.py:118 msgid "Name" msgstr "Nom" -#: forms.py:225 models.py:163 +#: forms.py:223 models.py:163 msgid "Related file" msgstr "Dossier associé" -#: forms.py:233 models.py:171 +#: forms.py:231 models.py:171 msgid "Total surface (m2)" msgstr "Surface totale (m2)" -#: forms.py:236 models.py:177 +#: forms.py:234 models.py:177 msgid "Main address" msgstr "Adresse des terrains" -#: forms.py:237 +#: forms.py:235 msgid "Main address - complement" msgstr "Adresse des terrains - complément" -#: forms.py:250 +#: forms.py:248 #, python-format msgid "<br/>(last recorded: %s)" msgstr "<br/>(dernier enregistrement : %s)" -#: forms.py:272 +#: forms.py:270 msgid "Another file with this numeric id exists." msgstr "Un autre dossier avec cet identifiant numérique existe." -#: forms.py:283 +#: forms.py:275 msgid "Preventive informations" msgstr "Information archéologie préventive" -#: forms.py:301 models.py:138 -msgid "Responsible for town planning service" -msgstr "Responsable au service instructeur" +#: forms.py:293 models.py:138 +msgid "Responsible for planning service" +msgstr "Responsable pour le service instructeur" -#: forms.py:317 models.py:174 +#: forms.py:310 models.py:174 msgid "Total developed surface (m2)" msgstr "Surface totale aménagée (m2)" -#: forms.py:340 templates/ishtar/sheet_file.html:89 +#: forms.py:333 templates/ishtar/sheet_file.html:89 #: templates/ishtar/dashboards/dashboard_file.html:45 msgid "Research archaeology" msgstr "Archéologie programmée" -#: forms.py:348 models.py:183 templates/ishtar/sheet_file.html:90 +#: forms.py:341 models.py:183 templates/ishtar/sheet_file.html:90 msgid "Departments" msgstr "Départements" -#: forms.py:359 models.py:192 +#: forms.py:351 models.py:192 msgid "Scientist in charge" msgstr "Responsable scientifique" -#: forms.py:361 models.py:186 templates/ishtar/sheet_file.html:92 +#: forms.py:353 models.py:186 templates/ishtar/sheet_file.html:92 msgid "Requested operation type" msgstr "Type d'opération demandée" -#: forms.py:363 +#: forms.py:355 msgid "Lead organization" msgstr "Organisation porteuse du projet" -#: forms.py:379 models.py:196 templates/ishtar/sheet_file.html:97 +#: forms.py:371 models.py:196 templates/ishtar/sheet_file.html:97 msgid "Classified area" msgstr "Au sein d'un site classé" -#: forms.py:381 models.py:198 templates/ishtar/sheet_file.html:98 +#: forms.py:373 models.py:198 templates/ishtar/sheet_file.html:98 msgid "Protected area" msgstr "Au sein d'un secteur sauvegardé" -#: forms.py:395 +#: forms.py:387 msgid "Would you like to close this archaeological file?" -msgstr "Voulez vous clore ce dossier archéologique ?" +msgstr "Voulez-vous clore ce dossier archéologique ?" -#: forms.py:400 -msgid "Would you like to delete this archaelogical file ?" -msgstr "Voulez vous supprimer ce dossier archéologique ?" +#: forms.py:392 +msgid "Would you like to delete this archaeological file ?" +msgstr "Voulez-vous supprimer ce dossier archéologique ?" -#: forms.py:405 forms.py:432 forms.py:556 +#: forms.py:397 forms.py:424 forms.py:547 msgid "Index" msgstr "Index" -#: forms.py:409 forms.py:436 forms.py:542 +#: forms.py:401 forms.py:428 forms.py:533 msgid "Act type" msgstr "Type d'acte" -#: forms.py:410 +#: forms.py:402 msgid "Object (full text search)" msgstr "Objet (recherche texte intégral)" -#: forms.py:437 +#: forms.py:429 msgid "Indexed?" msgstr "Indexé ?" -#: forms.py:443 +#: forms.py:435 msgid "Object" msgstr "Objet" -#: forms.py:447 +#: forms.py:439 msgid "Signature date after" msgstr "Date de signature après" -#: forms.py:449 +#: forms.py:441 msgid "Signature date before" msgstr "Date de signature avant" -#: forms.py:470 +#: forms.py:461 msgid "File numeric reference" msgstr "Dossier : réf. numérique" -#: forms.py:471 +#: forms.py:462 msgid "File year" msgstr "Dossier : année" -#: forms.py:473 +#: forms.py:464 msgid "File other reference" msgstr "Dossier : autre référence" -#: forms.py:475 +#: forms.py:466 msgid "File in charge" msgstr "Dossier : responsable" -#: forms.py:483 +#: forms.py:474 msgid "File permit reference" msgstr "Dossier : réf. du permis" -#: ishtar_menu.py:33 models.py:220 templates/ishtar/sheet_file.html:4 +#: ishtar_menu.py:33 models.py:220 wizards.py:155 wizards.py:165 +#: templates/ishtar/sheet_file.html:4 msgid "Archaeological file" msgstr "Dossier" @@ -265,7 +266,7 @@ msgstr "Dossier" msgid "Search" msgstr "Recherche" -#: ishtar_menu.py:41 +#: ishtar_menu.py:41 ishtar_menu.py:64 msgid "Creation" msgstr "Ajout" @@ -285,10 +286,6 @@ msgstr "Suppression" msgid "Administrative act" msgstr "Acte administratif" -#: ishtar_menu.py:64 -msgid "Add" -msgstr "Ajout" - #: ishtar_menu.py:76 msgid "Documents" msgstr "Documents" @@ -343,11 +340,11 @@ msgid "General contractor organization" msgstr "Organisation de l'aménageur" #: models.py:141 -msgid "Town planning service (raw)" +msgid "Planning service (raw)" msgstr "Service instructeur (brut)" #: models.py:147 -msgid "Town planning service organization" +msgid "Planning service organization" msgstr "Service instructeur" #: models.py:153 @@ -391,23 +388,23 @@ msgid "Imported line" msgstr "Ligne importée" #: models.py:223 -msgid "Can view all Archaelogical files" +msgid "Can view all Archaeological files" msgstr "Peut voir tous les Dossiers" #: models.py:224 -msgid "Can view own Archaelogical file" +msgid "Can view own Archaeological file" msgstr "Peut voir son propre Dossier" #: models.py:225 -msgid "Can add own Archaelogical file" +msgid "Can add own Archaeological file" msgstr "Peut ajouter son propre Dossier" #: models.py:227 -msgid "Can change own Archaelogical file" +msgid "Can change own Archaeological file" msgstr "Peut modifier son propre Dossier" #: models.py:229 -msgid "Can delete own Archaelogical file" +msgid "Can delete own Archaeological file" msgstr "Peut supprimer son propre Dossier" #: models.py:230 @@ -418,29 +415,29 @@ msgstr "Peut fermer un Dossier" msgid "FILE" msgstr "DOSSIER" -#: models.py:404 +#: models.py:406 msgid "Multi-town" msgstr "Intercommunal" -#: models.py:410 +#: models.py:412 msgid "No town" msgstr "Pas de commune" -#: models.py:542 +#: models.py:545 msgid "File" msgstr "Dossier" #: views.py:107 msgid "File search" -msgstr "Recherche de dossier archéologique" +msgstr "Rechercher un dossier archéologique" #: views.py:116 msgid "New file" -msgstr "Nouveau dossier archéologique" +msgstr "Ajouter un dossier" #: views.py:135 msgid "File modification" -msgstr "Modification de dossier archéologique" +msgstr "Modifier un dossier archéologique" #: views.py:158 msgid "File closing" @@ -448,7 +445,7 @@ msgstr "Clôture de dossier archéologique" #: views.py:163 msgid "File deletion" -msgstr "Suppression de dossier archéologique" +msgstr "Supprimer un dossier" #: views.py:170 msgid "File: search administrative act" @@ -456,24 +453,20 @@ msgstr "Dossier : rechercher un acte administratif" #: views.py:179 msgid "File: new administrative act" -msgstr "Dossier : nouvel acte administratif" +msgstr "Dossier : ajouter un acte administratif" #: views.py:189 msgid "File: administrative act modification" -msgstr "Dossier : modification d'acte administratif" +msgstr "Dossier : modifier un acte administratif" #: views.py:213 msgid "File: administrative act deletion" -msgstr "Dossier : suppression d'acte administratif" +msgstr "Dossier : supprimer un acte administratif" #: wizards.py:124 templates/ishtar/sheet_file.html:111 msgid "Associated operations" msgstr "Opérations associées" -#: wizards.py:154 wizards.py:164 -msgid "Archaelogical file" -msgstr "Dossier" - #: templates/ishtar/administrativeact_document.html:9 msgid "Document generation" msgstr "Génération de document" @@ -543,7 +536,7 @@ msgid "Surface:" msgstr "Surface :" #: templates/ishtar/sheet_file.html:62 -msgid "Preventive archaelogical file" +msgid "Preventive archaeological file" msgstr "Dossier d'archéologie préventive" #: templates/ishtar/sheet_file.html:64 @@ -586,7 +579,7 @@ msgid "Excavation end date" msgstr "Date de fin de chantier" #: templates/ishtar/sheet_file.html:135 -msgid "No operation associated to this archaelogical file" +msgid "No operation associated to this archaeological file" msgstr "Pas d'opération associée à ce dossier archéologique" #: templates/ishtar/sheet_file.html:141 diff --git a/translations/fr/archaeological_files_pdl.po b/translations/fr/archaeological_files_pdl.po index 34955a35a..949555adc 100644 --- a/translations/fr/archaeological_files_pdl.po +++ b/translations/fr/archaeological_files_pdl.po @@ -2,141 +2,140 @@ # Copyright (C) 2014 # This file is distributed under the same license as the Ishtar package. # Étienne Loks <etienne.loks at peacefrogs net>, 2014. -# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata # Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #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-02-23 08:09-0500\n" -"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n" +"PO-Revision-Date: 2016-11-14 05:33-0500\n" +"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n" "Language-Team: \n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" -"X-Generator: Zanata 3.9.5\n" +"X-Generator: Zanata 3.9.6\n" -#: forms.py:41 +#: forms.py:38 msgid "General" msgstr "Général" -#: forms.py:43 +#: forms.py:40 msgid "File type" msgstr "Type de dossier" -#: forms.py:44 forms.py:403 +#: forms.py:41 forms.py:415 msgid "Year" msgstr "Année" -#: forms.py:48 +#: forms.py:45 msgid "Creation date" msgstr "Date de création" -#: forms.py:51 +#: forms.py:48 msgid "Reception date" msgstr "Date de réception" -#: forms.py:63 +#: forms.py:60 msgid "Reception date cannot be after today." msgstr "La date de réception ne peut pas être dans le futur." -#: forms.py:71 +#: forms.py:68 msgid "Permit type" msgstr "Type de permis" -#: forms.py:73 +#: forms.py:70 msgid "Saisine type" msgstr "Type de saisine" -#: forms.py:87 +#: forms.py:84 msgid "Planning" msgstr "Aménagement" -#: forms.py:90 +#: forms.py:87 msgid "Planning name" msgstr "Nom de l'aménagement" -#: forms.py:93 forms.py:123 +#: forms.py:90 forms.py:122 #: templates/ishtar/wizard/wizard_preventiveplanning.html:31 msgid "Towns" msgstr "Communes" -#: forms.py:95 forms.py:125 +#: forms.py:92 forms.py:124 #: templates/ishtar/wizard/wizard_preventiveplanning.html:41 msgid "Departments" msgstr "Départements" -#: forms.py:96 forms.py:126 +#: forms.py:93 forms.py:125 msgid "Locality" msgstr "Lieu-dit" -#: forms.py:99 forms.py:129 +#: forms.py:96 forms.py:128 msgid "Address (number/street)" msgstr "Adresse (n° / voie)" -#: forms.py:100 forms.py:130 +#: forms.py:97 forms.py:129 msgid "Number/street" msgstr "N° / voie" -#: forms.py:102 forms.py:132 +#: forms.py:99 forms.py:131 msgid "Postal code" msgstr "Code postal" -#: forms.py:107 +#: forms.py:104 msgid "Total surface (m2)" msgstr "Surface totale des terrains (m2)" -#: forms.py:112 +#: forms.py:109 msgid "Total developed surface (m2)" msgstr "Surface totale aménagée (m2)" -#: forms.py:119 +#: forms.py:116 msgid "Address" msgstr "Adresse" -#: forms.py:233 forms.py:237 forms.py:267 forms.py:270 +#: forms.py:119 +msgid "Project name" +msgstr "Nom du projet" + +#: forms.py:232 forms.py:236 forms.py:273 forms.py:276 msgid "General contractor" msgstr "Aménageur" -#: forms.py:252 forms.py:364 +#: forms.py:254 forms.py:372 msgid "In charge" msgstr "Responsable" -#: forms.py:342 -msgid "Town planning service" +#: forms.py:348 forms.py:355 +msgid "Planning service" msgstr "Service instructeur" -#: forms.py:346 +#: forms.py:352 msgid "File reference" msgstr "Référence du dossier" -#: forms.py:349 -msgid "Planning service" -msgstr "Service instructeur" - -#: forms.py:383 +#: forms.py:395 msgid "Person in charge" msgstr "Dossier suivi par" -#: forms.py:395 +#: forms.py:407 msgid "Related file" msgstr "Dossier lié à" -#: forms.py:399 +#: forms.py:411 msgid "Comment" msgstr "Commentaires" -#: forms.py:406 +#: forms.py:418 msgid "Numeric reference" msgstr "Référence numérique" #: views.py:50 msgid "New file" -msgstr "Nouveau dossier" +msgstr "Ajouter un dossier" #: views.py:77 msgid "File modification" -msgstr "Modification de dossier archéologique" +msgstr "Modifier un dossier archéologique" #: views.py:93 views.py:97 msgid "File followed by" diff --git a/translations/fr/archaeological_finds.po b/translations/fr/archaeological_finds.po index 40d36c10b..58106a58b 100644 --- a/translations/fr/archaeological_finds.po +++ b/translations/fr/archaeological_finds.po @@ -2,140 +2,155 @@ # Copyright (C) 2010-2015 # This file is distributed under the same license as the Ishtar package. # Étienne Loks <etienne.loks at peacefrogs net>, 2010-2015. -# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata # Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata -# Étienne Loks <etienne.loks@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-09-15 10:20-0400\n" -"Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n" +"PO-Revision-Date: 2017-01-09 05:41-0500\n" +"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n" "Language-Team: \n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -"X-Generator: Zanata 3.9.5\n" +"X-Generator: Zanata 3.9.6\n" -#: forms.py:50 forms.py:54 wizards.py:60 +#: forms.py:88 forms.py:92 wizards.py:64 msgid "Context record" msgstr "Unité d'Enregistrement" -#: forms.py:83 ishtar_menu.py:31 models.py:439 models.py:750 models.py:850 -#: models.py:1000 templates/ishtar/sheet_find.html:5 +#: forms.py:121 ishtar_menu.py:32 models_finds.py:466 models_finds.py:791 +#: models_finds.py:800 models_treatments.py:265 +#: templates/ishtar/sheet_find.html:5 msgid "Find" msgstr "Mobilier" -#: forms.py:94 forms.py:218 forms.py:425 models.py:127 models.py:376 +#: forms.py:132 forms.py:263 forms.py:487 models_finds.py:127 +#: models_finds.py:394 msgid "Free ID" msgstr "ID libre" -#: forms.py:96 models.py:425 +#: forms.py:134 models_finds.py:449 msgid "Previous ID" msgstr "Identifiant précédent" -#: forms.py:97 forms.py:250 forms.py:591 models.py:131 models.py:377 -#: models.py:784 +#: forms.py:135 forms.py:295 forms_treatments.py:133 models_finds.py:131 +#: models_finds.py:395 models_treatments.py:123 msgid "Description" msgstr "Description" -#: forms.py:100 forms.py:252 models.py:142 +#: forms.py:138 forms.py:297 models_finds.py:142 msgid "Batch/object" msgstr "Lot/objet" -#: forms.py:102 models.py:405 +#: forms.py:140 models_finds.py:423 msgid "Is complete?" msgstr "Est complet ?" -#: forms.py:105 forms.py:240 forms.py:429 models.py:50 +#: forms.py:143 forms.py:285 forms.py:491 models_finds.py:50 msgid "Material type" msgstr "Type de matériau" -#: forms.py:106 forms.py:244 models.py:62 models.py:381 +#: forms.py:144 forms.py:289 models_finds.py:62 models_finds.py:399 msgid "Conservatory state" msgstr "État sanitaire" -#: forms.py:109 models.py:383 +#: forms.py:147 models_finds.py:401 msgid "Conservatory comment" msgstr "Commentaire relatif à la conservation" -#: forms.py:112 models.py:102 models.py:408 +#: forms.py:150 models_finds.py:102 models_finds.py:426 msgid "Object types" msgstr "Types d'objet" -#: forms.py:114 forms.py:243 models.py:71 +#: forms.py:152 forms.py:288 models_finds.py:71 msgid "Preservation type" msgstr "Type de conservation" -#: forms.py:117 forms.py:246 models.py:410 +#: forms.py:155 forms.py:291 models_finds.py:428 msgid "Integrity / interest" msgstr "Intégrité / intérêt" -#: forms.py:120 forms.py:248 models.py:413 +#: forms.py:158 forms.py:293 models_finds.py:431 msgid "Remarkability" msgstr "Remarquabilité" -#: forms.py:122 models.py:415 +#: forms.py:161 models_finds.py:441 +msgid "Point of topographic reference" +msgstr "Point de référence topographique" + +#: forms.py:164 models_finds.py:435 msgid "Length (cm)" msgstr "Longueur (cm)" -#: forms.py:123 models.py:416 +#: forms.py:165 models_finds.py:436 msgid "Width (cm)" msgstr "Largeur (cm)" -#: forms.py:124 models.py:417 +#: forms.py:166 models_finds.py:437 msgid "Height (cm)" msgstr "Hauteur (cm)" -#: forms.py:125 models.py:418 +#: forms.py:167 models_finds.py:438 msgid "Diameter (cm)" msgstr "Diamètre (cm)" -#: forms.py:126 forms.py:430 models.py:388 +#: forms.py:168 models_finds.py:439 +msgid "Thickness (cm)" +msgstr "Épaisseur (cm)" + +#: forms.py:169 forms.py:492 models_finds.py:406 msgid "Volume (l)" msgstr "Volume (l)" -#: forms.py:127 forms.py:431 models.py:389 +#: forms.py:170 forms.py:493 models_finds.py:407 msgid "Weight (g)" msgstr "Poids (g)" -#: forms.py:129 models.py:419 +#: forms.py:172 models_finds.py:443 msgid "Dimensions comment" msgstr "Commentaire concernant les dimensions" -#: forms.py:130 forms.py:432 models.py:392 +#: forms.py:173 forms.py:494 models_finds.py:410 msgid "Find number" msgstr "Mobilier (en nombre)" -#: forms.py:131 models.py:421 +#: forms.py:175 models_finds.py:434 +msgid "Minimum number of individuals (MNI)" +msgstr "Nombre minimum d'individus (NMI)" + +#: forms.py:176 models_finds.py:445 msgid "Mark" msgstr "Marque" -#: forms.py:132 forms.py:254 models.py:427 +#: forms.py:177 forms.py:299 models_finds.py:451 msgid "Check" msgstr "Vérification" -#: forms.py:134 models.py:429 +#: forms.py:179 models_finds.py:453 msgid "Check date" msgstr "Date de vérification" -#: forms.py:135 models.py:132 models.py:422 models.py:785 +#: forms.py:180 forms_treatments.py:131 forms_treatments.py:418 +#: models_finds.py:132 models_finds.py:446 models_treatments.py:122 +#: models_treatments.py:468 msgid "Comment" msgstr "Commentaires" -#: forms.py:138 models.py:423 +#: forms.py:183 models_finds.py:447 msgid "Comment on dating" msgstr "Commentaire général sur les datations" -#: forms.py:139 models.py:431 +#: forms.py:184 models_finds.py:455 msgid "Estimated value" msgstr "Valeur estimée" -#: forms.py:141 +#: forms.py:186 forms_treatments.py:142 msgid "Image" msgstr "Image" -#: forms.py:142 +#: forms.py:187 forms_treatments.py:143 #, python-format msgid "" "<p>Heavy images are resized to: %(width)dx%(height)d (ratio is preserved).</" @@ -144,631 +159,1005 @@ msgstr "" "<p>Les images trop grandes sont retaillées en : %(width)dx%(height)d (le " "ratio est conservé).</p>" -#: forms.py:181 forms.py:212 models.py:400 +#: forms.py:226 forms.py:257 models_finds.py:418 msgid "Dating" msgstr "Datation" -#: forms.py:186 forms.py:238 +#: forms.py:231 forms.py:283 msgid "Period" msgstr "Période" -#: forms.py:187 forms.py:593 models.py:798 models.py:863 models.py:1005 -#: templates/ishtar/sheet_find.html:92 templates/ishtar/sheet_find.html:121 +#: forms.py:232 forms_treatments.py:137 forms_treatments.py:420 +#: models_finds.py:805 models_treatments.py:125 models_treatments.py:276 +#: templates/ishtar/sheet_find.html:102 templates/ishtar/sheet_find.html:142 msgid "Start date" msgstr "Date de début" -#: forms.py:189 forms.py:595 models.py:799 models.py:864 models.py:1006 -#: templates/ishtar/sheet_find.html:93 templates/ishtar/sheet_find.html:122 +#: forms.py:234 models_finds.py:806 models_treatments.py:277 +#: templates/ishtar/sheet_find.html:103 templates/ishtar/sheet_find.html:143 msgid "End date" msgstr "Date de fin" -#: forms.py:190 +#: forms.py:235 msgid "Quality" msgstr "Qualité" -#: forms.py:192 +#: forms.py:237 msgid "Dating type" msgstr "Type de datation" -#: forms.py:194 +#: forms.py:239 msgid "Precise dating" msgstr "Datation précise" -#: forms.py:216 models.py:150 +#: forms.py:261 models_finds.py:150 msgid "Short ID" msgstr "ID court" -#: forms.py:217 models.py:153 +#: forms.py:262 models_finds.py:153 msgid "Complete ID" msgstr "ID complet" -#: forms.py:221 +#: forms.py:266 forms_treatments.py:53 forms_treatments.py:95 +#: forms_treatments.py:268 forms_treatments.py:340 forms_treatments.py:390 +#: forms_treatments.py:473 models_treatments.py:98 models_treatments.py:440 msgid "Year" msgstr "Année" -#: forms.py:223 +#: forms.py:268 msgid "Operation's number (index by year)" msgstr "Numéro de l'opération (index par année)" -#: forms.py:226 +#: forms.py:271 msgid "Code PATRIARCHE" msgstr "Code PATRIARCHE" -#: forms.py:230 -msgid "Archaelogical site" -msgstr "Entité Archéologique" +#: forms.py:275 +msgid "Archaeological site" +msgstr "Entité archéologique" -#: forms.py:236 -msgid "Search within operation relations" -msgstr "Rechercher parmi les opérations reliées" +#: forms.py:281 +msgid "Search within related operations" +msgstr "Rechercher parmi les opérations liées" -#: forms.py:241 models.py:101 +#: forms.py:286 models_finds.py:101 msgid "Object type" msgstr "Type d'objet" -#: forms.py:255 +#: forms.py:300 forms_treatments.py:56 msgid "Has an image?" msgstr "Dispose d'une image ?" -#: forms.py:297 forms.py:310 views.py:66 +#: forms.py:342 forms.py:355 views.py:129 msgid "Find search" -msgstr "Recherche de mobilier" +msgstr "Rechercher un mobilier" -#: forms.py:324 +#: forms.py:369 templates/ishtar/sheet_treatment.html:42 msgid "Upstream finds" msgstr "Mobilier amont" -#: forms.py:326 models.py:440 +#: forms.py:371 models_finds.py:467 msgid "Finds" msgstr "Mobilier" -#: forms.py:336 +#: forms.py:381 msgid "You should at least select one archaeological find." msgstr "Vous devez sélectionner au moins un mobilier archéologique." -#: forms.py:422 +#: forms.py:484 msgid "Resulting find" msgstr "Mobilier résultant" -#: forms.py:427 +#: forms.py:489 msgid "Precise description" msgstr "Description précise" -#: forms.py:442 +#: forms.py:504 msgid "Resulting finds" msgstr "Mobiliers résultants" -#: forms.py:447 +#: forms.py:509 msgid "Would you like to delete this find?" -msgstr "Souhaitez vous supprimer ce mobilier ?" +msgstr "Voulez-vous supprimer ce mobilier ?" -#: forms.py:451 +#: forms.py:513 models_treatments.py:90 msgid "Upstream find" msgstr "Mobilier amont" -#: forms.py:462 +#: forms.py:526 msgid "Archaeological find search" -msgstr "Recherche de mobilier" +msgstr "Rechercher un mobilier" -#: forms.py:464 +#: forms.py:528 msgid "You should select an archaeological find." msgstr "Vous devez sélectionner du mobilier." -#: forms.py:469 +#: forms.py:533 msgid "Year of the operation" msgstr "Année de l'opération" -#: forms.py:471 +#: forms.py:535 msgid "Numeric reference" msgstr "Référence numérique" -#: forms.py:478 -msgid "Period of the archaelogical find" +#: forms.py:542 +msgid "Period of the archaeological find" msgstr "Période du mobilier" -#: forms.py:480 -msgid "Material type of the archaelogical find" +#: forms.py:544 +msgid "Material type of the archaeological find" msgstr "Type de matériau du mobilier" -#: forms.py:482 -msgid "Description of the archaelogical find" +#: forms.py:546 +msgid "Description of the archaeological find" msgstr "Description du mobilier" -#: forms.py:494 +#: forms.py:558 forms_treatments.py:574 forms_treatments.py:600 msgid "Documentation search" -msgstr "Recherche de document" +msgstr "Rechercher une documentation" -#: forms.py:496 +#: forms.py:560 forms_treatments.py:576 forms_treatments.py:602 msgid "You should select a document." msgstr "Vous devez sélectionner un document." -#: forms.py:513 -msgid "Another basket already exist with this name." -msgstr "Un autre panier existe déjà avec ce nom." +#: forms.py:577 +msgid "Another basket already exists with this name." +msgstr "Un autre panier existant utilise déjà ce nom." -#: forms.py:523 ishtar_menu.py:60 +#: forms.py:587 forms.py:591 forms_treatments.py:159 ishtar_menu.py:56 msgid "Basket" msgstr "Panier" -#: forms.py:573 +#: forms_treatments.py:51 forms_treatments.py:91 models_treatments.py:94 +#: templates/ishtar/sheet_find.html:97 templates/ishtar/sheet_find.html:137 +msgid "Label" +msgstr "Intitulé" + +#: forms_treatments.py:52 forms_treatments.py:94 models_treatments.py:96 +msgid "Other ref." +msgstr "Autre réf." + +#: forms_treatments.py:54 forms_treatments.py:221 forms_treatments.py:269 +#: forms_treatments.py:332 forms_treatments.py:341 forms_treatments.py:443 +#: forms_treatments.py:474 forms_treatments.py:541 models_treatments.py:100 +#: models_treatments.py:442 +msgid "Index" +msgstr "Index" + +#: forms_treatments.py:55 forms_treatments.py:100 forms_treatments.py:285 +#: forms_treatments.py:562 models_treatments.py:56 models_treatments.py:105 +#: models_treatments.py:275 +msgid "Treatment type" +msgstr "Type de traitement" + +#: forms_treatments.py:67 forms_treatments.py:544 views.py:359 +msgid "Treatment search" +msgstr "Rechercher un traitement" + +#: forms_treatments.py:79 msgid "Base treatment" msgstr "Traitement de base" -#: forms.py:578 models.py:772 models.py:787 models.py:862 -msgid "Treatment type" -msgstr "Type de traitement" +#: forms_treatments.py:102 models_treatments.py:107 +msgid "State" +msgstr "État" -#: forms.py:580 models.py:796 models.py:867 -#: templates/ishtar/sheet_find.html:90 templates/ishtar/sheet_find.html:119 -msgid "Doer" -msgstr "Opérateur" +#: forms_treatments.py:104 +msgid "Target" +msgstr "Destination" + +#: forms_treatments.py:106 forms_treatments.py:401 models_treatments.py:115 +msgid "Responsible" +msgstr "Responsable" -#: forms.py:586 models.py:789 models.py:865 +#: forms_treatments.py:112 models_treatments.py:118 +msgid "Organization" +msgstr "Organisation" + +#: forms_treatments.py:118 models_treatments.py:110 models_treatments.py:278 msgid "Location" msgstr "Lieu" -#: forms.py:607 -msgid "Leave it blank if you want to select a single item" -msgstr "Ne pas modifier si vous voulez sélectionner un seul élément" +#: forms_treatments.py:124 +msgid "Container (relevant for packaging)" +msgstr "Contenant (pertinent dans le cadre du conditionnement)" + +#: forms_treatments.py:130 forms_treatments.py:397 +msgid "External ref." +msgstr "Réf. externe" + +#: forms_treatments.py:135 models_treatments.py:124 +msgid "Goal" +msgstr "But" + +#: forms_treatments.py:139 forms_treatments.py:426 models_treatments.py:126 +#: models_treatments.py:462 +msgid "Closing date" +msgstr "Date de clôture" + +#: forms_treatments.py:159 +msgid "Single find" +msgstr "Mobilier isolé" + +#: forms_treatments.py:193 +msgid "" +"The container field is attached to the treatment. If no packaging treatment " +"is done it is not relevant." +msgstr "" +"Le champ concernant le contenant est rattaché au traitement. Si aucun " +"conditionnement n'est réalisé, il n'est pas pertinent." + +#: forms_treatments.py:198 +msgid "If a packaging treatment is done, the container field must be filled." +msgstr "" +"Si un conditionnement est fait, le champ du contenant doit être rempli." + +#: forms_treatments.py:202 +msgid "A responsible or an organization must be defined." +msgstr "Un responsable ou une organisation doit être défini." + +#: forms_treatments.py:240 +msgid "Another treatment with this index exists for {}." +msgstr "Un autre traitement avec cet index existe pour {}." + +#: forms_treatments.py:246 models_treatments.py:103 +msgid "Associated request" +msgstr "Demande associée" + +#: forms_treatments.py:250 forms_treatments.py:381 ishtar_menu.py:107 +#: models_treatments.py:473 models_treatments.py:495 models_treatments.py:556 +#: wizards.py:183 templates/ishtar/sheet_treatmentfile.html:5 +msgid "Treatment request" +msgstr "Demande de traitement" + +#: forms_treatments.py:259 +msgid "" +"Are you sure you want to delete this treatment? All changes made to the " +"associated finds since this treatment record will be lost!" +msgstr "" +"Êtes-vous sûr de vouloir supprimer ce traitement ? Toutes les modifications " +"sur le mobilier associé réalisées depuis l'enregistrement de ce traitement " +"seront perdues !" + +#: forms_treatments.py:262 +msgid "Would you like to delete this treatment?" +msgstr "Voulez-vous supprimer ce traitement ?" + +#: forms_treatments.py:270 forms_treatments.py:318 forms_treatments.py:475 +#: forms_treatments.py:526 +msgid "Act type" +msgstr "Type d'acte" + +#: forms_treatments.py:271 forms_treatments.py:476 +msgid "Indexed?" +msgstr "Indexé ?" + +#: forms_treatments.py:272 forms_treatments.py:477 models_finds.py:120 +msgid "Object" +msgstr "Objet" + +#: forms_treatments.py:276 forms_treatments.py:481 +msgid "Signature date after" +msgstr "Date de signature après" -#: forms.py:614 -msgid "This treatment type is not available." -msgstr "Ce type de traitement n'est pas disponible" +#: forms_treatments.py:278 forms_treatments.py:483 +msgid "Signature date before" +msgstr "Date de signature avant" -#: forms.py:618 -msgid "This treatment needs a basket." -msgstr "Ce traitement nécessite de sélectionner un panier." +#: forms_treatments.py:280 forms_treatments.py:557 +msgid "Treatment name" +msgstr "Nom du traitement" -#: ishtar_menu.py:35 ishtar_menu.py:83 +#: forms_treatments.py:281 forms_treatments.py:558 +msgid "Treatment year" +msgstr "Année du traitement" + +#: forms_treatments.py:282 forms_treatments.py:559 +msgid "Treatment index" +msgstr "Index du traitement" + +#: forms_treatments.py:284 forms_treatments.py:561 +msgid "Treatment internal reference" +msgstr "Référence interne du traitement" + +#: forms_treatments.py:288 forms_treatments.py:495 +msgid "Modified by" +msgstr "Modifié par" + +#: forms_treatments.py:338 forms_treatments.py:388 models_treatments.py:447 +msgid "Name" +msgstr "Nom" + +#: forms_treatments.py:339 forms_treatments.py:395 +msgid "Internal ref." +msgstr "Réf. interne" + +#: forms_treatments.py:342 forms_treatments.py:399 +#: templates/ishtar/sheet_find.html:98 templates/ishtar/sheet_find.html:138 +#: templates/ishtar/sheet_find.html:216 +msgid "Type" +msgstr "Type" + +#: forms_treatments.py:344 +msgid "In charge" +msgstr "Responsable" + +#: forms_treatments.py:350 forms_treatments.py:407 models_treatments.py:456 +#: templates/ishtar/sheet_treatmentfile.html:31 +msgid "Applicant" +msgstr "Demandeur" + +#: forms_treatments.py:356 forms_treatments.py:413 models_treatments.py:460 +#: templates/ishtar/sheet_treatmentfile.html:38 +msgid "Applicant organisation" +msgstr "Organisation du demandeur" + +#: forms_treatments.py:369 forms_treatments.py:549 views.py:463 +msgid "Treatment request search" +msgstr "Rechercher une demande de traitement" + +#: forms_treatments.py:423 models_treatments.py:466 +msgid "Reception date" +msgstr "Date de réception" + +#: forms_treatments.py:462 +msgid "Another treatment request with this index exists for {}." +msgstr "Une autre demande de traitement avec cet index existe pour {}." + +#: forms_treatments.py:468 +msgid "Are you sure you want to delete this treatment request?" +msgstr "Êtes-vous sûr de vouloir supprimer cette demande de traitement ? " + +#: forms_treatments.py:469 +msgid "Would you like to delete this treatment request?" +msgstr "Voulez-vous supprimer cette demande de traitement ?" + +#: forms_treatments.py:485 forms_treatments.py:581 +msgid "Treatment request name" +msgstr "Nom du dossier de traitement" + +#: forms_treatments.py:487 forms_treatments.py:583 +msgid "Treatment request year" +msgstr "Année du dossier de traitement" + +#: forms_treatments.py:489 forms_treatments.py:585 +msgid "Treatment request index" +msgstr "Index de la demande de traitement" + +#: forms_treatments.py:491 forms_treatments.py:587 +msgid "Treatment request internal reference" +msgstr "Référence interne de la demande de traitement" + +#: forms_treatments.py:492 forms_treatments.py:588 models_treatments.py:425 +#: models_treatments.py:449 +msgid "Treatment request type" +msgstr "Type de demande de traitement" + +#: forms_treatments.py:546 +msgid "You should select a treatment." +msgstr "Vous devez sélectionner un traitement." + +#: forms_treatments.py:552 +msgid "You should select a treatment request." +msgstr "Vous devez sélectionner une demande de traitement." + +#: ishtar_menu.py:36 ishtar_menu.py:79 ishtar_menu.py:111 ishtar_menu.py:134 +#: ishtar_menu.py:158 ishtar_menu.py:190 ishtar_menu.py:214 ishtar_menu.py:238 msgid "Search" msgstr "Recherche" -#: ishtar_menu.py:40 ishtar_menu.py:63 ishtar_menu.py:88 +#: ishtar_menu.py:41 ishtar_menu.py:59 ishtar_menu.py:84 ishtar_menu.py:116 +#: ishtar_menu.py:138 ishtar_menu.py:163 ishtar_menu.py:195 ishtar_menu.py:218 +#: ishtar_menu.py:243 msgid "Creation" msgstr "Ajout" -#: ishtar_menu.py:45 ishtar_menu.py:93 +#: ishtar_menu.py:46 ishtar_menu.py:89 ishtar_menu.py:121 ishtar_menu.py:142 +#: ishtar_menu.py:168 ishtar_menu.py:200 ishtar_menu.py:223 ishtar_menu.py:248 msgid "Modification" msgstr "Modification" -#: ishtar_menu.py:55 ishtar_menu.py:74 ishtar_menu.py:98 +#: ishtar_menu.py:51 ishtar_menu.py:70 ishtar_menu.py:94 ishtar_menu.py:126 +#: ishtar_menu.py:145 ishtar_menu.py:173 ishtar_menu.py:205 ishtar_menu.py:226 +#: ishtar_menu.py:253 msgid "Deletion" msgstr "Suppression" -#: ishtar_menu.py:68 +#: ishtar_menu.py:64 msgid "Manage items" -msgstr "Gérer les éléments" +msgstr "Gestion des éléments" -#: ishtar_menu.py:80 +#: ishtar_menu.py:76 msgid "Documentation" msgstr "Documentation" -#: models.py:43 +#: ishtar_menu.py:131 ishtar_menu.py:211 models_finds.py:802 +msgid "Administrative act" +msgstr "Acte administratif" + +#: ishtar_menu.py:149 ishtar_menu.py:230 templates/ishtar/sheet_find.html:211 +#: templates/ishtar/sheet_find.html:213 +msgid "Documents" +msgstr "Documents" + +#: ishtar_menu.py:155 ishtar_menu.py:235 +msgid "Source" +msgstr "Documentation" + +#: ishtar_menu.py:183 models_treatments.py:135 models_treatments.py:267 +#: models_treatments.py:540 templates/ishtar/sheet_treatment.html:5 +msgid "Treatment" +msgstr "Traitement" + +#: ishtar_menu.py:187 +msgid "Simple treatments" +msgstr "Traitements simples" + +#: models_finds.py:43 msgid "Code" msgstr "Code" -#: models.py:44 +#: models_finds.py:44 msgid "Recommendation" msgstr "Recommandation" -#: models.py:47 +#: models_finds.py:47 msgid "Parent material" msgstr "Matériau parent" -#: models.py:51 models.py:379 +#: models_finds.py:51 models_finds.py:397 msgid "Material types" msgstr "Types de matériau" -#: models.py:59 +#: models_finds.py:59 msgid "Parent conservatory state" msgstr "État sanitaire - parent" -#: models.py:63 +#: models_finds.py:63 msgid "Conservatory states" msgstr "États sanitaires" -#: models.py:72 +#: models_finds.py:72 msgid "Preservation types" msgstr "Types de conservation" -#: models.py:80 +#: models_finds.py:80 msgid "Integrity / interest type" msgstr "Type d'intégrité / intérêt" -#: models.py:81 +#: models_finds.py:81 msgid "Integrity / interest types" -msgstr "Types d'intégrité / intérêts" +msgstr "Types d'intégrité / intérêt" -#: models.py:89 +#: models_finds.py:89 msgid "Remarkability type" msgstr "Type de remarquabilité" -#: models.py:90 +#: models_finds.py:90 msgid "Remarkability types" msgstr "Types de remarquabilité" -#: models.py:98 +#: models_finds.py:98 msgid "Parent" msgstr "Parent" -#: models.py:119 +#: models_finds.py:119 msgid "Unknow" msgstr "Inconnu" -#: models.py:120 -msgid "Object" -msgstr "Objet" - -#: models.py:121 +#: models_finds.py:121 msgid "Batch" msgstr "Lot" -#: models.py:128 models.py:372 models.py:780 +#: models_finds.py:128 models_finds.py:390 models_treatments.py:120 +#: models_treatments.py:445 msgid "External ID" msgstr "ID externe" -#: models.py:130 models.py:374 +#: models_finds.py:130 models_finds.py:392 msgid "External ID is set automatically" msgstr "L'identifiant externe est configuré automatiquement" -#: models.py:134 +#: models_finds.py:134 msgid "Topographic localisation" msgstr "Localisation topogaphique" -#: models.py:135 +#: models_finds.py:135 msgid "Special interest" msgstr "Intérêt spécifique" -#: models.py:139 +#: models_finds.py:139 msgid "Context Record" msgstr "Unité d'Enregistrement" -#: models.py:140 +#: models_finds.py:140 msgid "Discovery date" msgstr "Date de découverte" -#: models.py:145 +#: models_finds.py:145 msgid "Material index" msgstr "Index matériel" -#: models.py:146 +#: models_finds.py:146 msgid "Point" msgstr "Point" -#: models.py:147 +#: models_finds.py:147 msgid "Line" msgstr "Ligne" -#: models.py:148 +#: models_finds.py:148 msgid "Polygon" msgstr "Polygon" -#: models.py:151 models.py:154 +#: models_finds.py:151 models_finds.py:154 msgid "Cached value - do not edit" msgstr "Valeur en cache - ne pas éditer" -#: models.py:159 models.py:370 +#: models_finds.py:159 models_finds.py:388 msgid "Base find" msgstr "Mobilier de base" -#: models.py:160 +#: models_finds.py:160 msgid "Base finds" msgstr "Mobilier de base" -#: models.py:162 +#: models_finds.py:162 msgid "Can view all Base finds" msgstr "Peut voir tout le Mobilier de base" -#: models.py:163 +#: models_finds.py:163 msgid "Can view own Base find" msgstr "Peut voir son propre Mobilier de base" -#: models.py:164 +#: models_finds.py:164 msgid "Can add own Base find" msgstr "Peut ajouter son propre Mobilier de base" -#: models.py:165 +#: models_finds.py:165 msgid "Can change own Base find" msgstr "Peut modifier son propre Mobilier de base" -#: models.py:166 +#: models_finds.py:166 msgid "Can delete own Base find" msgstr "Peut supprimer son propre Mobilier de base" -#: models.py:275 +#: models_finds.py:276 msgid "g" msgstr "g" -#: models.py:276 +#: models_finds.py:277 msgid "kg" msgstr "kg" -#: models.py:278 +#: models_finds.py:279 msgid "Not checked" msgstr "Non vérifié" -#: models.py:279 +#: models_finds.py:280 msgid "Checked but incorrect" msgstr "Vérifié mais incorrect" -#: models.py:280 +#: models_finds.py:281 msgid "Checked and correct" msgstr "Vérifié et correct" -#: models.py:320 +#: models_finds.py:315 +msgid "Periods" +msgstr "Périodes" + +#: models_finds.py:316 models_finds.py:421 models_treatments.py:127 +#: models_treatments.py:279 templates/ishtar/sheet_find.html:101 +#: templates/ishtar/sheet_find.html:141 +msgid "Container" +msgstr "Contenant" + +#: models_finds.py:326 msgid "Base find - Short ID" msgstr "Mobilier de base - ID court" -#: models.py:321 +#: models_finds.py:327 msgid "Base find - Complete ID" msgstr "Mobilier de base - ID complet" -#: models.py:322 +#: models_finds.py:328 msgid "Base find - Comment" msgstr "Mobilier de base - Commentaires" -#: models.py:323 +#: models_finds.py:329 msgid "Base find - Description" msgstr "Mobilier de base - Description" -#: models.py:324 +#: models_finds.py:330 msgid "Base find - Topographic localisation" msgstr "Mobilier de base - Localisation topographique" -#: models.py:326 +#: models_finds.py:332 msgid "Base find - Special interest" msgstr "Mobilier de base - Intérêt spécifique" -#: models.py:327 +#: models_finds.py:333 msgid "Base find - Discovery date" msgstr "Mobilier de base - Date de découverte" -#: models.py:375 models.py:856 +#: models_finds.py:393 models_treatments.py:40 models_treatments.py:271 msgid "Order" msgstr "Ordre" -#: models.py:386 +#: models_finds.py:404 msgid "Type of preservation to consider" msgstr "Mesures de conservation à envisager" -#: models.py:390 +#: models_finds.py:408 msgid "Weight unit" msgstr "Unité de poids" -#: models.py:396 templates/ishtar/sheet_find.html:83 +#: models_finds.py:414 templates/ishtar/sheet_find.html:90 msgid "Upstream treatment" msgstr "Traitement amont" -#: models.py:399 templates/ishtar/sheet_find.html:112 +#: models_finds.py:417 templates/ishtar/sheet_find.html:130 msgid "Downstream treatment" msgstr "Traitement aval" -#: models.py:403 models.py:782 models.py:866 -#: templates/ishtar/sheet_find.html:91 templates/ishtar/sheet_find.html:120 -msgid "Container" -msgstr "Contenant" +#: models_finds.py:458 +msgid "Collection" +msgstr "Collection" -#: models.py:433 +#: models_finds.py:460 models_treatments.py:131 models_treatments.py:469 msgid "Cached name" msgstr "Nom en cache" -#: models.py:442 +#: models_finds.py:469 msgid "Can view all Finds" msgstr "Peut voir tout le Mobilier" -#: models.py:443 +#: models_finds.py:470 msgid "Can view own Find" msgstr "Peut voir son propre Mobilier" -#: models.py:444 +#: models_finds.py:471 msgid "Can add own Find" msgstr "Peut ajouter son propre Mobilier" -#: models.py:445 +#: models_finds.py:472 msgid "Can change own Find" msgstr "Peut modifier son propre Mobilier" -#: models.py:446 +#: models_finds.py:473 msgid "Can delete own Find" msgstr "Peut supprimer son propre Mobilier" -#: models.py:452 +#: models_finds.py:479 msgid "FIND" msgstr "MOBILIER" -#: models.py:748 +#: models_finds.py:789 msgid "Find documentation" msgstr "Documentation de mobilier" -#: models.py:749 +#: models_finds.py:790 msgid "Find documentations" msgstr "Documentations de mobilier" -#: models.py:759 +#: models_finds.py:803 +msgid "Person" +msgstr "Individu" + +#: models_finds.py:809 +msgid "Property" +msgstr "Propriété" + +#: models_finds.py:810 +msgid "Properties" +msgstr "Propriétés" + +#: models_treatments.py:41 +msgid "Parent type" +msgstr "Type parent" + +#: models_treatments.py:43 msgid "Virtual" msgstr "Virtuel" -#: models.py:761 +#: models_treatments.py:45 msgid "Upstream is many" -msgstr "Les éléments amonts sont multiple" +msgstr "Les éléments amont sont multiples" -#: models.py:763 +#: models_treatments.py:47 msgid "Check this if for this treatment from many finds you'll get one." msgstr "" -"Cochez cela si pour ce traitement depuis plusieurs éléments vous en obtenez " -"un." +"Cochez cela si, pour ce traitement, à partir de plusieurs éléments vous en " +"obtenez un seul." -#: models.py:766 +#: models_treatments.py:50 msgid "Downstream is many" -msgstr "Les éléments avals sont multiple" +msgstr "Les éléments aval sont multiples" -#: models.py:768 +#: models_treatments.py:52 msgid "Check this if for this treatment from one find you'll get many." msgstr "" -"Cochez cela si pour ce traitement depuis un élément vous en obtenez " -"plusieurs." +"Cochez cela si, pour ce traitement, à partir d'un seul élément vous en " +"obtenez plusieurs." -#: models.py:773 +#: models_treatments.py:57 msgid "Treatment types" msgstr "Types de traitement" -#: models.py:791 +#: models_treatments.py:65 +msgid "Treatment state type" +msgstr "Type d'état de traitement" + +#: models_treatments.py:66 +msgid "Treatment state types" +msgstr "Types d'état de traitement" + +#: models_treatments.py:89 +msgid "Downstream find" +msgstr "Mobilier aval" + +#: models_treatments.py:112 msgid "Location where the treatment is done. Target warehouse for a move." msgstr "" "Endroit où le traitement est réalisé. Renseignez le dépôt de destination " "pour un déplacement." -#: models.py:793 -msgid "Other location" -msgstr "Autre lieu" +#: models_treatments.py:129 +msgid "Target a basket" +msgstr "Cibler un panier" -#: models.py:803 models.py:852 models.py:992 -msgid "Treatment" -msgstr "Traitement" - -#: models.py:804 templates/ishtar/sheet_find.html:80 +#: models_treatments.py:136 templates/ishtar/sheet_find.html:87 +#: templates/ishtar/sheet_treatmentfile.html:45 msgid "Treatments" msgstr "Traitements" -#: models.py:806 +#: models_treatments.py:139 msgid "Can view all Treatments" msgstr "Peut voir tous les Traitements" -#: models.py:807 +#: models_treatments.py:140 msgid "Can view own Treatment" msgstr "Peut voir son propre Traitement" -#: models.py:808 +#: models_treatments.py:141 msgid "Can add own Treatment" msgstr "Peut ajouter son propre Traitement" -#: models.py:809 +#: models_treatments.py:142 msgid "Can change own Treatment" msgstr "Peut modifier son propre Traitement" -#: models.py:810 +#: models_treatments.py:143 msgid "Can delete own Treatment" msgstr "Peut supprimer son propre Traitement" -#: models.py:816 -msgid "by" -msgstr "par" +#: models_treatments.py:155 +msgid "TREATMENT" +msgstr "TRAITEMENT" + +#: models_treatments.py:280 templates/ishtar/sheet_find.html:100 +#: templates/ishtar/sheet_find.html:140 +msgid "Doer" +msgstr "Opérateur" -#: models.py:868 models.py:869 templates/ishtar/sheet_find.html:89 -#: templates/ishtar/sheet_find.html:118 +#: models_treatments.py:281 models_treatments.py:282 +#: templates/ishtar/sheet_find.html:99 templates/ishtar/sheet_find.html:139 msgid "Related finds" msgstr "Mobilier associé" -#: models.py:978 +#: models_treatments.py:414 msgid "Is upstream" -msgstr "Est amont" +msgstr "Est en amont" -#: models.py:989 -msgid "Treatment documentation" -msgstr "Documentation d'un traitement" +#: models_treatments.py:426 +msgid "Treatment request types" +msgstr "Types de demande de traitement" -#: models.py:990 -msgid "Treament documentations" -msgstr "Documentations des traitements" +#: models_treatments.py:443 +msgid "Internal reference" +msgstr "Référence interne" -#: models.py:1002 -msgid "Administrative act" -msgstr "Acte administratif" +#: models_treatments.py:452 +msgid "Person in charge" +msgstr "Personne responsable" -#: models.py:1003 -msgid "Person" -msgstr "Individu" +#: models_treatments.py:464 +msgid "Creation date" +msgstr "Date de création" -#: models.py:1009 -msgid "Property" -msgstr "Propriété" +#: models_treatments.py:474 +msgid "Treatment requests" +msgstr "Demandes de traitement" -#: models.py:1010 -msgid "Properties" -msgstr "Propriétés" +#: models_treatments.py:478 +msgid "Can view all Treatment requests" +msgstr "Peut voir toutes les Demandes de traitement" + +#: models_treatments.py:480 +msgid "Can view own Treatment request" +msgstr "Peut voir sa propre Demande de traitement" + +#: models_treatments.py:482 +msgid "Can add own Treatment request" +msgstr "Peut ajouter sa propre Demande de traitement" + +#: models_treatments.py:484 +msgid "Can change own Treatment request" +msgstr "Peut modifier sa propre Demande de traitement" + +#: models_treatments.py:486 +msgid "Can delete own Treatment request" +msgstr "Peut supprimer sa propre Demande de traitement" + +#: models_treatments.py:546 +msgid "Treatment documentation" +msgstr "Documentation de traitement" + +#: models_treatments.py:547 +msgid "Treament documentations" +msgstr "Documentations de traitement" + +#: models_treatments.py:563 +msgid "Treatment request documentation" +msgstr "Documentation de demande de traitement" + +#: models_treatments.py:564 +msgid "Treatment request documentations" +msgstr "Documentations de demande de traitement" -#: views.py:61 +#: views.py:124 msgid "New find" -msgstr "Nouveau mobilier" +msgstr "Ajouter un mobilier" -#: views.py:75 +#: views.py:138 msgid "Find modification" -msgstr "Modification de mobilier" +msgstr "Modifier un mobilier" -#: views.py:90 +#: views.py:153 msgid "Find deletion" -msgstr "Suppression de mobilier" +msgstr "Supprimer un mobilier" -#: views.py:95 +#: views.py:158 msgid "Find: source search" -msgstr "Mobilier : recherche de documentation associée" +msgstr "Mobilier : rechercher une documentation associée" -#: views.py:103 +#: views.py:166 msgid "Find: new source" -msgstr "Mobilier : nouvelle documentation associée" +msgstr "Mobilier : ajouter une documentation associée" -#: views.py:111 +#: views.py:174 msgid "Find: source modification" -msgstr "Mobilier : modification de documentation associée" +msgstr "Mobilier : modifier une documentation associée" -#: views.py:126 +#: views.py:189 msgid "Find: source deletion" -msgstr "Mobilier : suppression de mobilier associé" +msgstr "Mobilier : supprimer un mobilier associé" -#: views.py:140 +#: views.py:203 msgid "New basket" -msgstr "Nouveau panier" +msgstr "Ajouter un panier" -#: views.py:159 +#: views.py:222 msgid "Manage items in basket" msgstr "Gérer les éléments dans un panier" -#: views.py:179 +#: views.py:242 msgid "Manage basket" msgstr "Gérer un panier" -#: views.py:267 +#: views.py:330 msgid "Delete basket" msgstr "Supprimer un panier" -#: views.py:303 +#: views.py:380 msgid "New treatment" -msgstr "Nouveau traitement" +msgstr "Ajouter un traitement" + +#: views.py:388 views.py:480 +msgid "Modify" +msgstr "Modifier" + +#: views.py:405 +msgid "Treatment deletion" +msgstr "Supprimer un traitement" + +#: views.py:412 +msgid "Treatment: search administrative act" +msgstr "Traitement : rechercher un acte administratif" + +#: views.py:421 +msgid "Treatment: new administrative act" +msgstr "Traitement : ajouter un acte administratif" + +#: views.py:431 +msgid "Treatment: administrative act modification" +msgstr "Traitement : modifier un acte administratif" + +#: views.py:440 +msgid "Treatment: administrative act deletion" +msgstr "Traitement : supprimer un acte administratif" -#: wizards.py:59 +#: views.py:473 +msgid "New treatment request" +msgstr "Ajouter une demande de traitement" + +#: views.py:496 +msgid "Treatment request deletion" +msgstr "Supprimer une demande de traitement" + +#: views.py:503 +msgid "Treatment request: search administrative act" +msgstr "Demande de traitement : rechercher un acte administratif" + +#: views.py:513 +msgid "Treatment request: new administrative act" +msgstr "Demande de traitement : ajouter un acte administratif" + +#: views.py:523 +msgid "Treatment request: administrative act modification" +msgstr "Demande de traitement : modifier un acte administratif" + +#: views.py:532 +msgid "Treatment request: administrative act deletion" +msgstr "Demande de traitement : supprimer un acte administratif" + +#: views.py:558 +msgid "Treatment: source search" +msgstr "Traitement : rechercher une documentation associée" + +#: views.py:573 +msgid "Treatment: source modification" +msgstr "Traitement : modifier une documentation associée" + +#: views.py:588 +msgid "Treatment: source deletion" +msgstr "Traitement : supprimer une documentation associée" + +#: views.py:601 +msgid "Treatment request: source search" +msgstr "Demande de traitement : rechercher une documentation associée" + +#: views.py:617 +msgid "Treatment request: source modification" +msgstr "Demande de traitement : modifier une documentation associée" + +#: views.py:635 +msgid "Treatment request: source deletion" +msgstr "Demande de traitement : supprimer une documentation associée" + +#: wizards.py:63 wizards.py:195 msgid "Operation" msgstr "Opération" -#: templates/ishtar/sheet_find.html:88 templates/ishtar/sheet_find.html:117 -#: templates/ishtar/sheet_find.html:187 -msgid "Type" -msgstr "Type" +#: templates/ishtar/sheet_find.html:79 +msgid "Warehouse" +msgstr "Dépôt" -#: templates/ishtar/sheet_find.html:108 +#: templates/ishtar/sheet_find.html:96 templates/ishtar/sheet_find.html:136 +msgid "Year - index" +msgstr "Année - index" + +#: templates/ishtar/sheet_find.html:126 msgid "Export as CSV" msgstr "Export en CSV" -#: templates/ishtar/sheet_find.html:108 templates/ishtar/sheet_find.html:138 +#: templates/ishtar/sheet_find.html:126 templates/ishtar/sheet_find.html:167 msgid "CSV" msgstr "CSV" -#: templates/ishtar/sheet_find.html:143 +#: templates/ishtar/sheet_find.html:172 msgid "Associated base finds" msgstr "Mobilier de base associé" -#: templates/ishtar/sheet_find.html:182 templates/ishtar/sheet_find.html:184 -msgid "Documents" -msgstr "Documents" - -#: templates/ishtar/sheet_find.html:186 +#: templates/ishtar/sheet_find.html:215 msgid "Title" msgstr "Titre" -#: templates/ishtar/sheet_find.html:188 +#: templates/ishtar/sheet_find.html:217 msgid "Authors" msgstr "Auteurs" -#: templates/ishtar/sheet_find.html:189 +#: templates/ishtar/sheet_find.html:218 msgid "Link" msgstr "Lien" @@ -778,4 +1167,36 @@ msgstr "Panier de mobilier" #: templates/ishtar/sheet_findsource.html:4 msgid "Find source" -msgstr "Documentation associé au mobilier" +msgstr "Documentation associée au mobilier" + +#: templates/ishtar/sheet_treatment.html:20 +msgctxt "Treatment" +msgid "Closed" +msgstr "Clôturé" + +#: templates/ishtar/sheet_treatment.html:22 +msgctxt "Treatment" +msgid "Active" +msgstr "Actif" + +#: templates/ishtar/sheet_treatment.html:47 +msgid "Downstream finds" +msgstr "Mobilier aval" + +#: templates/ishtar/sheet_treatmentfile.html:16 +msgctxt "Treatment request" +msgid "Closed" +msgstr "Clôturée" + +#: templates/ishtar/sheet_treatmentfile.html:18 +msgctxt "Treatment request" +msgid "Active" +msgstr "Active" + +#: templates/ishtar/sheet_treatmentfilesource.html:4 +msgid "Treatment request source" +msgstr "Documentation de demande de traitement" + +#: templates/ishtar/sheet_treatmentsource.html:4 +msgid "Treatment source" +msgstr "Documentation de traitement" diff --git a/translations/fr/archaeological_operations.po b/translations/fr/archaeological_operations.po index d8c54d684..91f73bdd2 100644 --- a/translations/fr/archaeological_operations.po +++ b/translations/fr/archaeological_operations.po @@ -5,25 +5,26 @@ # Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata # Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata # Étienne Loks <etienne.loks@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-10-17 01:17-0400\n" -"Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n" +"PO-Revision-Date: 2017-01-09 05:30-0500\n" +"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n" "Language-Team: \n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -"X-Generator: Zanata 3.9.5\n" +"X-Generator: Zanata 3.9.6\n" -#: forms.py:67 forms.py:369 forms.py:1004 forms.py:1026 forms.py:1030 -#: models.py:1168 templates/ishtar/sheet_operation.html:144 +#: forms.py:69 forms.py:371 forms.py:1009 forms.py:1031 forms.py:1035 +#: models.py:1213 templates/ishtar/sheet_operation.html:144 #: templates/ishtar/blocks/window_tables/parcels.html:10 msgid "Parcels" msgstr "Parcelles" -#: forms.py:70 forms.py:203 forms.py:980 models.py:1154 +#: forms.py:72 forms.py:205 forms.py:985 models.py:1199 #: templates/ishtar/blocks/window_tables/parcels.html:7 #: templates/ishtar/dashboards/dashboard_operation.html:432 #: templates/ishtar/dashboards/dashboard_operation.html:446 @@ -32,96 +33,96 @@ msgstr "Parcelles" msgid "Town" msgstr "Commune" -#: forms.py:72 forms.py:459 forms.py:755 forms.py:1250 models.py:249 -#: models.py:971 models.py:1152 +#: forms.py:74 forms.py:455 forms.py:752 forms.py:1255 models.py:271 +#: models.py:1005 models.py:1197 #: templates/ishtar/blocks/window_tables/parcels.html:8 msgid "Year" msgstr "Année" -#: forms.py:75 models.py:1155 +#: forms.py:77 models.py:1200 #: templates/ishtar/blocks/window_tables/parcels.html:9 msgid "Section" msgstr "Section" -#: forms.py:78 models.py:1157 +#: forms.py:80 models.py:1202 msgid "Parcel number" msgstr "Numéro de parcelle" -#: forms.py:80 models.py:1159 models.py:1176 models.py:1225 +#: forms.py:82 models.py:1204 models.py:1221 models.py:1270 msgid "Public domain" msgstr "Domaine public" -#: forms.py:124 +#: forms.py:126 msgid "Town section is required." -msgstr "Vous devez renseigner le secteur." +msgstr "Vous devez renseigner la section." -#: forms.py:160 +#: forms.py:162 msgid "public domain" msgstr "domaine public" -#: forms.py:167 +#: forms.py:169 msgid "Current parcels" msgstr "Parcelles actuelles" -#: forms.py:169 +#: forms.py:171 msgid "Deleted parcels" msgstr "Parcelles supprimées" -#: forms.py:206 +#: forms.py:208 msgid "Full text input" msgstr "Saisie libre" -#: forms.py:208 +#: forms.py:210 msgid "example: \"2013: XD:1 to 13,24,33 to 39, YD:24\" or \"AB:24,AC:42\"" msgstr "exemple : \"2013: XD:1 à 13,24,33 à 39, YD:24\" ou \"AB:24,AC:42\"" -#: forms.py:363 +#: forms.py:365 msgid "There are identical parcels." msgstr "Il y a des parcelles identiques." -#: forms.py:378 +#: forms.py:380 msgid "Relation type" msgstr "Type de relation" -#: forms.py:381 ishtar_menu.py:30 models.py:344 models.py:804 models.py:834 -#: models.py:862 models.py:963 models.py:1151 wizards.py:339 wizards.py:350 +#: forms.py:383 ishtar_menu.py:30 models.py:366 models.py:826 models.py:856 +#: models.py:884 models.py:987 models.py:1196 wizards.py:344 wizards.py:355 #: templates/ishtar/sheet_operation.html:4 msgid "Operation" msgstr "Opération" -#: forms.py:401 +#: forms.py:403 msgid ":" msgstr ": " -#: forms.py:409 forms.py:608 forms.py:1215 +#: forms.py:411 forms.py:605 forms.py:1220 msgid "You should select an operation." msgstr "Vous devez sélectionner une opération." -#: forms.py:413 +#: forms.py:415 msgid "You should select a relation type." msgstr "Vous devez sélectionner un type de relation." -#: forms.py:443 +#: forms.py:445 msgid "Current relations" msgstr "Relations actuelles" -#: forms.py:445 +#: forms.py:447 msgid "Deleted relations" msgstr "Relations supprimées" -#: forms.py:449 templates/ishtar/sheet_operation.html:83 +#: forms.py:451 templates/ishtar/sheet_operation.html:83 msgid "Relations" msgstr "Relations" -#: forms.py:460 forms.py:1221 models.py:250 +#: forms.py:456 forms.py:1226 models.py:272 msgid "Numeric reference" msgstr "Identifiant numérique" -#: forms.py:466 forms.py:1261 +#: forms.py:462 forms.py:1266 msgid "Parcel (section/number/public domain)" -msgstr "Parcelle (section/nombre/domaine public)" +msgstr "Parcelle (section/numéro/domaine public)" -#: forms.py:469 forms.py:1264 models.py:805 +#: forms.py:465 forms.py:1269 models.py:827 #: templates/ishtar/dashboards/dashboard_operation.html:390 #: templates/ishtar/dashboards/dashboard_operation.html:411 #: templates/ishtar/dashboards/dashboard_operation.html:643 @@ -130,247 +131,248 @@ msgstr "Parcelle (section/nombre/domaine public)" msgid "Department" msgstr "Département" -#: forms.py:470 forms.py:1092 models.py:85 +#: forms.py:466 forms.py:1097 models.py:85 #: templates/ishtar/blocks/window_tables/archaeologicalsites.html:8 msgid "Name" msgstr "Nom" -#: forms.py:472 forms.py:675 forms.py:753 forms.py:1227 models.py:257 +#: forms.py:468 forms.py:672 forms.py:750 forms.py:1232 models.py:279 msgid "Operation type" msgstr "Type d'opération" -#: forms.py:474 +#: forms.py:470 msgid "Is open?" msgstr "Est ouvert ?" -#: forms.py:483 forms.py:782 models.py:246 +#: forms.py:478 forms.py:782 models.py:268 msgid "In charge" msgstr "Responsable" -#: forms.py:490 models.py:957 +#: forms.py:485 models.py:981 msgid "Scientist in charge" msgstr "Responsable scientifique" -#: forms.py:492 forms.py:677 forms.py:773 models.py:244 +#: forms.py:487 forms.py:674 forms.py:772 models.py:266 msgid "Operator" msgstr "Opérateur" -#: forms.py:499 forms.py:1097 models.py:89 models.py:259 +#: forms.py:496 forms.py:1102 models.py:89 models.py:281 #: templates/ishtar/blocks/window_tables/archaeologicalsites.html:10 msgid "Remains" msgstr "Vestiges" -#: forms.py:500 forms.py:1075 forms.py:1094 models.py:87 models.py:265 +#: forms.py:497 forms.py:1080 forms.py:1099 models.py:87 models.py:287 #: templates/ishtar/blocks/window_tables/archaeologicalsites.html:9 msgid "Periods" msgstr "Périodes" -#: forms.py:501 +#: forms.py:498 msgid "Started before" msgstr "Commencé avant" -#: forms.py:503 +#: forms.py:500 msgid "Started after" msgstr "Commencé après" -#: forms.py:505 +#: forms.py:502 msgid "Ended before" msgstr "Terminé avant" -#: forms.py:507 +#: forms.py:504 msgid "Ended after" msgstr "Terminé après" -#: forms.py:510 +#: forms.py:507 msgid "Search within relations" -msgstr "Recherche parmi les relations" +msgstr "Rechercher parmi les relations" -#: forms.py:512 forms.py:832 +#: forms.py:509 forms.py:837 msgid "Comment" msgstr "Commentaire" -#: forms.py:513 +#: forms.py:510 msgid "Abstract (full text search)" msgstr "Résumé (recherche texte intégral)" -#: forms.py:515 forms.py:835 models.py:313 +#: forms.py:512 forms.py:840 models.py:335 msgid "Comment about scientific documentation" msgstr "Commentaire concernant la documentation scientifique" -#: forms.py:516 forms.py:837 models.py:325 +#: forms.py:513 forms.py:842 models.py:347 msgid "Record quality" msgstr "Qualité d'enregistrement" -#: forms.py:517 forms.py:805 models.py:277 +#: forms.py:514 forms.py:807 models.py:299 msgid "Report processing" msgstr "Traitement du rapport" -#: forms.py:519 forms.py:840 models.py:320 +#: forms.py:516 forms.py:845 models.py:342 msgid "Virtual operation" msgstr "Opération virtuelle" -#: forms.py:521 forms.py:1141 -msgid "Archaelogical site" -msgstr "Entité Archéologique" +#: forms.py:518 forms.py:1142 forms.py:1146 models.py:93 +msgid "Archaeological site" +msgstr "Entité archéologique" -#: forms.py:527 forms.py:1268 +#: forms.py:524 forms.py:1273 msgid "Created by" msgstr "Créé par" -#: forms.py:533 forms.py:1274 +#: forms.py:530 forms.py:1279 msgid "Modified by" msgstr "Modifié par" -#: forms.py:540 +#: forms.py:537 msgid "Documentation deadline before" msgstr "Date limite de rendu de la documentation avant" -#: forms.py:542 +#: forms.py:539 msgid "Documentation deadline after" msgstr "Date limite de rendu de la documentation après" -#: forms.py:544 forms.py:825 models.py:332 +#: forms.py:541 forms.py:830 models.py:354 msgid "Documentation received" msgstr "Documentation reçue" -#: forms.py:546 +#: forms.py:543 msgid "Finds deadline before" msgstr "Date limite de rendu du mobilier avant" -#: forms.py:548 +#: forms.py:545 msgid "Finds deadline after" msgstr "Date limite de rendu du mobilier après" -#: forms.py:550 forms.py:830 models.py:336 +#: forms.py:547 forms.py:835 models.py:358 msgid "Finds received" msgstr "Mobilier reçu" -#: forms.py:595 forms.py:1213 views.py:168 +#: forms.py:592 forms.py:1218 views.py:168 msgid "Operation search" -msgstr "Recherche d'opérations" +msgstr "Rechercher une opération" -#: forms.py:639 +#: forms.py:636 msgid "Associated file" msgstr "Dossier associé" -#: forms.py:643 forms.py:928 models.py:968 wizards.py:76 -msgid "Archaelogical file" -msgstr "Dossier" +#: forms.py:640 forms.py:933 models.py:493 models.py:883 models.py:992 +#: wizards.py:80 +msgid "Archaeological file" +msgstr "Dossier archéologique" -#: forms.py:650 forms.py:652 models.py:327 +#: forms.py:647 forms.py:649 models.py:349 msgid "Abstract" msgstr "Résumé" -#: forms.py:655 +#: forms.py:652 msgid "months" msgstr "mois" -#: forms.py:655 +#: forms.py:652 msgid "years" msgstr "années" -#: forms.py:657 models.py:230 +#: forms.py:654 models.py:252 msgid "Creation date" msgstr "Date de création" -#: forms.py:658 +#: forms.py:655 msgid "Start of field work" msgstr "Début du travail de terrain" -#: forms.py:660 +#: forms.py:657 msgid "All" msgstr "Tout" -#: forms.py:661 +#: forms.py:658 msgid "Preventive" msgstr "Préventif" -#: forms.py:662 +#: forms.py:659 msgid "Research" msgstr "Programmé" -#: forms.py:666 +#: forms.py:663 msgid "Slicing" msgstr "Découpage" -#: forms.py:669 +#: forms.py:666 msgid "Department detail" msgstr "Détail par département" -#: forms.py:671 +#: forms.py:668 msgid "Date get from" msgstr "Date obtenue depuis" -#: forms.py:673 +#: forms.py:670 msgid "Preventive/Research" msgstr "Préventif/Programmé" -#: forms.py:679 +#: forms.py:676 msgid "Date after" msgstr "Date après" -#: forms.py:681 +#: forms.py:678 msgid "Date before" msgstr "Date avant" -#: forms.py:683 +#: forms.py:680 msgid "With reports" msgstr "Avec un rapport" -#: forms.py:684 +#: forms.py:681 msgid "With finds" msgstr "Avec du mobilier" -#: forms.py:736 forms.py:1322 templates/ishtar/sheet_administrativeact.html:13 +#: forms.py:733 forms.py:1327 templates/ishtar/sheet_administrativeact.html:20 #: templates/ishtar/sheet_operation.html:24 msgid "General" msgstr "Général" -#: forms.py:751 models.py:310 +#: forms.py:748 models.py:332 msgid "Generic name" msgstr "Nom générique" -#: forms.py:760 models.py:279 +#: forms.py:757 models.py:301 msgid "Old code" msgstr "Ancien code" -#: forms.py:763 +#: forms.py:760 msgid "Head scientist" msgstr "Responsable scientifique" -#: forms.py:779 models.py:309 +#: forms.py:779 models.py:331 msgid "Operator reference" msgstr "Référence de l'opérateur" -#: forms.py:791 +#: forms.py:793 msgid "Total surface (m2)" msgstr "Surface totale (m2)" -#: forms.py:798 models.py:53 models.py:233 models.py:1341 +#: forms.py:800 models.py:53 models.py:255 models.py:1386 msgid "Start date" msgstr "Date de début" -#: forms.py:800 models.py:235 +#: forms.py:802 models.py:257 msgid "Excavation end date" msgstr "Date de fin de chantier" -#: forms.py:803 models.py:236 +#: forms.py:805 models.py:258 msgid "Report delivery date" msgstr "Date de livraison du rapport" -#: forms.py:822 models.py:329 +#: forms.py:827 models.py:351 msgid "Deadline for submission of the documentation" msgstr "Date limite de rendu de la documentation" -#: forms.py:827 models.py:334 +#: forms.py:832 models.py:356 msgid "Deadline for submission of the finds" msgstr "Date limite de rendu du mobilier" -#: forms.py:842 +#: forms.py:847 msgid "Image" msgstr "Image" -#: forms.py:843 +#: forms.py:848 #, python-format msgid "" "<p>Heavy images are resized to: %(width)dx%(height)d (ratio is preserved).</" @@ -379,131 +381,127 @@ msgstr "" "<p>Les images trop grandes sont retaillées en : %(width)dx%(height)d (le " "ratio est conservé).</p>" -#: forms.py:881 +#: forms.py:886 msgid "" "If you want to set an excavation end date you have to provide a start date." msgstr "" "Avant de renseigner la date de fin de chantier, il est nécessaire de " "renseigner une date de début." -#: forms.py:886 +#: forms.py:891 msgid "The excavation end date cannot be before the start date." msgstr "" "La date de fin de chantier ne peut être antérieure à la date de début." -#: forms.py:914 +#: forms.py:919 #, python-format msgid "" -"Operation code already exist for year: %(year)d - use a value bigger than " +"Operation code already exists for year: %(year)d - use a value bigger than " "%(last_val)d" msgstr "" "Ce code d'opération existe déjà pour l'année %(year)d - utilisez une valeur " "plus grande que %(last_val)d" -#: forms.py:918 +#: forms.py:923 msgid "Bad operation code" msgstr "Mauvais code d'opération" -#: forms.py:924 models.py:486 +#: forms.py:929 models.py:508 msgid "Operation code" msgstr "Code de l'opération" -#: forms.py:950 +#: forms.py:955 msgid "Preventive informations - excavation" msgstr "Information archéologie préventive - fouille" -#: forms.py:951 models.py:263 +#: forms.py:956 models.py:285 #: templates/ishtar/dashboards/dashboard_operation.html:701 msgid "Cost (euros)" msgstr "Coût (euros)" -#: forms.py:952 models.py:268 +#: forms.py:957 models.py:290 msgid "Scheduled man-days" msgstr "Jours-hommes prévus" -#: forms.py:954 models.py:271 +#: forms.py:959 models.py:293 msgid "Optional man-days" msgstr "Jours-hommes optionnels" -#: forms.py:956 models.py:274 +#: forms.py:961 models.py:296 msgid "Effective man-days" msgstr "Jours-hommes effectifs" -#: forms.py:966 +#: forms.py:971 msgid "Preventive informations - diagnostic" msgstr "Information archéologie préventive - diagnostic" -#: forms.py:969 models.py:293 +#: forms.py:974 models.py:315 msgid "Prescription on zoning" msgstr "Prescription sur zonage" -#: forms.py:971 models.py:296 +#: forms.py:976 models.py:318 msgid "Prescription on large area" msgstr "Prescription sur une vaste surface" -#: forms.py:974 models.py:298 +#: forms.py:979 models.py:320 msgid "Prescription on geoarchaeological context" msgstr "Prescription sur un contexte géoarchéologique" -#: forms.py:978 forms.py:1000 models.py:261 models.py:981 +#: forms.py:983 forms.py:1005 models.py:283 models.py:1015 msgid "Towns" msgstr "Communes" -#: forms.py:1007 models.py:1167 models.py:1339 +#: forms.py:1012 models.py:1212 models.py:1384 msgid "Parcel" msgstr "Parcelle" -#: forms.py:1059 models.py:45 +#: forms.py:1064 models.py:45 msgid "Remain types" msgstr "Types de vestige" -#: forms.py:1063 models.py:44 +#: forms.py:1068 models.py:44 msgid "Remain type" msgstr "Type de vestige" -#: forms.py:1079 templates/ishtar/sheet_operation.html:164 +#: forms.py:1084 templates/ishtar/sheet_operation.html:164 #: templates/ishtar/sheet_operation.html:195 msgid "Period" msgstr "Période" -#: forms.py:1091 models.py:84 +#: forms.py:1096 models.py:84 msgid "Reference" msgstr "Référence" -#: forms.py:1120 +#: forms.py:1125 msgid "This reference already exists." msgstr "Cette référence existe déjà." -#: forms.py:1137 models.py:93 -msgid "Archaeological site" -msgstr "Entité archéologique" - -#: forms.py:1152 models.py:94 models.py:317 +#: forms.py:1157 models.py:94 models.py:339 #: templates/ishtar/sheet_operation.html:94 msgid "Archaeological sites" msgstr "Entités archéologiques" -#: forms.py:1156 -msgid "Associated archaelogical sites" +#: forms.py:1161 +msgid "Associated archaeological sites" msgstr "Entités archéologiques associées" -#: forms.py:1162 ishtar_menu.py:33 ishtar_menu.py:63 ishtar_menu.py:92 +#: forms.py:1167 ishtar_menu.py:33 ishtar_menu.py:63 ishtar_menu.py:92 msgid "Search" msgstr "Recherche" -#: forms.py:1167 +#: forms.py:1172 msgid "Would you like to close this operation?" msgstr "Voulez-vous clore cette opération ?" -#: forms.py:1172 +#: forms.py:1177 msgid "Would you like to delete this operation?" msgstr "Voulez-vous supprimer cette opération ?" -#: forms.py:1181 forms.py:1251 forms.py:1387 models.py:836 models.py:948 +#: forms.py:1186 forms.py:1256 forms.py:1392 models.py:858 models.py:972 msgid "Index" msgstr "Index" -#: forms.py:1207 +#: forms.py:1212 #, python-format msgid "" "Index already exists for operation: %(operation)s - use a value bigger than " @@ -512,86 +510,86 @@ msgstr "" "Cet index existe déjà pour l'opération : %(operation)s, utilisez une valeur " "plus grande que %(last_val)d" -#: forms.py:1219 +#: forms.py:1224 msgid "Operation's year" msgstr "Année de l'opération" -#: forms.py:1226 +#: forms.py:1231 msgid "Operation's town" msgstr "Commune de l'opération" -#: forms.py:1239 +#: forms.py:1244 msgid "Documentation search" -msgstr "Recherche de document" +msgstr "Rechercher une documentation" -#: forms.py:1241 +#: forms.py:1246 msgid "You should select a document." msgstr "Vous devez sélectionner un document." -#: forms.py:1258 forms.py:1325 models.py:873 models.py:942 +#: forms.py:1263 forms.py:1330 models.py:897 models.py:966 msgid "Act type" msgstr "Type d'acte" -#: forms.py:1259 forms.py:1457 +#: forms.py:1264 forms.py:1462 msgid "Indexed?" msgstr "Indexé ?" -#: forms.py:1265 forms.py:1330 models.py:972 +#: forms.py:1270 forms.py:1335 models.py:1006 #: templates/ishtar/blocks/window_tables/administrativacts.html:10 msgid "Object" msgstr "Objet" -#: forms.py:1302 views.py:324 +#: forms.py:1307 views.py:329 msgid "Administrative act search" -msgstr "Recherche d'actes administratifs" +msgstr "Rechercher un acte administratif" -#: forms.py:1317 forms.py:1415 forms.py:1482 +#: forms.py:1322 forms.py:1420 forms.py:1487 msgid "You should select an administrative act." msgstr "Vous devez sélectionner un acte administratif." -#: forms.py:1333 models.py:969 +#: forms.py:1338 models.py:1003 msgid "Signature date" msgstr "Date de signature" -#: forms.py:1375 +#: forms.py:1380 #, python-format msgid "" -"This index already exist for year: %(year)d - use a value bigger than " +"This index already exists for year: %(year)d - use a value bigger than " "%(last_val)d" msgstr "" "Cet index existe déjà pour l'année : %(year)d, utilisez une valeur plus " "grande que %(last_val)d" -#: forms.py:1379 +#: forms.py:1384 msgid "Bad index" msgstr "Mauvais index" -#: forms.py:1392 +#: forms.py:1397 msgid "Would you like to delete this administrative act?" msgstr "Voulez-vous supprimer cet acte administratif ?" -#: forms.py:1397 +#: forms.py:1402 msgid "Template" msgstr "Patron" -#: forms.py:1421 forms.py:1425 +#: forms.py:1426 forms.py:1430 msgid "This document is not intended for this type of act." msgstr "Ce document n'est pas destiné à ce type d'acte." -#: forms.py:1443 +#: forms.py:1448 msgid "Doc generation" msgstr "Génération de document" -#: forms.py:1445 +#: forms.py:1450 msgid "Generate the associated doc?" msgstr "Générer le document associé ?" -#: forms.py:1466 ishtar_menu.py:121 views.py:377 +#: forms.py:1471 ishtar_menu.py:121 views.py:382 msgctxt "admin act register" msgid "Register" msgstr "Registre" -#: ishtar_menu.py:38 +#: ishtar_menu.py:38 ishtar_menu.py:69 ishtar_menu.py:97 msgid "Creation" msgstr "Ajout" @@ -607,15 +605,11 @@ msgstr "Clôture" msgid "Deletion" msgstr "Suppression" -#: ishtar_menu.py:58 models.py:988 +#: ishtar_menu.py:58 models.py:1022 #: templates/ishtar/sheet_administrativeact.html:4 msgid "Administrative act" msgstr "Acte administratif" -#: ishtar_menu.py:69 ishtar_menu.py:97 widgets.py:55 -msgid "Add" -msgstr "Ajout" - #: ishtar_menu.py:84 msgid "Documents" msgstr "Documents" @@ -636,16 +630,16 @@ msgstr "Tableau de bord" msgid "General informations" msgstr "Informations générales" -#: ishtar_menu.py:136 models.py:345 +#: ishtar_menu.py:136 models.py:367 #: templates/ishtar/dashboards/dashboard_operation.html:8 msgid "Operations" msgstr "Opérations" -#: models.py:52 models.py:70 models.py:1803 +#: models.py:52 models.py:70 models.py:1848 msgid "Order" msgstr "Ordre" -#: models.py:54 models.py:1342 +#: models.py:54 models.py:1387 msgid "End date" msgstr "Date de fin" @@ -683,7 +677,7 @@ msgstr "Peut ajouter ses propres Entités archéologique" #: models.py:103 msgid "Can change own Archaeological site" -msgstr "Peut modifier ses propres Entités archéologiques" +msgstr "Peut modifier sa propre Entité archéologique" #: models.py:105 msgid "Can delete own Archaeological site" @@ -701,415 +695,435 @@ msgstr "Arbitraire" msgid "Reliable" msgstr "Fiable" +#: models.py:230 +msgid "Year - Index" +msgstr "Année - Index" + +#: models.py:231 +msgid "Associated file (label)" +msgstr "Fichier associé (nom)" + #: models.py:232 +msgid "Operator name" +msgstr "Nom de l'opérateur" + +#: models.py:233 +msgid "Scientist (full name)" +msgstr "Responsable scientifique (nom complet)" + +#: models.py:234 +msgid "Associated file (external ID)" +msgstr "Fichier associé (identifiant externe)" + +#: models.py:235 +msgid "Scientist (title)" +msgstr "Responsable scientifique (titre)" + +#: models.py:236 +msgid "Scientist (surname)" +msgstr "Responsable scientifique (nom)" + +#: models.py:237 +msgid "Scientist (name)" +msgstr "Scientifique (nom)" + +#: models.py:238 +msgid "Scientist - Organization (name)" +msgstr "Scientifique - Organisation (nom)" + +#: models.py:239 +msgid "In charge (title)" +msgstr "Responsable (titre)" + +#: models.py:240 +msgid "In charge (surname)" +msgstr "Responsable (prénom)" + +#: models.py:241 +msgid "In charge (name)" +msgstr "Responsable (nom)" + +#: models.py:242 +msgid "In charge - Organization (name)" +msgstr "Responsable - Organisation (nom)" + +#: models.py:247 +msgid "Archaeological sites (reference)" +msgstr "Entités archéologiques (référence)" + +#: models.py:254 msgid "Closing date" msgstr "Date de clôture" -#: models.py:239 +#: models.py:261 msgid "In charge scientist" msgstr "Responsable scientifique" -#: models.py:254 models.py:1147 +#: models.py:276 models.py:1192 msgid "File" msgstr "Dossier" -#: models.py:258 +#: models.py:280 msgid "Surface (m2)" msgstr "Surface (m2)" -#: models.py:311 +#: models.py:333 msgid "General comment" msgstr "Commentaire général" -#: models.py:314 +#: models.py:336 msgid "Cached name" msgstr "Nom en cache" -#: models.py:322 +#: models.py:344 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:338 +#: models.py:360 msgid "Point" msgstr "Point" -#: models.py:339 +#: models.py:361 msgid "Multi polygon" -msgstr "Polygones multiples" +msgstr "Polygones multi-parties" -#: models.py:347 +#: models.py:369 msgid "Can view all Operations" msgstr "Peut voir toutes les Opérations" -#: models.py:348 +#: models.py:370 msgid "Can view own Operation" msgstr "Peut voir sa propre Opération" -#: models.py:349 +#: models.py:371 msgid "Can add own Operation" msgstr "Peut ajouter sa propre Opération" -#: models.py:350 +#: models.py:372 msgid "Can change own Operation" msgstr "Peut modifier sa propre Opération" -#: models.py:351 +#: models.py:373 msgid "Can delete own Operation" msgstr "Peut supprimer sa propre Opération" -#: models.py:352 +#: models.py:374 msgid "Can close Operation" msgstr "Peut fermer une Opération" -#: models.py:380 +#: models.py:402 msgid "OPE" msgstr "OPE" -#: models.py:440 +#: models.py:462 msgid "Intercommunal" msgstr "Intercommunal" -#: models.py:471 models.py:861 -msgid "Archaeological file" -msgstr "Dossier archéologique" - -#: models.py:472 +#: models.py:494 msgid "Code patriarche" msgstr "Code patriarche" -#: models.py:512 +#: models.py:534 msgid "This operation code already exists for this year" msgstr "Ce code d'opération existe déjà pour cette année." -#: models.py:545 +#: models.py:567 msgid "Number of parcels" msgstr "Nombre de parcelles" -#: models.py:563 +#: models.py:585 msgid "Number of administrative acts" msgstr "Nombre d'actes administratifs" -#: models.py:571 +#: models.py:593 msgid "Number of indexed administrative acts" msgstr "Nombre d'actes administratifs indexés" -#: models.py:579 +#: models.py:601 msgid "Number of context records" msgstr "Nombre d'Unités d'Enregistrement" -#: models.py:615 +#: models.py:637 msgid "Number of finds" -msgstr "Nombre d'élément de mobilier" +msgstr "Nombre d'éléments de mobilier" -#: models.py:660 +#: models.py:682 msgid "No type" msgstr "Pas de type" -#: models.py:691 +#: models.py:713 msgid "Number of sources" msgstr "Nombre de documents" -#: models.py:733 templates/ishtar/dashboards/dashboard_operation.html:309 +#: models.py:755 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:775 +#: models.py:797 msgid "Inverse relation" msgstr "Relation inverse" -#: models.py:779 +#: models.py:801 msgid "Operation relation type" msgstr "Type de relation entre opérations" -#: models.py:780 +#: models.py:802 msgid "Operation relation types" msgstr "Types de relation entre opérations" -#: models.py:793 +#: models.py:815 msgid "Operation record relation" msgstr "Relation entre opérations" -#: models.py:794 +#: models.py:816 msgid "Operation record relations" msgstr "Relations entre opérations" -#: models.py:840 +#: models.py:862 msgid "Operation documentation" msgstr "Documentation d'une opération" -#: models.py:841 +#: models.py:863 msgid "Operation documentations" msgstr "Documentations des opérations" -#: models.py:844 +#: models.py:866 msgid "Can view all Operation sources" msgstr "Peut voir toutes les Documentations d'opération" -#: models.py:846 +#: models.py:868 msgid "Can view own Operation source" msgstr "Peut voir sa propre Documentation d'opération" -#: models.py:848 +#: models.py:870 msgid "Can add own Operation source" msgstr "Peut ajouter sa propre Documentation d'opération" -#: models.py:850 +#: models.py:872 msgid "Can change own Operation source" msgstr "Peut modifier sa propre Documentation d'opération" -#: models.py:852 +#: models.py:874 msgid "Can delete own Operation source" msgstr "Peut supprimer sa propre Documentation d'opération" -#: models.py:864 +#: models.py:885 models.py:997 +msgid "Treatment request" +msgstr "Demande de traitement" + +#: models.py:886 models.py:1002 +msgid "Treatment" +msgstr "Traitement" + +#: models.py:888 msgid "Intended to" msgstr "Destiné à" -#: models.py:866 +#: models.py:890 msgid "Code" msgstr "Code" -#: models.py:869 +#: models.py:893 msgid "Associated template" msgstr "Patron associé" -#: models.py:870 +#: models.py:894 msgid "Indexed" msgstr "Indexé" -#: models.py:874 +#: models.py:898 msgid "Act types" msgstr "Types d'acte" -#: models.py:946 +#: models.py:970 msgid "Person in charge of the operation" msgstr "Responsable d'opération" -#: models.py:952 +#: models.py:976 msgid "Archaeological preventive operator" msgstr "Opérateur d'archéologie préventive" -#: models.py:960 +#: models.py:984 msgid "Signatory" msgstr "Signataire" -#: models.py:978 +#: models.py:1012 msgid "Departments" msgstr "Départements" -#: models.py:979 +#: models.py:1013 msgid "Cached values get from associated departments" msgstr "Valeur en cache des départements associés" -#: models.py:982 +#: models.py:1016 msgid "Cached values get from associated towns" msgstr "Valeur en cache des communes associées" -#: models.py:989 templates/ishtar/sheet_operation.html:102 +#: models.py:1023 templates/ishtar/sheet_operation.html:102 #: templates/ishtar/sheet_operation.html:138 msgid "Administrative acts" msgstr "Actes administratifs" -#: models.py:992 +#: models.py:1026 msgid "Can view all Administrative acts" msgstr "Peut voir tous les Actes administratifs" -#: models.py:994 +#: models.py:1028 msgid "Can view own Administrative act" msgstr "Peut voir son propre Acte administratif" -#: models.py:996 +#: models.py:1030 msgid "Can add own Administrative act" msgstr "Peut ajouter son propre Acte administratif" -#: models.py:998 +#: models.py:1032 msgid "Can change own Administrative act" msgstr "Peut modifier son propre Acte administratif" -#: models.py:1000 +#: models.py:1034 msgid "Can delete own Administrative act" msgstr "Peut supprimer son propre Acte administratif" -#: models.py:1009 +#: models.py:1043 #: templates/ishtar/blocks/window_tables/administrativacts.html:7 #: templates/ishtar/blocks/window_tables/archaeologicalsites.html:7 msgid "Ref." msgstr "Réf." -#: models.py:1092 +#: models.py:1137 msgid "This index already exists for this year" msgstr "Cet index existe déjà pour cette année." -#: models.py:1160 +#: models.py:1205 msgid "External ID" msgstr "ID externe" -#: models.py:1163 +#: models.py:1208 msgid "External ID is set automatically" msgstr "L'identifiant externe est configuré automatiquement" -#: models.py:1164 +#: models.py:1209 msgid "Address - Locality" msgstr "Adresse - Lieu-dit" -#: models.py:1337 +#: models.py:1382 msgid "Owner" msgstr "Propriétaire" -#: models.py:1345 +#: models.py:1390 msgid "Parcel owner" msgstr "Propriétaire de parcelle" -#: models.py:1346 +#: models.py:1391 msgid "Parcel owners" msgstr "Propriétaires de parcelle" -#: models.py:1372 +#: models.py:1417 msgid "Recorded" msgstr "Enregistré" -#: models.py:1373 +#: models.py:1418 msgid "Effective" msgstr "Effectif" -#: models.py:1374 +#: models.py:1419 msgid "Active" msgstr "Actif" -#: models.py:1375 +#: models.py:1420 msgid "Field completed" msgstr "Terrain achevé" -#: models.py:1376 +#: models.py:1421 msgid "Associated report" msgstr "Rapport associé" -#: models.py:1377 +#: models.py:1422 msgid "Closed" msgstr "Clos" -#: models.py:1378 +#: models.py:1423 msgid "Documented and closed" msgstr "Documenté et clos" -#: models.py:1804 +#: models.py:1849 msgid "Is preventive" msgstr "Préventif" -#: models.py:1807 +#: models.py:1852 msgid "Operation type old" msgstr "Type d'opération - ancien" -#: models.py:1808 +#: models.py:1853 msgid "Operation types old" msgstr "Types d'opération - ancien" #: views.py:214 msgid "New operation" -msgstr "Nouvelle opération" +msgstr "Ajouter une opération" #: views.py:233 msgid "Operation modification" -msgstr "Modification d'une opération" +msgstr "Modifier une opération" #: views.py:276 msgid "Operation closing" -msgstr "Clôture d'une opération" +msgstr "Clôturer une opération" -#: views.py:282 +#: views.py:287 msgid "Operation deletion" -msgstr "Suppression d'une opération" +msgstr "Supprimer une opération" -#: views.py:287 +#: views.py:292 msgid "Operation: source search" -msgstr "Opération : recherche de documentation associée" +msgstr "Opération : rechercher une documentation associée" -#: views.py:295 +#: views.py:300 msgid "Operation: source creation" -msgstr "Opération : nouvelle documentation associée" +msgstr "Opération : ajouter une documentation associée" -#: views.py:303 +#: views.py:308 msgid "Operation: source modification" -msgstr "Opération : modification d'une documentation associée" +msgstr "Opération : modifier une documentation associée" -#: views.py:318 +#: views.py:323 msgid "Operation: source deletion" -msgstr "Opération : suppression d'une documentation associée" +msgstr "Opération : supprimer une documentation associée" -#: views.py:337 +#: views.py:342 msgid "Operation: new administrative act" -msgstr "Opération : nouvel acte administratif" +msgstr "Opération : ajouter un acte administratif" -#: views.py:347 +#: views.py:352 msgid "Operation: administrative act modification" msgstr "Opération : modification d'un acte administratif" -#: views.py:371 +#: views.py:376 msgid "Operation: administrative act deletion" -msgstr "Opération : suppression d'un acte administratif" +msgstr "Opération : supprimer un acte administratif" + +#: widgets.py:55 +msgid "Add" +msgstr "Ajouter" -#: wizards.py:199 +#: wizards.py:203 msgid "" -"Warning: No Archaelogical File is provided. If you have forget it return to " +"Warning: No Archaeological File is provided. If you have forget it return to " "the first step." msgstr "" "Attention : Aucun dossier archéologique n'a été précisé. S'il s'agit d'un " "oubli, définissez-le à la première étape." -#: templates/ishtar/sheet_administrativeact.html:14 -msgid "Year:" -msgstr "Année :" - -#: templates/ishtar/sheet_administrativeact.html:15 -msgid "Numerical reference:" -msgstr "Identifiant numérique :" - -#: templates/ishtar/sheet_administrativeact.html:16 -msgid "Internal reference:" -msgstr "Référence interne :" - -#: templates/ishtar/sheet_administrativeact.html:17 -msgid "Type:" -msgstr "Type :" - -#: templates/ishtar/sheet_administrativeact.html:18 -msgid "Object:" -msgstr "Objet :" - -#: templates/ishtar/sheet_administrativeact.html:19 -msgid "Signature date:" -msgstr "Date de signature :" - -#: templates/ishtar/sheet_administrativeact.html:20 -msgid "In charge:" -msgstr "Responsable :" - -#: templates/ishtar/sheet_administrativeact.html:21 -msgid "Archaeological preventive operator:" -msgstr "Opérateur d'archéologie préventive :" - -#: templates/ishtar/sheet_administrativeact.html:23 -msgid "Associated file:" -msgstr "Dossier associé :" - -#: templates/ishtar/sheet_administrativeact.html:24 -msgid "Associated operation:" -msgstr "Opération associée :" - -#: templates/ishtar/sheet_administrativeact.html:26 +#: templates/ishtar/sheet_administrativeact.html:36 #: templates/ishtar/sheet_operation.html:38 msgid "Surface:" msgstr "Surface :" -#: templates/ishtar/sheet_administrativeact.html:27 -msgid "Created by:" -msgstr "Créé par :" - #: templates/ishtar/sheet_operation.html:14 msgid "This operation is virtual." msgstr "Cette opération est virtuelle." diff --git a/translations/fr/archaeological_warehouse.po b/translations/fr/archaeological_warehouse.po index 5da94edbb..4f32658d1 100644 --- a/translations/fr/archaeological_warehouse.po +++ b/translations/fr/archaeological_warehouse.po @@ -3,158 +3,313 @@ # This file is distributed under the same license as the Ishtar package. # Étienne Loks <etienne.loks at peacefrogs net>, 2010-2011. # 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-02-24 10:52-0500\n" +"PO-Revision-Date: 2017-01-09 05:42-0500\n" "Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n" "Language-Team: \n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -"X-Generator: Zanata 3.9.5\n" +"X-Generator: Zanata 3.9.6\n" -#: forms.py:34 forms.py:97 models.py:47 models.py:87 +#: forms.py:35 forms.py:91 ishtar_menu.py:39 models.py:60 models.py:88 +#: templates/ishtar/sheet_warehouse.html:4 msgid "Warehouse" msgstr "Dépôt" -#: forms.py:43 models.py:38 +#: forms.py:44 forms.py:49 models.py:234 +msgid "Division" +msgstr "Division" + +#: forms.py:51 models.py:112 +msgid "Order" +msgstr "Ordre" + +#: forms.py:62 models.py:53 +msgid "Divisions" +msgstr "Divisions" + +#: forms.py:66 forms.py:95 models.py:45 models.py:85 msgid "Name" msgstr "Nom" -#: forms.py:45 models.py:30 models.py:40 +#: forms.py:67 forms.py:97 models.py:36 models.py:47 msgid "Warehouse type" msgstr "Type de dépôt" -#: forms.py:48 models.py:43 +#: forms.py:68 forms.py:114 +msgid "Town" +msgstr "Commune" + +#: forms.py:79 views.py:98 +msgid "Warehouse search" +msgstr "Rechercher un dépôt" + +#: forms.py:100 models.py:50 msgid "Person in charge" msgstr "Responsable" -#: forms.py:54 forms.py:102 models.py:44 models.py:91 +#: forms.py:106 forms.py:168 models.py:51 models.py:165 msgid "Comment" msgstr "Commentaires" -#: forms.py:56 +#: forms.py:108 msgid "Address" msgstr "Adresse" -#: forms.py:58 +#: forms.py:110 msgid "Address complement" msgstr "Complément d'adresse" -#: forms.py:60 +#: forms.py:112 msgid "Postal code" msgstr "Code postal" -#: forms.py:62 forms.py:66 -msgid "Town" -msgstr "Commune" - -#: forms.py:63 +#: forms.py:115 msgid "Country" msgstr "Pays" -#: forms.py:65 +#: forms.py:117 msgid "Phone" msgstr "Téléphone" -#: forms.py:93 models.py:94 +#: forms.py:118 +msgid "Mobile phone" +msgstr "Téléphone mobile" + +#: forms.py:145 forms.py:146 +msgid "Would you like to delete this warehouse?" +msgstr "Voulez-vous supprimer ce dépôt ?" + +#: forms.py:150 models.py:173 models.py:232 +#: templates/ishtar/sheet_container.html:4 msgid "Container" msgstr "Contenant" -#: forms.py:94 forms.py:129 models.py:66 +#: forms.py:154 forms.py:220 models.py:127 msgid "Ref." msgstr "Réf." -#: forms.py:95 forms.py:128 models.py:69 models.py:89 +#: forms.py:155 forms.py:219 models.py:130 models.py:163 msgid "Container type" msgstr "Type de contenant" -#: forms.py:139 +#: forms.py:157 +msgid "Current location (warehouse)" +msgstr "Lieu actuel (dépôt)" + +#: forms.py:163 models.py:160 +msgid "Responsible warehouse" +msgstr "Dépôt responsable" + +#: forms.py:194 +msgid "Index" +msgstr "Index" + +#: forms.py:212 +msgid "This ID already exists for this warehouse." +msgstr "Cet identifiant existe déjà pour ce dépôt." + +#: forms.py:230 forms.py:236 views.py:127 msgid "Container search" -msgstr "Recherche de contenant" +msgstr "Rechercher un contenant" -#: forms.py:141 +#: forms.py:232 forms.py:238 msgid "You should select a container." msgstr "Vous devez sélectionner un contenant." -#: forms.py:142 +#: forms.py:233 msgid "Add a new container" -msgstr "Ajouter un nouveau contenant." +msgstr "Ajouter un nouveau contenant" -#: forms.py:146 ishtar_menu.py:33 views.py:87 +#: forms.py:243 ishtar_menu.py:35 views.py:93 msgid "Packaging" msgstr "Conditionnement" -#: forms.py:153 +#: forms.py:249 msgid "Packager" msgstr "Personne assurant le conditionnement" -#: forms.py:159 +#: forms.py:255 msgid "Date" msgstr "Date" -#: forms.py:168 +#: forms.py:259 msgid "Packaged finds" msgstr "Mobilier conditionné" -#: ishtar_menu.py:30 -msgid "Find" -msgstr "Mobilier" +#: forms.py:263 models.py:166 +msgid "Localisation" +msgstr "Localisation" + +#: forms.py:287 forms.py:288 +msgid "Would you like to delete this container?" +msgstr "Voulez-vous supprimer ce contenant ?" + +#: ishtar_menu.py:32 +msgid "Treatment" +msgstr "Traitement" + +#: ishtar_menu.py:42 ishtar_menu.py:57 +msgid "Search" +msgstr "Recherche" + +#: ishtar_menu.py:45 ishtar_menu.py:60 +msgid "Creation" +msgstr "Ajout" + +#: ishtar_menu.py:48 ishtar_menu.py:63 +msgid "Modification" +msgstr "Modification" -#: models.py:31 +#: ishtar_menu.py:51 ishtar_menu.py:66 +msgid "Deletion" +msgstr "Suppression" + +#: ishtar_menu.py:55 models.py:174 templates/ishtar/sheet_warehouse.html:17 +msgid "Containers" +msgstr "Contenants" + +#: models.py:37 msgid "Warehouse types" msgstr "Types de dépôts" -#: models.py:48 +#: models.py:61 msgid "Warehouses" msgstr "Dépôts" -#: models.py:50 +#: models.py:63 msgid "Can view all Warehouses" msgstr "Peut voir tous les Dépôts" -#: models.py:51 +#: models.py:64 msgid "Can view own Warehouse" msgstr "Peut voir son propre Dépôt" -#: models.py:52 +#: models.py:65 msgid "Can add own Warehouse" msgstr "Peut ajouter son propre Dépôt" -#: models.py:53 +#: models.py:66 msgid "Can change own Warehouse" msgstr "Peut modifier son propre Dépôt" -#: models.py:54 +#: models.py:67 msgid "Can delete own Warehouse" msgstr "Peut supprimer son propre Dépôt" -#: models.py:62 +#: models.py:87 +msgid "Description" +msgstr "Description" + +#: models.py:92 models.py:93 +msgid "Collection" +msgstr "Collection" + +#: models.py:102 +msgid "Warehouse division" +msgstr "Division de dépôt" + +#: models.py:103 +msgid "Warehouse divisions" +msgstr "Divisions de dépôt" + +#: models.py:123 msgid "Length (mm)" msgstr "Longueur (mm)" -#: models.py:63 +#: models.py:124 msgid "Width (mm)" msgstr "Largeur (mm)" -#: models.py:64 +#: models.py:125 msgid "Height (mm)" msgstr "Hauteur (mm)" -#: models.py:65 +#: models.py:126 msgid "Volume (l)" msgstr "Volume (l)" -#: models.py:70 +#: models.py:131 msgid "Container types" msgstr "Types de contenant" -#: models.py:90 +#: models.py:149 +msgid "Location - index" +msgstr "Lieu - index" + +#: models.py:150 +msgid "Precise localisation" +msgstr "Localisation précise" + +#: models.py:151 +msgid "Type" +msgstr "Type" + +#: models.py:157 +msgid "Location (warehouse)" +msgstr "Lieu (dépôt)" + +#: models.py:164 msgid "Container ref." msgstr "Réf. du contenant" -#: models.py:95 -msgid "Containers" -msgstr "Contenants" +#: models.py:168 +msgid "Cached location" +msgstr "Lieu - en cache" + +#: models.py:235 +msgid "Reference" +msgstr "Référence" + +#: models.py:238 +msgid "Container localisation" +msgstr "Localisation de contenant" + +#: models.py:239 +msgid "Container localisations" +msgstr "Localisations de contenant" + +#: views.py:106 +msgid "Warehouse creation" +msgstr "Ajouter un dépôt" + +#: views.py:115 +msgid "Warehouse modification" +msgstr "Modifier un dépôt" + +#: views.py:122 +msgid "Warehouse deletion" +msgstr "Supprimer un dépôt" + +#: views.py:135 +msgid "Container creation" +msgstr "Ajouter un contenant" + +#: views.py:144 +msgid "Container modification" +msgstr "Modifier un contenant" + +#: views.py:151 +msgid "Container deletion" +msgstr "Supprimer un contenant" + +#: templates/ishtar/sheet_container.html:19 +msgid "Content" +msgstr "Contenu" + +#: templates/ishtar/sheet_warehouse.html:22 +msgid "Attached containers" +msgstr "Contenants associés" + +#: templates/ishtar/wizard/wizard_containerlocalisation.html:5 +msgid "" +"No division set for this warehouse. Define it to localise container in this " +"warehouse." +msgstr "" +"Pas de division configurée pour ce dépôt. Définissez une division pour " +"localiser un contenant dans ce dépôt." diff --git a/translations/fr/ishtar_common.po b/translations/fr/ishtar_common.po index 9e6d05458..269ddb6eb 100644 --- a/translations/fr/ishtar_common.po +++ b/translations/fr/ishtar_common.po @@ -5,17 +5,18 @@ # Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata # Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata # Étienne Loks <etienne.loks@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-10-22 06:30-0400\n" -"Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n" +"PO-Revision-Date: 2017-01-09 05:43-0500\n" +"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n" "Language-Team: \n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -"X-Generator: Zanata 3.9.5\n" +"X-Generator: Zanata 3.9.6\n" #: __init__.py:8 msgid "username" @@ -83,7 +84,7 @@ msgid "" "reference file." msgstr "" "Le fichier fourni n'est pas correct. Vérifiez le format du fichier. Si vous " -"utilisez un fichier CSV : vérifiez que le séparateur de colonne et " +"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:624 @@ -141,40 +142,40 @@ msgstr "résultat" msgid "\"%(value)s\" not in %(values)s" msgstr "\"%(value)s\" n'est pas dans %(values)s" -#: forms.py:55 +#: forms.py:73 msgid "Enter a valid name consisting of letters, spaces and hyphens." msgstr "Entrez un nom correct composé de lettres, espaces et tirets." -#: forms.py:71 forms_common.py:618 +#: forms.py:89 forms_common.py:618 msgid "Confirm" msgstr "Confirmer" -#: forms.py:76 +#: forms.py:94 msgid "Are you sure you want to delete?" msgstr "Êtes-vous sûr de vouloir supprimer ?" -#: forms.py:85 +#: forms.py:103 msgid "There are identical items." msgstr "Il y a des éléments identiques." -#: forms.py:123 forms.py:124 +#: forms.py:141 forms.py:142 msgid "Closing date" msgstr "Date de clôture" -#: forms.py:137 +#: forms.py:155 msgid "You should select an item." msgstr "Vous devez sélectionner un élément." -#: forms.py:138 +#: forms.py:156 msgid "Add a new item" msgstr "Ajouter un nouvel élément" -#: forms.py:245 models.py:1310 +#: forms.py:262 models.py:1367 msgid "Template" msgstr "Patron" #: forms_common.py:41 forms_common.py:59 forms_common.py:182 -#: forms_common.py:406 models.py:1376 models.py:2758 +#: forms_common.py:406 models.py:1433 models.py:2825 #: templates/blocks/JQueryAdvancedTown.html:19 #: templates/ishtar/sheet_organization.html:13 msgid "Town" @@ -182,24 +183,23 @@ msgstr "Commune" #: forms_common.py:43 msgid "" -"<p>Type name, department code and/or postal code of the town you would like " -"to select. The search is insensitive to case.</p>\n" +"<p>Type name, department code of the town you would like to select. The " +"search is insensitive to case.</p>\n" "<p>Only the first twenty results are displayed but specifying the department " "code is generally sufficient to get the appropriate result.</p>\n" "<p class='example'>For instance type \"saint denis 93\" for getting the " "french town Saint-Denis in the Seine-Saint-Denis department.</p>" msgstr "" -"<p>Tapez le nom, le numéro de département et/ou le code postal de la commune " -"que vous voulez sélectionner. La recherche n'est pas sensible à la casse.</" -"p>\n" +"<p>Tapez le nom, le numéro de département de la commune que vous voulez " +"sélectionner. La recherche n'est pas sensible à la casse.</p>\n" "<p>Seuls les vingt premiers résultats sont affichés mais en plus du nom, " "préciser le numéro de département est généralement suffisant pour obtenir le " "résultat souhaité.</p>\n" "<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:1546 -#: models.py:2384 models.py:2566 models.py:2628 +#: forms_common.py:68 forms_common.py:855 ishtar_menu.py:47 models.py:1606 +#: models.py:2452 models.py:2634 models.py:2695 #: templates/ishtar/sheet_person.html:4 msgid "Person" msgstr "Personne" @@ -213,63 +213,63 @@ msgstr "" "pas possible." #: forms_common.py:170 forms_common.py:327 forms_common.py:451 -#: ishtar_menu.py:75 models.py:1547 models.py:2273 +#: ishtar_menu.py:75 models.py:1607 models.py:2338 #: 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:977 models.py:1309 -#: models.py:1592 models.py:1810 models.py:2267 models.py:2370 models.py:2744 +#: forms_common.py:376 forms_common.py:446 models.py:1034 models.py:1366 +#: models.py:1652 models.py:1871 models.py:2332 models.py:2438 models.py:2811 #: templates/ishtar/sheet_organization.html:8 #: templates/ishtar/sheet_organization.html:21 msgid "Name" msgstr "Nom" -#: forms_common.py:174 models.py:1531 models.py:1941 +#: forms_common.py:174 models.py:1588 models.py:2002 msgid "Organization type" msgstr "Type d'organisation" -#: forms_common.py:176 forms_common.py:400 models.py:1371 +#: forms_common.py:176 forms_common.py:400 models.py:1428 #: templates/ishtar/sheet_organization.html:10 msgid "Address" msgstr "Adresse" -#: forms_common.py:178 forms_common.py:403 models.py:1372 +#: forms_common.py:178 forms_common.py:403 models.py:1429 #: templates/ishtar/sheet_organization.html:11 msgid "Address complement" msgstr "Complément d'adresse" -#: forms_common.py:180 forms_common.py:404 models.py:1374 +#: forms_common.py:180 forms_common.py:404 models.py:1431 #: templates/ishtar/sheet_organization.html:12 msgid "Postal code" msgstr "Code postal" -#: forms_common.py:183 forms_common.py:407 models.py:1377 +#: forms_common.py:183 forms_common.py:407 models.py:1434 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:1404 +#: forms_common.py:448 forms_common.py:572 models.py:1461 msgid "Email" msgstr "Courriel" -#: forms_common.py:186 forms_common.py:383 models.py:1389 +#: forms_common.py:186 forms_common.py:383 models.py:1446 #: 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:1401 +#: forms_common.py:187 forms_common.py:392 models.py:1458 #: 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:1969 -#: models.py:2269 models.py:2679 templates/sheet_ope.html:85 +#: forms_common.py:211 forms_common.py:325 forms_common.py:449 models.py:2032 +#: models.py:2334 models.py:2746 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 @@ -277,13 +277,13 @@ msgstr "Téléphone portable" msgid "Type" msgstr "Type" -#: forms_common.py:220 views.py:139 +#: forms_common.py:220 views.py:142 msgid "Organization search" -msgstr "Recherche d'organisations" +msgstr "Rechercher une organisation" #: forms_common.py:244 -msgid "At leat two items have to be selected." -msgstr "AU moins deux éléments doivent être sélectionnés." +msgid "At least two items have to be selected." +msgstr "Au moins deux éléments doivent être sélectionnés." #: forms_common.py:262 msgid "Merge all items into" @@ -293,14 +293,14 @@ msgstr "Fusionner tous les éléments dans" msgid "Organization to merge" msgstr "Organisation à fusionner" -#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2368 +#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2436 #: templates/ishtar/sheet_organization.html:22 msgid "Surname" msgstr "Prénom" -#: forms_common.py:339 forms_common.py:434 views.py:104 +#: forms_common.py:339 forms_common.py:434 views.py:107 msgid "Person search" -msgstr "Recherche de personnes" +msgstr "Rechercher une personne" #: forms_common.py:351 msgid "Person to merge" @@ -311,25 +311,25 @@ msgstr "Personne à fusionner" msgid "Identity" msgstr "Identité" -#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:1942 -#: models.py:2362 models.py:2364 models.py:2676 templates/sheet_ope.html:104 +#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:2003 +#: models.py:2430 models.py:2432 models.py:2743 templates/sheet_ope.html:104 #: templates/ishtar/blocks/window_tables/documents.html:7 msgid "Title" msgstr "Titre" -#: forms_common.py:372 models.py:2366 +#: forms_common.py:372 models.py:2434 msgid "Salutation" msgstr "Formule d'appel" -#: forms_common.py:378 models.py:2372 +#: forms_common.py:378 models.py:2440 msgid "Raw name" msgstr "Nom brut" -#: forms_common.py:381 models.py:1390 +#: forms_common.py:381 models.py:1447 msgid "Phone description" msgstr "Type de téléphone" -#: forms_common.py:384 models.py:1392 models.py:1394 +#: forms_common.py:384 models.py:1449 models.py:1451 msgid "Phone description 2" msgstr "Type de téléphone 2" @@ -337,11 +337,11 @@ msgstr "Type de téléphone 2" msgid "Phone 2" msgstr "Téléphone 2" -#: forms_common.py:388 models.py:1398 +#: forms_common.py:388 models.py:1455 msgid "Phone description 3" msgstr "Type de téléphone 3" -#: forms_common.py:390 models.py:1396 +#: forms_common.py:390 models.py:1453 msgid "Phone 3" msgstr "Téléphone 3" @@ -349,29 +349,29 @@ msgstr "Téléphone 3" msgid "Current organization" msgstr "Organisation actuelle" -#: forms_common.py:409 models.py:1379 +#: forms_common.py:409 models.py:1436 msgid "Other address: address" msgstr "Autre adresse : adresse" -#: forms_common.py:412 models.py:1382 +#: forms_common.py:412 models.py:1439 msgid "Other address: address complement" msgstr "Autre adresse : complément d'adresse" -#: forms_common.py:414 models.py:1383 +#: forms_common.py:414 models.py:1440 msgid "Other address: postal code" msgstr "Autre adresse : code postal" -#: forms_common.py:416 models.py:1385 +#: forms_common.py:416 models.py:1442 msgid "Other address: town" msgstr "Autre adresse : ville" -#: forms_common.py:418 models.py:1387 +#: forms_common.py:418 models.py:1444 msgid "Other address: country" msgstr "Autre adresse : pays" #: forms_common.py:430 msgid "Already has an account" -msgstr "As déjà un compte" +msgstr "A déjà un compte" #: forms_common.py:445 msgid "Username" @@ -379,9 +379,9 @@ msgstr "Nom d'utilisateur" #: forms_common.py:463 msgid "Account search" -msgstr "Recherche de comptes" +msgstr "Rechercher un compte" -#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2321 +#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2386 msgid "Person type" msgstr "Type de personne" @@ -389,7 +389,7 @@ msgstr "Type de personne" msgid "Account" msgstr "Compte" -#: forms_common.py:575 wizards.py:1192 +#: forms_common.py:575 wizards.py:1256 msgid "New password" msgstr "Nouveau mot de passe" @@ -413,7 +413,7 @@ msgstr "Ce nom d'utilisateur existe déjà." msgid "Send the new password by email?" msgstr "Envoyer le nouveau mot de passe par courriel ?" -#: forms_common.py:628 forms_common.py:641 models.py:2759 +#: forms_common.py:628 forms_common.py:641 models.py:2826 msgid "Towns" msgstr "Communes" @@ -429,7 +429,7 @@ msgstr "Seul un choix peut être coché." msgid "Documentation informations" msgstr "Information sur le document" -#: forms_common.py:775 forms_common.py:823 models.py:1943 models.py:2653 +#: forms_common.py:775 forms_common.py:823 models.py:2004 models.py:2720 msgid "Source type" msgstr "Type de document" @@ -441,37 +441,37 @@ msgstr "Référence" msgid "Internal reference" msgstr "Référence interne" -#: forms_common.py:783 models.py:2690 +#: forms_common.py:783 models.py:2757 msgid "Numerical ressource (web address)" msgstr "Ressource numérique (adresse web)" -#: forms_common.py:784 models.py:2692 +#: forms_common.py:784 models.py:2759 msgid "Receipt date" msgstr "Date de réception" -#: forms_common.py:786 models.py:2096 models.py:2694 +#: forms_common.py:786 models.py:2161 models.py:2761 msgid "Creation date" msgstr "Date de création" -#: forms_common.py:789 models.py:2697 +#: forms_common.py:789 models.py:2764 msgid "Receipt date in documentation" msgstr "Date de réception en documentation" -#: forms_common.py:791 forms_common.py:827 models.py:317 models.py:577 -#: models.py:1837 models.py:2376 models.py:2704 +#: forms_common.py:791 forms_common.py:827 models.py:323 models.py:634 +#: models.py:1898 models.py:2444 models.py:2771 msgid "Comment" msgstr "Commentaire" -#: forms_common.py:793 forms_common.py:826 models.py:979 models.py:1596 -#: models.py:1769 models.py:1811 models.py:2703 templates/sheet_ope.html:128 +#: forms_common.py:793 forms_common.py:826 models.py:1036 models.py:1656 +#: models.py:1830 models.py:1872 models.py:2770 templates/sheet_ope.html:128 msgid "Description" msgstr "Description" -#: forms_common.py:796 models.py:2705 +#: forms_common.py:796 models.py:2772 msgid "Additional information" msgstr "Informations supplémentaires" -#: forms_common.py:798 forms_common.py:830 models.py:2707 +#: forms_common.py:798 forms_common.py:830 models.py:2774 msgid "Has a duplicate" msgstr "Existe en doublon" @@ -488,7 +488,7 @@ 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:2633 +#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2700 #: templates/ishtar/wizard/wizard_person_deletion.html:124 msgid "Author" msgstr "Auteur" @@ -501,7 +501,7 @@ msgstr "Informations complémentaires" msgid "Would you like to delete this documentation?" msgstr "Voulez-vous supprimer ce document ?" -#: forms_common.py:856 models.py:1944 models.py:2621 models.py:2630 +#: forms_common.py:856 models.py:2005 models.py:2688 models.py:2697 msgid "Author type" msgstr "Type d'auteur" @@ -513,7 +513,7 @@ msgstr "Sélection d'auteur" msgid "There are identical authors." msgstr "Il y a des auteurs identiques." -#: forms_common.py:893 models.py:2634 models.py:2686 +#: forms_common.py:893 models.py:2701 models.py:2753 #: templates/sheet_ope.html:106 #: templates/ishtar/blocks/window_tables/documents.html:9 msgid "Authors" @@ -524,14 +524,14 @@ msgid "Administration" msgstr "Administration" #: ishtar_menu.py:33 -msgid "Add/modify" -msgstr "Ajouter/Modifier" +msgid "Addition/modification" +msgstr "Ajout/modification" -#: ishtar_menu.py:36 +#: ishtar_menu.py:36 ishtar_menu.py:70 ishtar_menu.py:101 msgid "Deletion" msgstr "Suppression" -#: ishtar_menu.py:39 models.py:1105 views.py:1484 +#: ishtar_menu.py:39 models.py:1162 views.py:1530 msgid "Global variables" msgstr "Variables globales" @@ -559,20 +559,15 @@ msgstr "Fusion automatique" msgid "Manual merge" msgstr "Fusion manuelle" -#: ishtar_menu.py:70 ishtar_menu.py:101 models.py:2133 widgets.py:110 -#: templates/ishtar/form_delete.html:11 -msgid "Delete" -msgstr "Suppression" - -#: ishtar_menu.py:109 models.py:2107 +#: ishtar_menu.py:109 models.py:2172 msgid "Imports" msgstr "Imports" -#: ishtar_menu.py:112 views.py:1492 +#: ishtar_menu.py:112 views.py:1538 msgid "New import" msgstr "Nouvel import" -#: ishtar_menu.py:116 views.py:1506 +#: ishtar_menu.py:116 views.py:1552 msgid "Current imports" msgstr "Imports en cours" @@ -580,128 +575,131 @@ msgstr "Imports en cours" msgid "Old imports" msgstr "Anciens imports" -#: models.py:178 +#: models.py:183 msgid "Not a valid item." msgstr "Élément invalide." -#: models.py:191 +#: models.py:196 msgid "A selected item is not a valid item." msgstr "Un élément sélectionné n'est pas valide." -#: models.py:202 +#: models.py:207 msgid "This item already exists." msgstr "Cet élément existe déjà." -#: models.py:313 models.py:576 models.py:1344 models.py:1356 +#: models.py:319 models.py:633 models.py:1401 models.py:1413 models.py:1827 msgid "Label" msgstr "Libellé" -#: models.py:315 +#: models.py:321 msgid "Textual ID" msgstr "Identifiant textuel" -#: models.py:318 models.py:579 models.py:1313 +#: models.py:324 models.py:636 models.py:1370 msgid "Available" msgstr "Disponible" -#: models.py:598 models.py:1883 +#: models.py:655 models.py:1944 msgid "Key" msgstr "Clé" -#: models.py:604 +#: models.py:661 msgid "Specific key to an import" msgstr "Clé spécifique à un import" -#: models.py:696 +#: models.py:753 msgid "Last editor" msgstr "Dernier éditeur" -#: models.py:699 +#: models.py:756 msgid "Creator" msgstr "Créateur" -#: models.py:841 models.py:2770 +#: models.py:898 models.py:2837 msgid "Order" msgstr "Ordre" -#: models.py:842 +#: models.py:899 msgid "Symmetrical" msgstr "Symétrique" -#: models.py:843 +#: models.py:900 msgid "Tiny label" -msgstr "Petit libellé" +msgstr "Libellé court" -#: models.py:857 +#: models.py:914 msgid "Cannot have symmetrical and an inverse_relation" msgstr "Ne peut pas être symétrique et avoir une relation inverse" -#: models.py:971 +#: models.py:1028 msgid "Euro" msgstr "Euro" -#: models.py:972 +#: models.py:1029 msgid "US dollar" msgstr "Dollars US" -#: models.py:978 models.py:1594 +#: models.py:1035 models.py:1654 msgid "Slug" msgstr "Identifiant texte" -#: models.py:980 +#: models.py:1037 msgid "Files module" msgstr "Module Dossiers" -#: models.py:981 +#: models.py:1038 msgid "Context records module" msgstr "Module Unités d'Enregistrement" -#: models.py:983 +#: models.py:1040 msgid "Finds module" msgstr "Module Mobilier" -#: models.py:984 +#: models.py:1041 msgid "Need context records module" msgstr "Nécessite le module Unités d'Enregistrement" -#: models.py:986 +#: models.py:1043 msgid "Warehouses module" msgstr "Module Dépôts" -#: models.py:987 +#: models.py:1044 msgid "Need finds module" msgstr "Nécessite le module mobilier" -#: models.py:989 +#: models.py:1046 msgid "Home page" msgstr "Page d'accueil" -#: models.py:990 +#: models.py:1047 #, 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 "" -"Page d'accueil d'Ishtar. Si elle n'est pas définie une page d'accueil par " -"défaut va apparaître. Utiliser la syntaxe Markdown. {random_image} peut être " +"Page d'accueil d'Ishtar. Si elle n'est pas définie, une page d'accueil par " +"défaut apparaît. Utiliser la syntaxe Markdown. {random_image} peut être " "utilisé pour afficher une image au hasard." -#: models.py:994 +#: models.py:1051 msgid "File external id" msgstr "Identifiant externe de fichier" -#: models.py:996 +#: models.py:1053 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 "Formule pour gérer les identifiants externes" +msgstr "" +"Formule pour gérer les identifiants externes de dossiers. À 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:1001 +#: models.py:1058 msgid "Parcel external id" msgstr "Identifiant externe de parcelle" -#: models.py:1004 +#: models.py:1061 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 " @@ -711,11 +709,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:1009 +#: models.py:1066 msgid "Context record external id" msgstr "Identifiant externe d'unité d'enregistrement" -#: models.py:1011 +#: models.py:1068 msgid "" "Formula to manage context record external ID. Change this with care. With " "incorrect formula, the application might be unusable and import of external " @@ -725,11 +723,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:1016 +#: models.py:1073 msgid "Base find external id" msgstr "Identifiant externe de mobilier de base" -#: models.py:1018 +#: models.py:1075 msgid "" "Formula to manage base find external ID. Change this with care. With " "incorrect formula, the application might be unusable and import of external " @@ -739,11 +737,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:1023 +#: models.py:1080 msgid "Find external id" msgstr "Identifiant externe de mobilier" -#: models.py:1025 +#: models.py:1082 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 " @@ -753,11 +751,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:1030 +#: models.py:1087 msgid "Raw name for person" msgstr "Nom brut pour une personne" -#: models.py:1032 +#: models.py:1089 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 " @@ -767,43 +765,43 @@ msgstr "" "Une formule incorrecte peut rendre l'application inutilisable et l'import de " "données externes peut alors être destructif." -#: models.py:1036 +#: models.py:1093 msgid "Current active" msgstr "Actuellement utilisé" -#: models.py:1037 +#: models.py:1094 msgid "Currency" msgstr "Devise" -#: models.py:1041 +#: models.py:1098 msgid "Ishtar site profile" msgstr "Profil d'instance Ishtar" -#: models.py:1042 +#: models.py:1099 msgid "Ishtar site profiles" msgstr "Profils d'instance Ishtar" -#: models.py:1098 +#: models.py:1155 msgid "Variable name" msgstr "Nom de la variable" -#: models.py:1099 +#: models.py:1156 msgid "Description of the variable" msgstr "Description de la variable" -#: models.py:1101 models.py:1884 +#: models.py:1158 models.py:1945 msgid "Value" msgstr "Valeur" -#: models.py:1104 +#: models.py:1161 msgid "Global variable" msgstr "Variable globale" -#: models.py:1214 models.py:1244 +#: models.py:1271 models.py:1301 msgid "Total" msgstr "Total" -#: models.py:1221 models.py:1345 models.py:1357 +#: models.py:1278 models.py:1402 models.py:1414 #: templates/ishtar/sheet_person.html:22 #: templates/ishtar/dashboards/dashboard_main_detail.html:141 #: templates/ishtar/dashboards/dashboard_main_detail_users.html:26 @@ -811,723 +809,747 @@ msgstr "Total" msgid "Number" msgstr "Nombre" -#: models.py:1308 +#: models.py:1365 msgid "Administrative Act" msgstr "Acte administratif" -#: models.py:1312 +#: models.py:1369 msgid "Associated object" msgstr "Objet associé" -#: models.py:1316 +#: models.py:1373 msgid "Document template" msgstr "Patron de document" -#: models.py:1317 +#: models.py:1374 msgid "Document templates" -msgstr "Patrons de documents" +msgstr "Patrons de document" -#: models.py:1348 models.py:1358 models.py:2091 +#: models.py:1405 models.py:1415 models.py:2156 msgid "State" msgstr "État" -#: models.py:1362 templates/blocks/JQueryAdvancedTown.html:12 +#: models.py:1419 templates/blocks/JQueryAdvancedTown.html:12 msgid "Department" msgstr "Département" -#: models.py:1363 +#: models.py:1420 msgid "Departments" msgstr "Départements" -#: models.py:1400 +#: models.py:1457 msgid "Raw phone" msgstr "Téléphone brut" -#: models.py:1406 +#: models.py:1463 msgid "Alternative address is prefered" msgstr "L'adresse alternative est préférée" -#: models.py:1445 +#: models.py:1502 msgid "Tel: " msgstr "Tél :" -#: models.py:1449 +#: models.py:1506 msgid "Mobile: " msgstr "Mobile :" -#: models.py:1453 +#: models.py:1510 msgid "Email: " msgstr "Courriel :" -#: models.py:1458 +#: models.py:1515 msgid "Merge key" msgstr "Clé de fusion" -#: models.py:1532 +#: models.py:1589 msgid "Organization types" msgstr "Types d'organisation" -#: models.py:1548 views.py:234 +#: models.py:1608 views.py:237 msgid "Operation" msgstr "Opération" -#: models.py:1550 +#: models.py:1610 msgid "Archaeological site" msgstr "Entité Archéologique" -#: models.py:1551 +#: models.py:1611 msgid "Parcels" msgstr "Parcelles" -#: models.py:1553 +#: models.py:1613 msgid "Operation source" msgstr "Documentation de l'opération" -#: models.py:1556 views.py:1299 views.py:1350 +#: models.py:1616 views.py:1346 views.py:1396 msgid "Archaeological files" -msgstr "Dossiers archéologiques" +msgstr "Dossiers" -#: models.py:1558 views.py:1302 views.py:1358 +#: models.py:1618 views.py:1349 views.py:1404 msgid "Context records" msgstr "Unités d'Enregistrement" -#: models.py:1560 +#: models.py:1620 msgid "Context record relations" msgstr "Relations entre Unités d'Enregistrement" -#: models.py:1562 views.py:1304 views.py:1361 -msgid "Finds" -msgstr "Mobilier" +#: models.py:1622 +msgid "Base finds" +msgstr "Mobilier de base" -#: models.py:1598 templates/ishtar/dashboards/dashboard_main.html:25 +#: models.py:1658 templates/ishtar/dashboards/dashboard_main.html:25 msgid "Users" msgstr "Utilisateurs" -#: models.py:1600 +#: models.py:1660 msgid "Associated model" msgstr "Modèle associé" -#: models.py:1603 +#: models.py:1663 msgid "Is template" msgstr "Est un patron" -#: models.py:1604 +#: models.py:1664 msgid "Unicity keys (separator \";\")" msgstr "Clés d'unicité (séparateur « ; »)" -#: models.py:1608 +#: models.py:1668 msgid "Importer - Type" msgstr "Importeur - Type" -#: models.py:1609 +#: models.py:1669 msgid "Importer - Types" msgstr "Importeur - Types" -#: models.py:1699 +#: models.py:1759 msgid "Importer - Default" msgstr "Importeur - Par défaut" -#: models.py:1700 +#: models.py:1760 msgid "Importer - Defaults" msgstr "Importeur - Par défaut" -#: models.py:1735 +#: models.py:1795 msgid "Importer - Default value" msgstr "Importeur - Valeur par défaut" -#: models.py:1736 +#: models.py:1796 msgid "Importer - Default values" msgstr "Importeur - Valeurs par défaut" -#: models.py:1768 +#: models.py:1829 msgid "Column number" msgstr "Numéro de colonne" -#: models.py:1771 +#: models.py:1832 msgid "Required" msgstr "Requis" -#: models.py:1774 +#: models.py:1835 msgid "Importer - Column" msgstr "Importeur - Colonne" -#: models.py:1775 +#: models.py:1836 msgid "Importer - Columns" msgstr "Importeur - Colonnes" -#: models.py:1795 +#: models.py:1856 msgid "Field name" msgstr "Nom du champ" -#: models.py:1797 models.py:1831 +#: models.py:1858 models.py:1892 msgid "Force creation of new items" msgstr "Forcer la création de nouveaux éléments" -#: models.py:1799 models.py:1833 +#: models.py:1860 models.py:1894 msgid "Concatenate with existing" msgstr "Concaténer avec l'existant" -#: models.py:1801 models.py:1835 +#: models.py:1862 models.py:1896 msgid "Concatenate character" msgstr "Caractère de concaténation" -#: models.py:1805 +#: models.py:1866 msgid "Importer - Duplicate field" msgstr "Importeur - Champ dupliqué" -#: models.py:1806 +#: models.py:1867 msgid "Importer - Duplicate fields" msgstr "Importeur - Champs dupliqués" -#: models.py:1813 +#: models.py:1874 msgid "Regular expression" msgstr "Expression régulière" -#: models.py:1816 +#: models.py:1877 msgid "Importer - Regular expression" msgstr "Importeur - Expression régulière" -#: models.py:1817 +#: models.py:1878 msgid "Importer - Regular expressions" msgstr "Importeur - Expressions régulières" -#: models.py:1840 +#: models.py:1901 msgid "Importer - Target" msgstr "Importeur - Cible" -#: models.py:1841 +#: models.py:1902 msgid "Importer - Targets" msgstr "Importeur - Cibles" -#: models.py:1865 views.py:518 +#: models.py:1926 views.py:536 msgid "True" msgstr "Oui" -#: models.py:1866 views.py:520 +#: models.py:1927 views.py:538 msgid "False" msgstr "Non" -#: models.py:1885 +#: models.py:1946 msgid "Is set" msgstr "Est défini" -#: models.py:1892 +#: models.py:1953 msgid "Importer - Target key" -msgstr "Importeur - Rapprochement" +msgstr "Importeur - Clé de rapprochement" -#: models.py:1893 +#: models.py:1954 msgid "Importer - Targets keys" -msgstr "Importeur - Rapprochements" +msgstr "Importeur - Clés de rapprochement" -#: models.py:1945 models.py:2669 models.py:2682 +#: models.py:2006 models.py:2736 models.py:2749 msgid "Format" msgstr "Format" -#: models.py:1946 models.py:2774 +#: models.py:2007 models.py:2841 msgid "Operation type" msgstr "Type d'opération" -#: models.py:1947 +#: models.py:2008 msgid "Period" msgstr "Périodes" -#: models.py:1948 +#: models.py:2009 msgid "Report state" msgstr "État de rapport" -#: models.py:1949 +#: models.py:2010 +msgid "Remain type" +msgstr "Type de vestige" + +#: models.py:2011 msgid "Unit" msgstr "Unité" -#: models.py:1950 +#: models.py:2012 +msgid "Activity type" +msgstr "Type d'activité" + +#: models.py:2013 msgid "Material" msgstr "Matériau" -#: models.py:1952 +#: models.py:2015 msgid "Conservatory state" msgstr "État de conservation" -#: models.py:1953 +#: models.py:2016 msgid "Preservation type" msgstr "Type de conservation" -#: models.py:1954 +#: models.py:2017 msgid "Object type" msgstr "Type d'objet" -#: models.py:1956 +#: models.py:2019 msgid "Identification type" msgstr "Type d'identification" -#: models.py:1958 +#: models.py:2021 msgid "Context record relation type" msgstr "Type de relations entre Unités d'Enregistrement" -#: models.py:1959 models.py:2661 +#: models.py:2022 models.py:2728 msgid "Support type" msgstr "Type de support" -#: models.py:1965 +#: models.py:2028 msgid "Integer" msgstr "Entier" -#: models.py:1966 +#: models.py:2029 msgid "Float" msgstr "Nombre à virgule" -#: models.py:1967 +#: models.py:2030 msgid "String" msgstr "Chaîne de caractères" -#: models.py:1968 templates/sheet_ope.html:86 +#: models.py:2031 templates/sheet_ope.html:86 msgid "Date" msgstr "Date" -#: models.py:1970 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83 +#: models.py:2033 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:1971 +#: models.py:2034 msgid "String to boolean" msgstr "Chaîne de caractères vers booléen" -#: models.py:1972 +#: models.py:2035 msgctxt "filesystem" msgid "File" msgstr "Fichier" -#: models.py:1973 +#: models.py:2036 msgid "Unknow type" msgstr "Type inconnu" -#: models.py:1989 +#: models.py:2052 msgid "4 digit year. e.g.: \"2015\"" msgstr "Année sur 4 chiffres. Exemple : « 2015 »" -#: models.py:1990 +#: models.py:2053 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:1991 +#: models.py:2054 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:2001 +#: models.py:2064 msgid "Options" msgstr "Options" -#: models.py:2003 +#: models.py:2066 msgid "Split character(s)" msgstr "Caractère(s) de séparation" -#: models.py:2007 +#: models.py:2070 msgid "Importer - Formater type" msgstr "Importeur - Type de mise en forme" -#: models.py:2008 +#: models.py:2071 msgid "Importer - Formater types" msgstr "Importeur - Types de mise en forme" -#: models.py:2055 templates/ishtar/dashboards/dashboard_main_detail.html:63 +#: models.py:2120 templates/ishtar/dashboards/dashboard_main_detail.html:63 msgid "Created" msgstr "Créé" -#: models.py:2056 +#: models.py:2121 msgid "Analyse in progress" msgstr "Analyse en cours" -#: models.py:2057 +#: models.py:2122 msgid "Analysed" msgstr "Analysé" -#: models.py:2058 +#: models.py:2123 msgid "Import pending" msgstr "Import en attente" -#: models.py:2059 +#: models.py:2124 msgid "Import in progress" msgstr "Import en cours" -#: models.py:2060 +#: models.py:2125 msgid "Finished with errors" msgstr "Terminé avec des erreurs" -#: models.py:2061 +#: models.py:2126 msgid "Finished" msgstr "Terminé" -#: models.py:2062 +#: models.py:2127 msgid "Archived" msgstr "Archivé" -#: models.py:2074 +#: models.py:2139 msgid "Imported file" msgstr "Fichier importé" -#: models.py:2077 +#: models.py:2142 msgid "Associated images (zip file)" msgstr "Images associées (fichier zip)" -#: models.py:2079 +#: models.py:2144 msgid "Encoding" msgstr "Codage" -#: models.py:2081 +#: models.py:2146 msgid "Skip lines" msgstr "Nombre de lignes d'entête" -#: models.py:2082 templates/ishtar/import_list.html:47 +#: models.py:2147 templates/ishtar/import_list.html:47 msgid "Error file" msgstr "Fichier erreur" -#: models.py:2085 +#: models.py:2150 msgid "Result file" msgstr "Fichier résultant" -#: models.py:2088 templates/ishtar/import_list.html:53 +#: models.py:2153 templates/ishtar/import_list.html:53 msgid "Match file" msgstr "Fichier de correspondance" -#: models.py:2094 +#: models.py:2159 msgid "Conservative import" msgstr "Import conservateur" -#: models.py:2099 +#: models.py:2164 msgid "End date" msgstr "Date de fin" -#: models.py:2101 +#: models.py:2166 msgid "Remaining seconds" msgstr "Secondes restantes" -#: models.py:2106 +#: models.py:2171 msgid "Import" msgstr "Import" -#: models.py:2123 +#: models.py:2188 msgid "Analyse" msgstr "Analyser" -#: models.py:2125 models.py:2128 +#: models.py:2190 models.py:2193 msgid "Re-analyse" msgstr "Analyser de nouveau " -#: models.py:2126 +#: models.py:2191 msgid "Launch import" msgstr "Lancer l'import" -#: models.py:2129 +#: models.py:2194 msgid "Re-import" msgstr "Ré-importer" -#: models.py:2130 +#: models.py:2195 msgid "Archive" msgstr "Archiver" -#: models.py:2132 +#: models.py:2197 msgid "Unarchive" msgstr "Désarchiver" -#: models.py:2274 +#: models.py:2198 widgets.py:129 templates/ishtar/form_delete.html:11 +msgid "Delete" +msgstr "Supprimer" + +#: models.py:2339 msgid "Organizations" msgstr "Organisations" -#: models.py:2276 +#: models.py:2341 msgid "Can view all Organizations" msgstr "Peut voir toutes les Organisations" -#: models.py:2277 +#: models.py:2342 msgid "Can view own Organization" msgstr "Peut voir sa propre Organisation" -#: models.py:2278 +#: models.py:2343 msgid "Can add own Organization" msgstr "Peut ajouter sa propre Organisation" -#: models.py:2280 +#: models.py:2345 msgid "Can change own Organization" msgstr "Peut modifier sa propre Organisation" -#: models.py:2282 +#: models.py:2347 msgid "Can delete own Organization" msgstr "Peut supprimer sa propre Organisation" -#: models.py:2317 +#: models.py:2382 msgid "Groups" msgstr "Groupes" -#: models.py:2322 +#: models.py:2387 msgid "Person types" msgstr "Types de personne" -#: models.py:2330 +#: models.py:2398 msgid "Title type" msgstr "Type de titre" -#: models.py:2331 +#: models.py:2399 msgid "Title types" msgstr "Types de titre" -#: models.py:2340 +#: models.py:2408 msgid "Mr" msgstr "M." -#: models.py:2341 +#: models.py:2409 msgid "Miss" msgstr "Mlle" -#: models.py:2342 +#: models.py:2410 msgid "Mr and Mrs" msgstr "M. et Mme" -#: models.py:2343 +#: models.py:2411 msgid "Mrs" msgstr "Mme" -#: models.py:2344 +#: models.py:2412 msgid "Doctor" msgstr "Dr." -#: models.py:2374 +#: models.py:2442 msgid "Contact type" msgstr "Type de contact" -#: models.py:2377 models.py:2441 +#: models.py:2445 models.py:2509 msgid "Types" msgstr "Types" -#: models.py:2380 +#: models.py:2448 msgid "Is attached to" msgstr "Est rattaché à" -#: models.py:2385 +#: models.py:2453 msgid "Persons" msgstr "Personnes" -#: models.py:2387 +#: models.py:2455 msgid "Can view all Persons" msgstr "Peut voir toutes les Personnes" -#: models.py:2388 +#: models.py:2456 msgid "Can view own Person" msgstr "Peut voir sa propre Personne" -#: models.py:2389 +#: models.py:2457 msgid "Can add own Person" msgstr "Peut ajouter sa propre Personne" -#: models.py:2390 +#: models.py:2458 msgid "Can change own Person" msgstr "Peut modifier sa propre Personne" -#: models.py:2391 +#: models.py:2459 msgid "Can delete own Person" msgstr "Peut supprimer sa propre Personne" -#: models.py:2569 +#: models.py:2637 msgid "Advanced shortcut menu" msgstr "Menu de raccourci (avancé)" -#: models.py:2572 +#: models.py:2640 msgid "Ishtar user" msgstr "Utilisateur d'Ishtar" -#: models.py:2573 +#: models.py:2641 msgid "Ishtar users" msgstr "Utilisateurs d'Ishtar" -#: models.py:2616 +#: models.py:2683 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:2622 +#: models.py:2689 msgid "Author types" msgstr "Types d'auteur" -#: models.py:2654 +#: models.py:2721 msgid "Source types" msgstr "Types de document" -#: models.py:2662 +#: models.py:2729 msgid "Support types" msgstr "Types de support" -#: models.py:2670 +#: models.py:2737 msgid "Formats" msgstr "Formats" -#: models.py:2677 +#: models.py:2744 msgid "External ID" msgstr "Identifiant externe" -#: models.py:2680 +#: models.py:2747 msgid "Support" msgstr "Support" -#: models.py:2684 +#: models.py:2751 msgid "Scale" msgstr "Échelle" -#: models.py:2698 +#: models.py:2765 msgid "Item number" msgstr "Numéro d'élément" -#: models.py:2699 +#: models.py:2766 msgid "Ref." msgstr "Réf." -#: models.py:2702 +#: models.py:2769 msgid "Internal ref." msgstr "Réf. interne" -#: models.py:2745 +#: models.py:2812 msgid "Surface (m2)" msgstr "Surface (m2)" -#: models.py:2746 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107 +#: models.py:2813 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107 msgid "Localisation" msgstr "Localisation" -#: models.py:2771 +#: models.py:2838 msgid "Is preventive" msgstr "Est du préventif" -#: models.py:2775 +#: models.py:2842 msgid "Operation types" msgstr "Types d'opération" -#: models.py:2804 +#: models.py:2871 msgid "Preventive" msgstr "Préventif" -#: models.py:2805 +#: models.py:2872 msgid "Research" msgstr "Programmé" -#: utils.py:74 +#: utils.py:81 msgid " (...)" msgstr " (...)" -#: utils.py:107 +#: utils.py:114 msgid "Load another random image?" msgstr "Charger une autre image au hasard ?" -#: views.py:111 +#: views.py:114 msgid "New person" -msgstr "Nouvelle personne" +msgstr "Ajouter une personne" -#: views.py:119 +#: views.py:122 msgid "Person modification" -msgstr "Modification d'une personne" +msgstr "Modifier une personne" -#: views.py:134 +#: views.py:137 msgid "Person deletion" -msgstr "Suppression de personne" +msgstr "Supprimer une personne" -#: views.py:145 +#: views.py:148 msgid "New organization" -msgstr "Nouvelle organisation" +msgstr "Ajouter une organisation" -#: views.py:152 +#: views.py:155 msgid "Organization modification" -msgstr "Modification d'une organisation" +msgstr "Modifier une organisation" -#: views.py:168 +#: views.py:171 msgid "Organization deletion" -msgstr "Suppression d'une organisation" +msgstr "Supprimer une organisation" -#: views.py:175 +#: views.py:178 msgid "Account management" -msgstr "Gestion des comptes" +msgstr "Gérer les comptes" -#: views.py:181 +#: views.py:184 msgid "Account deletion" -msgstr "Suppression de comptes" +msgstr "Supprimer un compte" -#: views.py:233 +#: views.py:236 msgid "Archaeological file" msgstr "Dossier" -#: views.py:236 +#: views.py:239 msgid "Context record" msgstr "Unité d'Enregistrement" -#: views.py:238 +#: views.py:241 msgid "Find" msgstr "Mobilier" -#: views.py:1238 views.py:1281 +#: views.py:243 +msgid "Treatment request" +msgstr "Demande de traitement" + +#: views.py:244 +msgid "Treatment" +msgstr "Traitement" + +#: views.py:1285 views.py:1328 msgid "Operation not permitted." msgstr "Opération non permise." -#: views.py:1240 +#: views.py:1287 #, python-format msgid "New %s" msgstr "Nouveau %s" -#: views.py:1300 views.py:1354 +#: views.py:1347 views.py:1400 msgid "Operations" msgstr "Opérations" -#: views.py:1553 templates/ishtar/import_list.html:43 +#: views.py:1351 views.py:1407 +msgid "Finds" +msgstr "Mobilier" + +#: views.py:1599 templates/ishtar/import_list.html:43 msgid "Link unmatched items" msgstr "Associer les éléments non rapprochés" -#: views.py:1568 +#: views.py:1614 msgid "Delete import" -msgstr "Suppression de l'import" +msgstr "Supprimer un import" -#: views.py:1607 +#: views.py:1653 msgid "Merge persons" msgstr "Fusionner des personnes" -#: views.py:1631 +#: views.py:1677 msgid "Select the main person" msgstr "Choisir la personne principale" -#: views.py:1640 +#: views.py:1686 msgid "Merge organization" msgstr "Fusionner des organisations" -#: views.py:1650 +#: views.py:1696 msgid "Select the main organization" msgstr "Sélectionner l'organisation principale" -#: views.py:1690 views.py:1706 +#: views.py:1736 views.py:1752 msgid "Corporation manager" msgstr "Représentant de la personne morale" -#: widgets.py:239 widgets.py:347 widgets.py:463 +#: widgets.py:258 widgets.py:365 widgets.py:480 msgid "Search..." msgstr "Recherche..." -#: widgets.py:623 templatetags/window_tables.py:79 +#: widgets.py:670 templatetags/window_tables.py:91 msgid "No results" msgstr "Pas de résultats" -#: widgets.py:624 templatetags/window_tables.py:80 +#: widgets.py:671 templatetags/window_tables.py:92 msgid "Loading..." msgstr "Chargement..." -#: widgets.py:625 +#: widgets.py:672 msgid "Remove" msgstr "Enlever" -#: wizards.py:323 templates/ishtar/import_delete.html:20 +#: wizards.py:342 templates/ishtar/import_delete.html:20 msgid "Yes" msgstr "Oui" -#: wizards.py:325 +#: wizards.py:344 msgid "No" msgstr "Non" -#: wizards.py:1249 +#: wizards.py:1313 #, python-format msgid "[%(app_name)s] Account creation/modification" -msgstr "[%(app_name)s] Création /modification du compte" +msgstr "[%(app_name)s] Création/modification du compte" #: templates/404.html:14 msgid "Page not found" @@ -1564,12 +1586,12 @@ msgid "The %(app_name)s team" msgstr "L'équipe %(app_name)s" #: templates/base.html:41 -msgid "Searches in the shortcut menu deals with all items." +msgid "Searches in the shortcut menu deal with all items." msgstr "" "Les recherches dans le menu de raccourci concernent tous les éléments." #: templates/base.html:42 -msgid "Searches in the shortcut menu deals with only your items." +msgid "Searches in the shortcut menu deal with only your items." msgstr "" "Les recherches dans le menu de raccourci ne concernent que vos éléments." @@ -1619,7 +1641,7 @@ msgstr "Cela peut être long." #: templates/base.html:117 msgid "Time to take a coffee?" -msgstr "Il est temps de prendre un café ?" +msgstr "Il est peut-être temps de prendre un café ?" #: templates/base.html:118 msgid "Time to take another coffee?" @@ -1734,7 +1756,7 @@ msgid "Operator's reference code:" msgstr "Référence de l'opérateur :" #: templates/sheet_ope.html:36 -msgid "Town planning service:" +msgid "Planning service:" msgstr "Service instructeur :" #: templates/sheet_ope.html:37 @@ -1827,7 +1849,7 @@ msgstr "Documents" #: templates/sheet_ope.html:117 msgid "No document associated to this operation" -msgstr "Pas d'opération associée à cette opération" +msgstr "Pas de document associé à cette opération" #: templates/sheet_ope.html:121 templates/sheet_ope.html.py:123 msgid "Context Records" @@ -1871,7 +1893,7 @@ msgstr "Interface d'administration" #: templates/welcome.html:9 msgid "for admin only." -msgstr "Seulement pour les administrateurs." +msgstr "seulement pour les administrateurs." #: templates/welcome.html:10 msgid "Forum" @@ -1898,9 +1920,9 @@ msgid "where the magic happens." msgstr "c'est là que la magie opère." #: templates/window.html:40 templates/blocks/JQueryJqGrid.html:28 -#: templates/ishtar/manage_basket.html:9 +#: templates/ishtar/manage_basket.html:12 msgid "Add" -msgstr "Ajout" +msgstr "Ajouter" #: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 msgid "Ishtar administration" @@ -1980,7 +2002,7 @@ msgstr "supprimer" #: templates/ishtar/import_list.html:58 templates/ishtar/merge.html:31 #: templates/ishtar/simple_form.html:7 #: templates/ishtar/wizard/confirm_wizard.html:42 -#: templates/ishtar/wizard/default_wizard.html:30 +#: templates/ishtar/wizard/default_wizard.html:31 #: templates/ishtar/wizard/search.html:13 #: templates/ishtar/wizard/validation_bar.html:4 msgid "Validate" @@ -2027,17 +2049,17 @@ msgstr "Fichier source" msgid "Control file" msgstr "Fichier de contrôle" -#: templates/ishtar/manage_basket.html:7 -msgid "Checking \"Select all\" only select the current page." -msgstr "Cocher « Tout sélectionner », sélectionne seulement la page courante." +#: templates/ishtar/manage_basket.html:9 +msgid "Checking \"Select all\" only selects the current page." +msgstr "Cocher « Tout sélectionner » sélectionne seulement la page courante." -#: templates/ishtar/manage_basket.html:10 +#: templates/ishtar/manage_basket.html:13 msgid "Basket content" msgstr "Contenu du panier" #: templates/ishtar/merge.html:5 msgid "Merge" -msgstr "Fusion" +msgstr "Fusionner" #: templates/ishtar/merge.html:7 msgid "Every operation on this form is irreversible" @@ -2124,12 +2146,12 @@ msgid "No person in this organization" msgstr "Pas de personne au sein de cette organisation" #: templates/ishtar/sheet_organization.html:38 -msgid "General contractor organization of archaelogical files" -msgstr "Aménageur (organisation) pour les dossiers archéologiques" +msgid "General contractor organization of archaeological files" +msgstr "Organisation de l'aménageur des dossiers" #: templates/ishtar/sheet_organization.html:43 -msgid "Town planning service of archaelogical files" -msgstr "Service instructeur pour les dossiers archéologiques" +msgid "Planning service of archaeological files" +msgstr "Service instructeur des dossiers" #: templates/ishtar/sheet_person.html:21 #: templates/ishtar/wizard/wizard_person.html:19 @@ -2148,7 +2170,7 @@ msgstr "Autre adresse" #: templates/ishtar/sheet_person.html:60 msgid "Associated organization" -msgstr "Organisations associées" +msgstr "Organisation associée" #: templates/ishtar/sheet_person.html:71 msgid "Associated operations as scientist" @@ -2159,16 +2181,19 @@ msgid "Associated operations as responsible" msgstr "Opérations associées en tant que responsable" #: templates/ishtar/sheet_person.html:80 -msgid "In charge of archaelogical files" -msgstr "Responsable des dossiers archéologiques" +#: templates/ishtar/wizard/wizard_person_deletion.html:6 +msgid "In charge of archaeological files" +msgstr "Responsable des dossiers" #: templates/ishtar/sheet_person.html:85 -msgid "General contractor of archaelogical files" -msgstr "Aménageur des dossiers archéologiques" +#: templates/ishtar/wizard/wizard_person_deletion.html:14 +msgid "General contractor of archaeological files" +msgstr "Aménageur des dossiers" #: templates/ishtar/sheet_person.html:90 -msgid "Responsible for town planning service of archaelogical files" -msgstr "Responsable au service instructeur des dossiers" +#: templates/ishtar/wizard/wizard_person_deletion.html:22 +msgid "Responsible for planning service of archaeological files" +msgstr "Responsable pour le service instructeur des dossiers" #: templates/ishtar/sheet_person.html:96 msgid "Documents associated to operations" @@ -2214,8 +2239,8 @@ msgid "" "auto-pin." msgstr "" "Épingler un élément permet de contraindre les recherches par défaut à cet " -"élément. Par défaut seuls ses propres éléments sont listés. Les nouveaux " -"éléments, ceux modifiés sont auto-épinglés." +"élément. Par défaut seuls vos propres éléments sont listés. Les nouveaux " +"éléments et ceux modifiés sont auto-épinglés." #: templates/ishtar/blocks/advanced_shortcut_menu.html:21 msgid "Search within my items" @@ -2232,7 +2257,7 @@ msgstr "Rafraîchir le menu" #: templates/ishtar/blocks/advanced_shortcut_menu.html:36 #: templates/ishtar/blocks/shortcut_menu.html:31 msgid "Unpin" -msgstr "Détacher" +msgstr "Désépingler" #: templates/ishtar/blocks/window_nav.html:6 msgid "Previous version" @@ -2244,11 +2269,11 @@ msgstr "Restaurer cette version" #: templates/ishtar/blocks/window_nav.html:17 msgid "" -"Are you sure to restore to this version? All changement made since this " -"version will be lost." +"Are you sure to restore to this version? All changes made since this version " +"will be lost." msgstr "" -"Êtes-vous sûr de vouloir revenir à cette version ? Tous les changements " -"réalisées depuis cette version seront perdus." +"Êtes-vous certain de vouloir revenir à cette version ? Tous les changements " +"réalisés depuis cette version seront perdus." #: templates/ishtar/blocks/window_nav.html:22 msgid "Restore" @@ -2276,7 +2301,7 @@ msgstr "Exporter en fichier PDF" #: templates/ishtar/blocks/window_nav.html:56 msgid "Relation between items are not historized." -msgstr "Les relations entre éléments ne sont pas historisés." +msgstr "Les relations entre éléments ne sont pas historisées." #: templates/ishtar/blocks/window_tables/documents.html:10 msgid "Related to" @@ -2379,7 +2404,7 @@ msgstr "Vous avez entré les informations suivantes :" msgid "Would you like to save them?" msgstr "Voulez-vous sauvegarder ces informations ?" -#: templates/ishtar/wizard/default_wizard.html:36 +#: templates/ishtar/wizard/default_wizard.html:37 #: templates/ishtar/wizard/parcels_wizard.html:24 #: templates/ishtar/wizard/relations_wizard.html:23 #: templates/ishtar/wizard/search.html:20 @@ -2387,9 +2412,10 @@ msgstr "Voulez-vous sauvegarder ces informations ?" msgid "Add/Modify" msgstr "Ajouter/Modifier" -#: templates/ishtar/wizard/default_wizard.html:58 +#: templates/ishtar/wizard/default_wizard.html:59 msgid "" -"The form has changed if you don't validate it all your changes will be lost." +"The form has changed. If you don't validate it, all your changes will be " +"lost." msgstr "" "Le formulaire a changé. Si vous ne le validez pas, tous vos changements " "seront perdus." @@ -2409,7 +2435,7 @@ msgstr "tout" #: templates/ishtar/wizard/parcels_wizard.html:23 msgid "Add all parcels from the archaeological file" -msgstr "Ajouter toutes les parcelles du dossier archéologique associé" +msgstr "Ajouter toutes les parcelles du dossier associé" #: templates/ishtar/wizard/towns_wizard.html:27 msgid "No town set in the associated file." @@ -2452,18 +2478,6 @@ msgstr "Opérateur des opérations" msgid "Adminact: operator of archaeological operations" msgstr "Acte administratif : opérateur des opérations" -#: templates/ishtar/wizard/wizard_person_deletion.html:6 -msgid "In charge of archaeological files" -msgstr "Responsable des dossiers" - -#: templates/ishtar/wizard/wizard_person_deletion.html:14 -msgid "General contractor of archaeological files" -msgstr "Aménageur des dossiers" - -#: templates/ishtar/wizard/wizard_person_deletion.html:22 -msgid "Responsible town planning service of archaeological files" -msgstr "Responsable au service instructeur des dossiers" - #: templates/ishtar/wizard/wizard_person_deletion.html:30 msgid "Scientist in charge of archaeological files" msgstr "Responsable scientifique des dossiers" @@ -2574,7 +2588,7 @@ msgstr "Déconnecté" #: templates/registration/password_change_done.html:6 msgid "Password changed" -msgstr "Mot de passe changé" +msgstr "Mot de passe modifié" #: templates/registration/password_change_form.html:10 #: templates/registration/password_reset_confirm.html:11 diff --git a/version.py b/version.py index 91309b62b..813919207 100644 --- a/version.py +++ b/version.py @@ -1,4 +1,4 @@ -VERSION = (0, 98, 10) +VERSION = (0, 99, 0) def get_version(): |
