diff options
-rw-r--r-- | Makefile.example | 148 | ||||
-rw-r--r-- | archaeological_context_records/migrations/0101_squashed.py | 343 | ||||
-rw-r--r-- | archaeological_context_records/migrations/0102_link_apps.py | 195 | ||||
-rw-r--r-- | archaeological_files/migrations/0101_squashed.py | 317 | ||||
-rw-r--r-- | archaeological_finds/migrations/0101_squashed.py | 780 | ||||
-rw-r--r-- | archaeological_finds/migrations/0102_link_apps.py | 601 | ||||
-rw-r--r-- | archaeological_operations/migrations/0101_squashed.py | 822 | ||||
-rw-r--r-- | archaeological_operations/migrations/0102_link_apps.py | 35 | ||||
-rw-r--r-- | archaeological_warehouse/migrations/0101_squashed.py | 374 | ||||
-rwxr-xr-x | install/ishtar-install | 2 | ||||
-rw-r--r-- | ishtar_common/migrations/0201_squashed.py | 1428 |
11 files changed, 4981 insertions, 64 deletions
diff --git a/Makefile.example b/Makefile.example index fc62e84d2..2605b559a 100644 --- a/Makefile.example +++ b/Makefile.example @@ -10,63 +10,60 @@ apps="ishtar_common" "archaeological_operations" "archaeological_context_records default_data='fr' version=`head -n 1 version.py | cut -d' ' -f2` branch_name=`git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/\1/"` +BRANCH_NAME := $(shell git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/\1/") -help: - # Actions available: - # * clean: remove temporary files - # * update: - # * test: - # * pep8: - # * pylint: - # * syncdb: - # * run: - # * runcelery: - # * shell: - # * makemessages: - # * compilemessages: - # * sass: - # * schemamigrations: - # * schemamigrations_initial: - # * generate_doc: - # * fixtures: - # * fixtures_*: - # * translations_push: - # * translations_pull: - # * readme_md_to_rst: - # * sdist: - # * distribute_test: - # * distribute_main: - # * deb: - -clean: +## Check dependencies + +help: ## Display this help + @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) + +##@ Cleanup + +clean: ## remove temporary files -rm -rf *~* -find . -name '*.pyc' -exec rm {} \; -find . -name '.*.swp' -exec rm {} \; -find . -name '__pycache__' -exec rm -rf {} \; 2> /dev/null -rm -rf dist ishtar.egg-info -update: clean syncdb compilemessages collectstatic +##@ General management + +update: clean syncdb compilemessages collectstatic ## update the instance + +migrate: ## migrate database + cd $(project); $(PYTHON) manage.py migrate + +compilemessages: ## compile translations + cd $(CURDIR); \ + $(PYTHON) $(project)/manage.py compilemessages; \ + +collectstatic: ## collect all static files + cd $(project);$(PYTHON) manage.py collectstatic --noinput + +##@ Development: build/tests -test: clean +test: clean ## launch tests cd $(project); $(PYTHON) manage.py test $(apps) -soft_test: clean +soft_test: clean ## launch tests without database regeneration cd $(project); $(PYTHON) manage.py test -k $(apps) -coverage: clean - cd $(project); coverage run --source="ishtar_common,archaeological_operations,\ - archaeological_context_records,archaeological_files,archaeological_finds,archaeological_warehouse,\ - archaeological_files_pdl" ./manage.py test $(apps) && coverage report - -build_gitlab: clean collectstatic +build_gitlab: clean collectstatic ## specific build for gitlab cd $(project); $(PYTHON) ./manage.py migrate -test_gitlab: build_gitlab +test_gitlab: build_gitlab ## cd $(project); $(PYTHON) manage.py test $(apps) soft_test_gitlab: build_gitlab cd $(project); $(PYTHON) manage.py -k test $(apps) +##@ Development: checks + +coverage: clean ## launch test coverage + cd $(project); coverage run --source="ishtar_common,archaeological_operations,\ + archaeological_context_records,archaeological_files,archaeological_finds,archaeological_warehouse,\ + archaeological_files_pdl" ./manage.py test $(apps) && coverage report + pep8: pep8 --filename=*.py --ignore=W --exclude="manage.py,settings.py,migrations" --statistics --repeat . @@ -75,53 +72,47 @@ pylint: pylint "$(CURDIR)/$$DIR" --ignore=.git,migrations --max-public-methods=50 --ignored-classes=Item.Meta --method-rgx='[a-z_][a-z0-9_]{2,40}$$'; \ done -migrate: - cd $(project); $(PYTHON) manage.py migrate +##@ Development: run shell: cd $(project);$(PYTHON) manage.py shell -run: +run: ## run test server cd $(project); $(PYTHON) manage.py runserver 0.0.0.0:8000 runcelery: celery -A example_project worker -l info -makemessages: - for DIR in $(apps); do \ - cd $(CURDIR)/$$DIR; \ - $(PYTHON) ../$(project)/manage.py makemessages --all; \ - msgfilter -i locale/fr/LC_MESSAGES/django.po sed -e d | sed -e "s/fuzzy//g" > locale/django.pot ;\ - done +##@ Development: translations -compilemessages: - for DIR in $(apps); do \ - cd $(CURDIR)/$$DIR; \ - $(PYTHON) ../$(project)/manage.py compilemessages; \ - done +makemessages: + cd $(CURDIR); \ + $(PYTHON) $(project)/manage.py makemessages --all; \ + #msgfilter -i locale/fr/LC_MESSAGES/django.po sed -e d | sed -e "s/fuzzy//g" > locale/django.pot ;\ -collectstatic: - cd $(project);$(PYTHON) manage.py collectstatic --noinput +##@ Development: database migrations: cd $(project);\ - for APP in $(apps); do \ + for APP in "overload_translation" $(apps); do \ echo "* makemigrations for "$$APP; \ $(PYTHON) ./manage.py makemigrations $$APP; \ done generate_doc: cd $(project);\ - $(PYTHON) manage.py graph_models --pydot -g -I "ImporterModel,ImporterType,ImporterDefault,ImporterDefaultValues,ImporterColumn,ValueFormater,Regexp,ImportTarget,FormaterType,Import" ishtar_common > /tmp/ishtar-imports.dot ;\ - dot -Tpng /tmp/ishtar-imports.dot -o ../docs/source/_static/db-imports.png + $(PYTHON) manage.py graph_models --pydot -g -I "ImporterModel,ImporterType,ImporterDefault,ImporterDefaultValues,ImporterColumn,Regexp,ImportTarget,FormaterType,Import" ishtar_common > /tmp/ishtar-imports.dot ;\ + dot -Tsvg /tmp/ishtar-imports.dot -o ../docs/source/_static/db-imports.svg rm /tmp/ishtar-imports.dot cd $(project);\ for APP in $(apps); do \ $(PYTHON) manage.py graph_models -g --pydot $$APP > /tmp/ishtar-$$APP.dot; \ - dot -Tpng /tmp/ishtar-$$APP.dot -o ../docs/source/_static/db-$$APP.png; \ + dot -Tsvg /tmp/ishtar-$$APP.dot -o ../docs/source/_static/db-$$APP.svg; \ rm /tmp/ishtar-$$APP.dot ; \ done +##@ Manage fixtures + fixtures: fixtures_auth fixtures_common fixtures_operations fixtures_context_records fixtures_finds fixtures_warehouse fixtures_files fixtures_auth: @@ -140,6 +131,7 @@ fixtures_common: fixtures_common_importers fixtures_spatialrefsystem ishtar_common.titletype \ ishtar_common.supporttype \ ishtar_common.format \ + ishtar_common.documenttemplate \ > '../ishtar_common/fixtures/initial_data-'$(default_data)'.json' fixtures_common_importers: @@ -234,11 +226,6 @@ fixtures_files: archaeological_files.permittype \ > '../archaeological_files/fixtures/initial_data-'$(default_data)'.json' -translations_push: makemessages - zanata-cli push --project-config zanata.xml --project-version $(branch_name) - -translations_pull: - zanata-cli pull --project-config zanata.xml --project-version $(branch_name) readme_md_to_rst: pandoc --from=markdown --to=rst --output=README.rst README.md @@ -274,3 +261,38 @@ push_install: clean sass: ./node_modules/node-sass/bin/node-sass scss/custom.scss --output-style compressed > ishtar_common/static/bootstrap/bootstrap.css + +sass_watch: + ./node_modules/node-sass/bin/node-sass --watch scss/custom.scss --output-style compressed > ishtar_common/static/bootstrap/bootstrap.css + +transition_migrate: + cd $(project); \ + $(PYTHON) manage.py migrate ishtar_common 0117 ; \ + $(PYTHON) manage.py migrate archaeological_files 0024 ; \ + $(PYTHON) manage.py migrate archaeological_operations 0075 ; \ + $(PYTHON) manage.py migrate archaeological_context_records 0056 ; \ + $(PYTHON) manage.py migrate archaeological_finds 0080 ; \ + $(PYTHON) manage.py migrate archaeological_warehouse 0044 ; \ + $(PYTHON) manage.py migrate --fake ishtar_common 0201 ; \ + $(PYTHON) manage.py migrate --fake archaeological_files 0101 ; \ + $(PYTHON) manage.py migrate --fake archaeological_operations 0102 ; \ + $(PYTHON) manage.py migrate --fake archaeological_context_records 0102 ; \ + $(PYTHON) manage.py migrate --fake archaeological_finds 0102 ; \ + $(PYTHON) manage.py migrate --fake archaeological_warehouse 0101 ; + +new_migration: + cd $(project); \ + $(PYTHON) manage.py migrate contenttypes ; \ + $(PYTHON) manage.py migrate admin ; \ + $(PYTHON) manage.py migrate auth ; \ + $(PYTHON) manage.py migrate authtoken ; \ + $(PYTHON) manage.py migrate registration ; \ + $(PYTHON) manage.py migrate sessions ; \ + $(PYTHON) manage.py migrate sites ; \ + $(PYTHON) manage.py migrate --fake ishtar_common 0117 ; \ + $(PYTHON) manage.py migrate --fake archaeological_files 0024 ; \ + $(PYTHON) manage.py migrate --fake archaeological_operations 0075 ; \ + $(PYTHON) manage.py migrate --fake archaeological_context_records 0056 ; \ + $(PYTHON) manage.py migrate --fake archaeological_finds 0080 ; \ + $(PYTHON) manage.py migrate --fake archaeological_warehouse 0044 ; \ + $(PYTHON) manage.py migrate ; diff --git a/archaeological_context_records/migrations/0101_squashed.py b/archaeological_context_records/migrations/0101_squashed.py new file mode 100644 index 000000000..911e4d47a --- /dev/null +++ b/archaeological_context_records/migrations/0101_squashed.py @@ -0,0 +1,343 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.27 on 2020-01-23 18:21 +from __future__ import unicode_literals + +import django.contrib.gis.db.models.fields +import django.contrib.postgres.fields.jsonb +import django.contrib.postgres.search +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import ishtar_common.models +import re +import uuid + + +class Migration(migrations.Migration): + dependencies = [ + ('archaeological_context_records', '0056_auto_20191216_1031'), + ] + + operations = [ + migrations.CreateModel( + name='RecordRelationView', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + options={ + 'db_table': 'record_relations', + 'permissions': [('view_recordrelation', 'Can view all record relations - view')], + 'managed': False, + }, + ), + migrations.CreateModel( + name='ActivityType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(verbose_name='Order')), + ], + options={ + 'verbose_name': 'Activity Type', + 'verbose_name_plural': 'Activity Types', + 'ordering': ('order',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='ContextRecord', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('relation_image', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated relation image (SVG)')), + ('relation_bitmap_image', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated relation image (PNG)')), + ('relation_dot', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated relation image (DOT)')), + ('relation_image_above', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated above relation image (SVG)')), + ('relation_dot_above', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated above relation image (DOT)')), + ('relation_bitmap_image_above', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated above relation image (PNG)')), + ('relation_image_below', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated below relation image (SVG)')), + ('relation_dot_below', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated below relation image (DOT)')), + ('relation_bitmap_image_below', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated below relation image (PNG)')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('qrcode', models.ImageField(blank=True, max_length=255, null=True, upload_to=ishtar_common.models.get_image_path)), + ('x', models.FloatField(blank=True, null=True, verbose_name='X')), + ('y', models.FloatField(blank=True, null=True, verbose_name='Y')), + ('z', models.FloatField(blank=True, null=True, verbose_name='Z')), + ('estimated_error_x', models.FloatField(blank=True, null=True, verbose_name='Estimated error for X')), + ('estimated_error_y', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Y')), + ('estimated_error_z', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Z')), + ('point', django.contrib.gis.db.models.fields.PointField(blank=True, dim=3, null=True, srid=4326, verbose_name='Point')), + ('point_2d', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point (2D)')), + ('point_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Point source')), + ('point_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Point source item')), + ('multi_polygon', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Multi polygon')), + ('multi_polygon_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Multi-polygon source')), + ('multi_polygon_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Multi polygon source item')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('external_id', models.TextField(blank=True, null=True, verbose_name='External ID')), + ('auto_external_id', models.BooleanField(default=False, verbose_name='External ID is set automatically')), + ('label', models.CharField(max_length=200, verbose_name='ID')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('comment', models.TextField(blank=True, null=True, verbose_name='General comment')), + ('opening_date', models.DateField(blank=True, null=True, verbose_name='Opening date')), + ('closing_date', models.DateField(blank=True, null=True, verbose_name='Closing date')), + ('length', models.FloatField(blank=True, null=True, verbose_name='Length (m)')), + ('width', models.FloatField(blank=True, null=True, verbose_name='Width (m)')), + ('thickness', models.FloatField(blank=True, null=True, verbose_name='Thickness (m)')), + ('diameter', models.FloatField(blank=True, null=True, verbose_name='Diameter (m)')), + ('depth', models.FloatField(blank=True, null=True, verbose_name='Depth (m)')), + ('depth_of_appearance', models.FloatField(blank=True, null=True, verbose_name='Depth of appearance (m)')), + ('location', models.TextField(blank=True, help_text='A short description of the location of the context record', null=True, verbose_name='Location')), + ('datings_comment', models.TextField(blank=True, null=True, verbose_name='Comment on datings')), + ('filling', models.TextField(blank=True, null=True, verbose_name='Filling')), + ('interpretation', models.TextField(blank=True, null=True, verbose_name='Interpretation')), + ('taq', models.IntegerField(blank=True, help_text='"Terminus Ante Quem" the context record can\'t have been created after this date', null=True, verbose_name='TAQ')), + ('taq_estimated', models.IntegerField(blank=True, help_text='Estimation of a "Terminus Ante Quem"', null=True, verbose_name='Estimated TAQ')), + ('tpq', models.IntegerField(blank=True, help_text='"Terminus Post Quem" the context record can\'t have been created before this date', null=True, verbose_name='TPQ')), + ('tpq_estimated', models.IntegerField(blank=True, help_text='Estimation of a "Terminus Post Quem"', null=True, verbose_name='Estimated TPQ')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('cached_periods', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached periods label')), + ('cached_related_context_records', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached related context records')), + ], + options={ + 'verbose_name': 'Context Record', + 'verbose_name_plural': 'Context Record', + 'ordering': ('cached_label',), + 'permissions': (('view_contextrecord', 'Can view all Context Records'), ('view_own_contextrecord', 'Can view own Context Record'), ('add_own_contextrecord', 'Can add own Context Record'), ('change_own_contextrecord', 'Can change own Context Record'), ('delete_own_contextrecord', 'Can delete own Context Record')), + }, + bases=(ishtar_common.models.BulkUpdatedItem, ishtar_common.models.DocumentItem, ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, ishtar_common.models.OwnPerms, ishtar_common.models.ValueGetter, ishtar_common.models.MainItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate, ishtar_common.models.ImageContainerModel), + ), + migrations.CreateModel( + name='Dating', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('start_date', models.IntegerField(blank=True, null=True, verbose_name='Start date')), + ('end_date', models.IntegerField(blank=True, null=True, verbose_name='End date')), + ('precise_dating', models.TextField(blank=True, null=True, verbose_name='Precise dating')), + ], + options={ + 'verbose_name': 'Dating', + 'verbose_name_plural': 'Datings', + }, + ), + migrations.CreateModel( + name='DatingQuality', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Dating quality type', + 'verbose_name_plural': 'Dating quality types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='DatingType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Dating type', + 'verbose_name_plural': 'Dating types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='DocumentationType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Documentation type', + 'verbose_name_plural': 'Documentation types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='ExcavationTechnicType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Excavation technique type', + 'verbose_name_plural': 'Excavation technique types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='HistoricalContextRecord', + fields=[ + ('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), + ('relation_image', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated relation image (SVG)')), + ('relation_bitmap_image', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated relation image (PNG)')), + ('relation_dot', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated relation image (DOT)')), + ('relation_image_above', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated above relation image (SVG)')), + ('relation_dot_above', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated above relation image (DOT)')), + ('relation_bitmap_image_above', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated above relation image (PNG)')), + ('relation_image_below', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated below relation image (SVG)')), + ('relation_dot_below', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated below relation image (DOT)')), + ('relation_bitmap_image_below', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated below relation image (PNG)')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('qrcode', models.TextField(blank=True, max_length=255, null=True)), + ('x', models.FloatField(blank=True, null=True, verbose_name='X')), + ('y', models.FloatField(blank=True, null=True, verbose_name='Y')), + ('z', models.FloatField(blank=True, null=True, verbose_name='Z')), + ('estimated_error_x', models.FloatField(blank=True, null=True, verbose_name='Estimated error for X')), + ('estimated_error_y', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Y')), + ('estimated_error_z', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Z')), + ('point', django.contrib.gis.db.models.fields.PointField(blank=True, dim=3, null=True, srid=4326, verbose_name='Point')), + ('point_2d', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point (2D)')), + ('point_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Point source')), + ('point_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Point source item')), + ('multi_polygon', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Multi polygon')), + ('multi_polygon_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Multi-polygon source')), + ('multi_polygon_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Multi polygon source item')), + ('last_modified', models.DateTimeField(blank=True, editable=False)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('external_id', models.TextField(blank=True, null=True, verbose_name='External ID')), + ('auto_external_id', models.BooleanField(default=False, verbose_name='External ID is set automatically')), + ('label', models.CharField(max_length=200, verbose_name='ID')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('comment', models.TextField(blank=True, null=True, verbose_name='General comment')), + ('opening_date', models.DateField(blank=True, null=True, verbose_name='Opening date')), + ('closing_date', models.DateField(blank=True, null=True, verbose_name='Closing date')), + ('length', models.FloatField(blank=True, null=True, verbose_name='Length (m)')), + ('width', models.FloatField(blank=True, null=True, verbose_name='Width (m)')), + ('thickness', models.FloatField(blank=True, null=True, verbose_name='Thickness (m)')), + ('diameter', models.FloatField(blank=True, null=True, verbose_name='Diameter (m)')), + ('depth', models.FloatField(blank=True, null=True, verbose_name='Depth (m)')), + ('depth_of_appearance', models.FloatField(blank=True, null=True, verbose_name='Depth of appearance (m)')), + ('location', models.TextField(blank=True, help_text='A short description of the location of the context record', null=True, verbose_name='Location')), + ('datings_comment', models.TextField(blank=True, null=True, verbose_name='Comment on datings')), + ('filling', models.TextField(blank=True, null=True, verbose_name='Filling')), + ('interpretation', models.TextField(blank=True, null=True, verbose_name='Interpretation')), + ('taq', models.IntegerField(blank=True, help_text='"Terminus Ante Quem" the context record can\'t have been created after this date', null=True, verbose_name='TAQ')), + ('taq_estimated', models.IntegerField(blank=True, help_text='Estimation of a "Terminus Ante Quem"', null=True, verbose_name='Estimated TAQ')), + ('tpq', models.IntegerField(blank=True, help_text='"Terminus Post Quem" the context record can\'t have been created before this date', null=True, verbose_name='TPQ')), + ('tpq_estimated', models.IntegerField(blank=True, help_text='Estimation of a "Terminus Post Quem"', null=True, verbose_name='Estimated TPQ')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('cached_periods', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached periods label')), + ('cached_related_context_records', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached related context records')), + ('history_id', models.AutoField(primary_key=True, serialize=False)), + ('history_date', models.DateTimeField()), + ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), + ('activity', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_context_records.ActivityType')), + ], + options={ + 'verbose_name': 'historical Context Record', + 'ordering': ('-history_date', '-history_id'), + 'get_latest_by': 'history_date', + }, + ), + migrations.CreateModel( + name='IdentificationType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(verbose_name='Order')), + ], + options={ + 'verbose_name': 'Identification Type', + 'verbose_name_plural': 'Identification Types', + 'ordering': ('order', 'label'), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='RecordRelations', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('left_record', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='right_relations', to='archaeological_context_records.ContextRecord')), + ], + options={ + 'verbose_name': 'Record relation', + 'verbose_name_plural': 'Record relations', + 'permissions': [('view_recordrelation', 'Can view all Context record relations')], + }, + bases=(ishtar_common.models.GeneralRecordRelations, models.Model), + ), + migrations.CreateModel( + name='RelationType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=1, verbose_name='Order')), + ('symmetrical', models.BooleanField(verbose_name='Symmetrical')), + ('tiny_label', models.CharField(blank=True, max_length=50, null=True, verbose_name='Tiny label')), + ('logical_relation', models.CharField(blank=True, choices=[('above', 'Above'), ('below', 'Below'), ('equal', 'Equal')], max_length=10, null=True, verbose_name='Logical relation')), + ('inverse_relation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='archaeological_context_records.RelationType', verbose_name='Inverse relation')), + ], + options={ + 'verbose_name': 'Relation type', + 'verbose_name_plural': 'Relation types', + 'ordering': ('order', 'label'), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='Unit', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(verbose_name='Order')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_context_records.Unit', verbose_name='Parent context record type')), + ], + options={ + 'verbose_name': 'Context record Type', + 'verbose_name_plural': 'Context record Types', + 'ordering': ('order', 'label'), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.AddField( + model_name='recordrelations', + name='relation_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_context_records.RelationType'), + ), + migrations.AddField( + model_name='recordrelations', + name='right_record', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='left_relations', to='archaeological_context_records.ContextRecord'), + ), + ] diff --git a/archaeological_context_records/migrations/0102_link_apps.py b/archaeological_context_records/migrations/0102_link_apps.py new file mode 100644 index 000000000..cf95824de --- /dev/null +++ b/archaeological_context_records/migrations/0102_link_apps.py @@ -0,0 +1,195 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.27 on 2020-01-23 18:21 +from __future__ import unicode_literals + +from django.conf import settings +import django.contrib.postgres.indexes +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_operations', '0101_squashed'), + ('ishtar_common', '0201_squashed'), + ('archaeological_context_records', '0101_squashed'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name='historicalcontextrecord', + name='archaeological_site', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_operations.ArchaeologicalSite'), + ), + migrations.AddField( + model_name='historicalcontextrecord', + name='excavation_technic', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_context_records.ExcavationTechnicType'), + ), + migrations.AddField( + model_name='historicalcontextrecord', + name='history_creator', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalcontextrecord', + name='history_modifier', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalcontextrecord', + name='history_user', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalcontextrecord', + name='identification', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_context_records.IdentificationType'), + ), + migrations.AddField( + model_name='historicalcontextrecord', + name='lock_user', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalcontextrecord', + name='main_image', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Document'), + ), + migrations.AddField( + model_name='historicalcontextrecord', + name='operation', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_operations.Operation'), + ), + migrations.AddField( + model_name='historicalcontextrecord', + name='parcel', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_operations.Parcel'), + ), + migrations.AddField( + model_name='historicalcontextrecord', + name='spatial_reference_system', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.SpatialReferenceSystem'), + ), + migrations.AddField( + model_name='historicalcontextrecord', + name='town', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Town'), + ), + migrations.AddField( + model_name='historicalcontextrecord', + name='unit', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_context_records.Unit'), + ), + migrations.AddField( + model_name='dating', + name='dating_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_context_records.DatingType', verbose_name='Dating type'), + ), + migrations.AddField( + model_name='dating', + name='period', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_operations.Period', verbose_name='Period'), + ), + migrations.AddField( + model_name='dating', + name='quality', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_context_records.DatingQuality', verbose_name='Quality'), + ), + migrations.AddField( + model_name='contextrecord', + name='activity', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_context_records.ActivityType', verbose_name='Activity'), + ), + migrations.AddField( + model_name='contextrecord', + name='archaeological_site', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='context_records', to='archaeological_operations.ArchaeologicalSite', verbose_name='Archaeological site'), + ), + migrations.AddField( + model_name='contextrecord', + name='datings', + field=models.ManyToManyField(related_name='context_records', to='archaeological_context_records.Dating'), + ), + migrations.AddField( + model_name='contextrecord', + name='documentations', + field=models.ManyToManyField(blank=True, to='archaeological_context_records.DocumentationType'), + ), + migrations.AddField( + model_name='contextrecord', + name='documents', + field=models.ManyToManyField(blank=True, related_name='context_records', to='ishtar_common.Document', verbose_name='Documents'), + ), + migrations.AddField( + model_name='contextrecord', + name='excavation_technic', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_context_records.ExcavationTechnicType', verbose_name='Excavation technique'), + ), + migrations.AddField( + model_name='contextrecord', + name='history_creator', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator'), + ), + migrations.AddField( + model_name='contextrecord', + name='history_modifier', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor'), + ), + migrations.AddField( + model_name='contextrecord', + name='identification', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_context_records.IdentificationType', verbose_name='Identification'), + ), + migrations.AddField( + model_name='contextrecord', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_archaeological_context_records_contextrecord', to='ishtar_common.Import'), + ), + migrations.AddField( + model_name='contextrecord', + name='lock_user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), + ), + migrations.AddField( + model_name='contextrecord', + name='main_image', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='main_image_context_records', to='ishtar_common.Document', verbose_name='Main image'), + ), + migrations.AddField( + model_name='contextrecord', + name='operation', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='context_record', to='archaeological_operations.Operation', verbose_name='Operation'), + ), + migrations.AddField( + model_name='contextrecord', + name='parcel', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='context_record', to='archaeological_operations.Parcel', verbose_name='Parcel'), + ), + migrations.AddField( + model_name='contextrecord', + name='related_context_records', + field=models.ManyToManyField(blank=True, through='archaeological_context_records.RecordRelations', to='archaeological_context_records.ContextRecord'), + ), + migrations.AddField( + model_name='contextrecord', + name='spatial_reference_system', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.SpatialReferenceSystem', verbose_name='Spatial Reference System'), + ), + migrations.AddField( + model_name='contextrecord', + name='town', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='context_record', to='ishtar_common.Town', verbose_name='Town'), + ), + migrations.AddField( + model_name='contextrecord', + name='unit', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='archaeological_context_records.Unit', verbose_name='Context record type'), + ), + migrations.AddIndex( + model_name='contextrecord', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='archaeologi_data_1c3119_gin'), + ), + ] diff --git a/archaeological_files/migrations/0101_squashed.py b/archaeological_files/migrations/0101_squashed.py new file mode 100644 index 000000000..caa6d046e --- /dev/null +++ b/archaeological_files/migrations/0101_squashed.py @@ -0,0 +1,317 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.27 on 2020-01-23 18:21 +from __future__ import unicode_literals + +import archaeological_operations.models +import datetime +from django.conf import settings +import django.contrib.postgres.fields.jsonb +import django.contrib.postgres.indexes +import django.contrib.postgres.search +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import ishtar_common.models +import ishtar_common.utils +import re + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('ishtar_common', '0201_squashed'), + ('archaeological_files', '0024_auto_20191216_1034') + ] + + operations = [ + migrations.CreateModel( + name='FileByDepartment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + options={ + 'db_table': 'file_department', + 'managed': False, + }, + ), + migrations.CreateModel( + name='File', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('year', models.IntegerField(default=ishtar_common.utils.get_current_year, verbose_name='Year')), + ('numeric_reference', models.IntegerField(blank=True, null=True, verbose_name='Numeric reference')), + ('internal_reference', models.CharField(blank=True, max_length=60, null=True, verbose_name='Internal reference')), + ('external_id', models.CharField(blank=True, max_length=120, null=True, verbose_name='External ID')), + ('auto_external_id', models.BooleanField(default=False, verbose_name='External ID is set automatically')), + ('name', models.TextField(blank=True, null=True, verbose_name='Name')), + ('raw_general_contractor', models.CharField(blank=True, max_length=200, null=True, verbose_name='General contractor (raw)')), + ('raw_town_planning_service', models.CharField(blank=True, max_length=200, null=True, verbose_name='Planning service (raw)')), + ('permit_reference', models.TextField(blank=True, null=True, verbose_name='Permit reference')), + ('end_date', models.DateField(blank=True, null=True, verbose_name='Closing date')), + ('creation_date', models.DateField(blank=True, default=datetime.date.today, null=True, verbose_name='Creation date')), + ('reception_date', models.DateField(blank=True, null=True, verbose_name='Reception date')), + ('instruction_deadline', models.DateField(blank=True, null=True, verbose_name='Instruction deadline')), + ('total_surface', models.FloatField(blank=True, null=True, verbose_name='Total surface (m2)')), + ('total_developed_surface', models.FloatField(blank=True, null=True, verbose_name='Total developed surface (m2)')), + ('locality', models.CharField(blank=True, max_length=100, null=True, verbose_name='Locality')), + ('address', models.TextField(blank=True, null=True, verbose_name='Main address')), + ('postal_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Main address - postal code')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('research_comment', models.TextField(blank=True, null=True, verbose_name='Research archaeology comment')), + ('classified_area', models.NullBooleanField(verbose_name='Classified area')), + ('protected_area', models.NullBooleanField(verbose_name='Protected area')), + ('cira_advised', models.NullBooleanField(verbose_name='Passage en CIRA')), + ('mh_register', models.NullBooleanField(verbose_name='Sur Monument Historique classé')), + ('mh_listing', models.NullBooleanField(verbose_name='Sur Monument Historique inscrit')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('imported_line', models.TextField(blank=True, null=True, verbose_name='Imported line')), + ('corporation_general_contractor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='general_contractor_files', to='ishtar_common.Organization', verbose_name='General contractor organization')), + ('departments', models.ManyToManyField(blank=True, to='ishtar_common.Department', verbose_name='Departments')), + ('documents', models.ManyToManyField(blank=True, related_name='files', to='ishtar_common.Document', verbose_name='Documents')), + ], + options={ + 'verbose_name': 'Archaeological file', + 'verbose_name_plural': 'Archaeological files', + 'ordering': ('cached_label',), + 'permissions': (('view_file', 'Can view all Archaeological files'), ('view_own_file', 'Can view own Archaeological file'), ('add_own_file', 'Can add own Archaeological file'), ('change_own_file', 'Can change own Archaeological file'), ('delete_own_file', 'Can delete own Archaeological file'), ('close_file', 'Can close File')), + }, + bases=(archaeological_operations.models.ClosedItem, ishtar_common.models.DocumentItem, ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate, ishtar_common.models.OwnPerms, ishtar_common.models.ValueGetter, ishtar_common.models.ShortMenuItem, ishtar_common.models.DashboardFormItem), + ), + migrations.CreateModel( + name='FileType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Archaeological file type', + 'verbose_name_plural': 'Archaeological file types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='HistoricalFile', + fields=[ + ('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(blank=True, editable=False)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('year', models.IntegerField(default=ishtar_common.utils.get_current_year, verbose_name='Year')), + ('numeric_reference', models.IntegerField(blank=True, null=True, verbose_name='Numeric reference')), + ('internal_reference', models.CharField(blank=True, max_length=60, null=True, verbose_name='Internal reference')), + ('external_id', models.CharField(blank=True, max_length=120, null=True, verbose_name='External ID')), + ('auto_external_id', models.BooleanField(default=False, verbose_name='External ID is set automatically')), + ('name', models.TextField(blank=True, null=True, verbose_name='Name')), + ('raw_general_contractor', models.CharField(blank=True, max_length=200, null=True, verbose_name='General contractor (raw)')), + ('raw_town_planning_service', models.CharField(blank=True, max_length=200, null=True, verbose_name='Planning service (raw)')), + ('permit_reference', models.TextField(blank=True, null=True, verbose_name='Permit reference')), + ('end_date', models.DateField(blank=True, null=True, verbose_name='Closing date')), + ('creation_date', models.DateField(blank=True, default=datetime.date.today, null=True, verbose_name='Creation date')), + ('reception_date', models.DateField(blank=True, null=True, verbose_name='Reception date')), + ('instruction_deadline', models.DateField(blank=True, null=True, verbose_name='Instruction deadline')), + ('total_surface', models.FloatField(blank=True, null=True, verbose_name='Total surface (m2)')), + ('total_developed_surface', models.FloatField(blank=True, null=True, verbose_name='Total developed surface (m2)')), + ('locality', models.CharField(blank=True, max_length=100, null=True, verbose_name='Locality')), + ('address', models.TextField(blank=True, null=True, verbose_name='Main address')), + ('postal_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Main address - postal code')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('research_comment', models.TextField(blank=True, null=True, verbose_name='Research archaeology comment')), + ('classified_area', models.NullBooleanField(verbose_name='Classified area')), + ('protected_area', models.NullBooleanField(verbose_name='Protected area')), + ('cira_advised', models.NullBooleanField(verbose_name='Passage en CIRA')), + ('mh_register', models.NullBooleanField(verbose_name='Sur Monument Historique classé')), + ('mh_listing', models.NullBooleanField(verbose_name='Sur Monument Historique inscrit')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('imported_line', models.TextField(blank=True, null=True, verbose_name='Imported line')), + ('history_id', models.AutoField(primary_key=True, serialize=False)), + ('history_date', models.DateTimeField()), + ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), + ('corporation_general_contractor', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Organization')), + ('file_type', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_files.FileType')), + ('general_contractor', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person')), + ('history_creator', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), + ('history_modifier', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), + ('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ('in_charge', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person')), + ('lock_user', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), + ('main_town', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Town')), + ('organization', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Organization')), + ], + options={ + 'verbose_name': 'historical Archaeological file', + 'ordering': ('-history_date', '-history_id'), + 'get_latest_by': 'history_date', + }, + ), + migrations.CreateModel( + name='PermitType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Permit type', + 'verbose_name_plural': 'Permit types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='SaisineType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('delay', models.IntegerField(default=30, verbose_name='Delay (in days)')), + ], + options={ + 'verbose_name': 'Type de saisine', + 'verbose_name_plural': 'Types de saisine', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model, ishtar_common.models.ValueGetter), + ), + migrations.AddField( + model_name='historicalfile', + name='permit_type', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_files.PermitType'), + ), + migrations.AddField( + model_name='historicalfile', + name='planning_service', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Organization'), + ), + migrations.AddField( + model_name='historicalfile', + name='related_file', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_files.File'), + ), + migrations.AddField( + model_name='historicalfile', + name='requested_operation_type', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.OperationType'), + ), + migrations.AddField( + model_name='historicalfile', + name='responsible_town_planning_service', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person'), + ), + migrations.AddField( + model_name='historicalfile', + name='saisine_type', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_files.SaisineType'), + ), + migrations.AddField( + model_name='historicalfile', + name='scientist', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person'), + ), + migrations.AddField( + model_name='file', + name='file_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_files.FileType', verbose_name='File type'), + ), + migrations.AddField( + model_name='file', + name='general_contractor', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='general_contractor_files', to='ishtar_common.Person', verbose_name='General contractor'), + ), + migrations.AddField( + model_name='file', + name='history_creator', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator'), + ), + migrations.AddField( + model_name='file', + name='history_modifier', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor'), + ), + migrations.AddField( + model_name='file', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_archaeological_files_file', to='ishtar_common.Import'), + ), + migrations.AddField( + model_name='file', + name='in_charge', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='file_responsability', to='ishtar_common.Person', verbose_name='Person in charge'), + ), + migrations.AddField( + model_name='file', + name='lock_user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), + ), + migrations.AddField( + model_name='file', + name='main_town', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='file_main', to='ishtar_common.Town', verbose_name='Main town'), + ), + migrations.AddField( + model_name='file', + name='organization', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='files', to='ishtar_common.Organization', verbose_name='Organization'), + ), + migrations.AddField( + model_name='file', + name='permit_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_files.PermitType', verbose_name='Permit type'), + ), + migrations.AddField( + model_name='file', + name='planning_service', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='planning_service_files', to='ishtar_common.Organization', verbose_name='Planning service organization'), + ), + migrations.AddField( + model_name='file', + name='related_file', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_files.File', verbose_name='Related file'), + ), + migrations.AddField( + model_name='file', + name='requested_operation_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ishtar_common.OperationType', verbose_name='Requested operation type'), + ), + migrations.AddField( + model_name='file', + name='responsible_town_planning_service', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='responsible_town_planning_service_files', to='ishtar_common.Person', verbose_name='Responsible for planning service'), + ), + migrations.AddField( + model_name='file', + name='saisine_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_files.SaisineType', verbose_name='Type de saisine'), + ), + migrations.AddField( + model_name='file', + name='scientist', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='scientist', to='ishtar_common.Person', verbose_name='Scientist in charge'), + ), + migrations.AddField( + model_name='file', + name='towns', + field=models.ManyToManyField(blank=True, related_name='file', to='ishtar_common.Town', verbose_name='Towns'), + ), + migrations.AddIndex( + model_name='file', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='archaeologi_data_44e442_gin'), + ), + ] diff --git a/archaeological_finds/migrations/0101_squashed.py b/archaeological_finds/migrations/0101_squashed.py new file mode 100644 index 000000000..069982355 --- /dev/null +++ b/archaeological_finds/migrations/0101_squashed.py @@ -0,0 +1,780 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.27 on 2020-01-23 18:21 +from __future__ import unicode_literals + +import archaeological_operations.models +import datetime +from django.conf import settings +import django.contrib.gis.db.models.fields +import django.contrib.postgres.fields.jsonb +import django.contrib.postgres.search +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import ishtar_common.models +import ishtar_common.utils +import re +import uuid + + +class Migration(migrations.Migration): + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('ishtar_common', '0201_squashed'), + ('archaeological_finds', '0080_auto_20191216_1040'), + ] + + operations = [ + migrations.CreateModel( + name='AlterationCauseType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Alteration cause type', + 'verbose_name_plural': 'Alteration cause types', + 'ordering': ('parent__label', 'label'), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='AlterationType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Alteration type', + 'verbose_name_plural': 'Alteration types', + 'ordering': ('parent__label', 'label'), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='BaseFind', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('x', models.FloatField(blank=True, null=True, verbose_name='X')), + ('y', models.FloatField(blank=True, null=True, verbose_name='Y')), + ('z', models.FloatField(blank=True, null=True, verbose_name='Z')), + ('estimated_error_x', models.FloatField(blank=True, null=True, verbose_name='Estimated error for X')), + ('estimated_error_y', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Y')), + ('estimated_error_z', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Z')), + ('point', django.contrib.gis.db.models.fields.PointField(blank=True, dim=3, null=True, srid=4326, verbose_name='Point')), + ('point_2d', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point (2D)')), + ('point_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Point source')), + ('point_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Point source item')), + ('multi_polygon', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Multi polygon')), + ('multi_polygon_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Multi-polygon source')), + ('multi_polygon_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Multi polygon source item')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('label', models.TextField(verbose_name='Free ID')), + ('external_id', models.TextField(blank=True, null=True, verbose_name='External ID')), + ('auto_external_id', models.BooleanField(default=False, verbose_name='External ID is set automatically')), + ('excavation_id', models.TextField(blank=True, null=True, verbose_name='Excavation ID')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('special_interest', models.CharField(blank=True, max_length=120, null=True, verbose_name='Special interest')), + ('discovery_date', models.DateField(blank=True, null=True, verbose_name='Discovery date (exact or TPQ)')), + ('discovery_date_taq', models.DateField(blank=True, null=True, verbose_name='Discovery date (TAQ)')), + ('index', models.IntegerField(default=0, verbose_name='Index')), + ('material_index', models.IntegerField(default=0, verbose_name='Material index')), + ('topographic_localisation', models.CharField(blank=True, max_length=120, null=True, verbose_name='Point of topographic reference')), + ('line', django.contrib.gis.db.models.fields.LineStringField(blank=True, null=True, srid=4326, verbose_name='Line')), + ('cache_short_id', models.TextField(blank=True, db_index=True, help_text='Cached value - do not edit', null=True, verbose_name='Short ID')), + ('cache_complete_id', models.TextField(blank=True, db_index=True, help_text='Cached value - do not edit', null=True, verbose_name='Complete ID')), + ], + options={ + 'verbose_name': 'Base find', + 'verbose_name_plural': 'Base finds', + 'permissions': (('view_basefind', 'Can view all Base finds'), ('view_own_basefind', 'Can view own Base find'), ('add_own_basefind', 'Can add own Base find'), ('change_own_basefind', 'Can change own Base find'), ('delete_own_basefind', 'Can delete own Base find')), + }, + bases=(ishtar_common.models.BulkUpdatedItem, ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate, ishtar_common.models.OwnPerms, ishtar_common.models.ValueGetter), + ), + migrations.CreateModel( + name='BatchType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=10, verbose_name='Order')), + ], + options={ + 'verbose_name': 'Batch type', + 'verbose_name_plural': 'Batch types', + 'ordering': ('order',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='CheckedType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=10, verbose_name='Order')), + ], + options={ + 'verbose_name': 'Checked type', + 'verbose_name_plural': 'Checked types', + 'ordering': ('order',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='CommunicabilityType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Communicability type', + 'verbose_name_plural': 'Communicability types', + 'ordering': ('parent__label', 'label'), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='ConservatoryState', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=10, verbose_name='Order')), + ], + options={ + 'verbose_name': 'Conservatory state type', + 'verbose_name_plural': 'Conservatory state types', + 'ordering': ('order', 'label'), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='Find', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('qrcode', models.ImageField(blank=True, max_length=255, null=True, upload_to=ishtar_common.models.get_image_path)), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('external_id', models.TextField(blank=True, null=True, verbose_name='External ID')), + ('auto_external_id', models.BooleanField(default=False, verbose_name='External ID is set automatically')), + ('seal_number', models.TextField(blank=True, null=True, verbose_name='Seal number')), + ('order', models.IntegerField(default=1, verbose_name='Order')), + ('label', models.TextField(verbose_name='Free ID')), + ('denomination', models.TextField(blank=True, null=True, verbose_name='Denomination')), + ('museum_id', models.TextField(blank=True, null=True, verbose_name='Museum ID')), + ('laboratory_id', models.TextField(blank=True, null=True, verbose_name='Laboratory ID')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('decoration', models.TextField(blank=True, null=True, verbose_name='Decoration')), + ('inscription', models.TextField(blank=True, null=True, verbose_name='Inscription')), + ('manufacturing_place', models.TextField(blank=True, null=True, verbose_name='Manufacturing place')), + ('material_comment', models.TextField(blank=True, null=True, verbose_name='Comment on the material')), + ('volume', models.FloatField(blank=True, null=True, verbose_name='Volume (l)')), + ('weight', models.FloatField(blank=True, null=True, verbose_name='Weight')), + ('weight_unit', models.CharField(blank=True, choices=[('g', 'g'), ('kg', 'kg')], max_length=4, null=True, verbose_name='Weight unit')), + ('find_number', models.IntegerField(blank=True, null=True, verbose_name='Find number')), + ('is_complete', models.NullBooleanField(verbose_name='Is complete?')), + ('min_number_of_individuals', models.IntegerField(blank=True, null=True, verbose_name='Minimum number of individuals (MNI)')), + ('length', models.FloatField(blank=True, null=True, verbose_name='Length (cm)')), + ('width', models.FloatField(blank=True, null=True, verbose_name='Width (cm)')), + ('height', models.FloatField(blank=True, null=True, verbose_name='Height (cm)')), + ('diameter', models.FloatField(blank=True, null=True, verbose_name='Diameter (cm)')), + ('circumference', models.FloatField(blank=True, null=True, verbose_name='Circumference (cm)')), + ('thickness', models.FloatField(blank=True, null=True, verbose_name='Thickness (cm)')), + ('clutter_long_side', models.FloatField(blank=True, null=True, verbose_name='Clutter - long side (cm)')), + ('clutter_short_side', models.FloatField(blank=True, null=True, verbose_name='Clutter - short side (cm)')), + ('clutter_height', models.FloatField(blank=True, null=True, verbose_name='Clutter - height (cm)')), + ('dimensions_comment', models.TextField(blank=True, null=True, verbose_name='Dimensions comment')), + ('mark', models.TextField(blank=True, null=True, verbose_name='Mark')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('dating_comment', models.TextField(blank=True, null=True, verbose_name='Comment on dating')), + ('previous_id', models.TextField(blank=True, null=True, verbose_name='Previous ID')), + ('index', models.IntegerField(default=0, verbose_name='Index')), + ('check_date', models.DateField(default=datetime.date.today, verbose_name='Check date')), + ('estimated_value', models.FloatField(blank=True, null=True, verbose_name='Estimated value')), + ('conservatory_comment', models.TextField(blank=True, null=True, verbose_name='Conservatory comment')), + ('insurance_value', models.FloatField(blank=True, null=True, verbose_name='Insurance value')), + ('appraisal_date', models.DateField(blank=True, null=True, verbose_name='Appraisal date')), + ('public_description', models.TextField(blank=True, null=True, verbose_name='Public description')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('cached_periods', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached periods label')), + ('cached_object_types', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached object types label')), + ('cached_materials', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached material types label')), + ], + options={ + 'verbose_name': 'Find', + 'verbose_name_plural': 'Finds', + 'ordering': ('cached_label',), + 'permissions': (('view_find', 'Can view all Finds'), ('view_own_find', 'Can view own Find'), ('add_own_find', 'Can add own Find'), ('change_own_find', 'Can change own Find'), ('delete_own_find', 'Can delete own Find')), + }, + bases=(ishtar_common.models.BulkUpdatedItem, ishtar_common.models.ValueGetter, ishtar_common.models.DocumentItem, ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate, ishtar_common.models.ImageContainerModel, ishtar_common.models.OwnPerms, ishtar_common.models.MainItem), + ), + migrations.CreateModel( + name='FindBasket', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('label', models.CharField(max_length=1000, verbose_name='Label')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('slug', models.SlugField(blank=True, null=True, verbose_name='Slug')), + ('public', models.BooleanField(default=False, verbose_name='Public')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Basket', + 'ordering': ('label',), + 'permissions': (('view_find', 'Can view all Finds'), ('view_own_find', 'Can view own Find')), + }, + bases=(models.Model, ishtar_common.models.OwnPerms, ishtar_common.models.MainItem, ishtar_common.models.ValueGetter, ishtar_common.models.TemplateItem), + ), + migrations.CreateModel( + name='HistoricalBaseFind', + fields=[ + ('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('x', models.FloatField(blank=True, null=True, verbose_name='X')), + ('y', models.FloatField(blank=True, null=True, verbose_name='Y')), + ('z', models.FloatField(blank=True, null=True, verbose_name='Z')), + ('estimated_error_x', models.FloatField(blank=True, null=True, verbose_name='Estimated error for X')), + ('estimated_error_y', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Y')), + ('estimated_error_z', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Z')), + ('point', django.contrib.gis.db.models.fields.PointField(blank=True, dim=3, null=True, srid=4326, verbose_name='Point')), + ('point_2d', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point (2D)')), + ('point_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Point source')), + ('point_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Point source item')), + ('multi_polygon', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Multi polygon')), + ('multi_polygon_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Multi-polygon source')), + ('multi_polygon_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Multi polygon source item')), + ('last_modified', models.DateTimeField(blank=True, editable=False)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('label', models.TextField(verbose_name='Free ID')), + ('external_id', models.TextField(blank=True, null=True, verbose_name='External ID')), + ('auto_external_id', models.BooleanField(default=False, verbose_name='External ID is set automatically')), + ('excavation_id', models.TextField(blank=True, null=True, verbose_name='Excavation ID')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('special_interest', models.CharField(blank=True, max_length=120, null=True, verbose_name='Special interest')), + ('discovery_date', models.DateField(blank=True, null=True, verbose_name='Discovery date (exact or TPQ)')), + ('discovery_date_taq', models.DateField(blank=True, null=True, verbose_name='Discovery date (TAQ)')), + ('index', models.IntegerField(default=0, verbose_name='Index')), + ('material_index', models.IntegerField(default=0, verbose_name='Material index')), + ('topographic_localisation', models.CharField(blank=True, max_length=120, null=True, verbose_name='Point of topographic reference')), + ('line', django.contrib.gis.db.models.fields.LineStringField(blank=True, null=True, srid=4326, verbose_name='Line')), + ('cache_short_id', models.TextField(blank=True, db_index=True, help_text='Cached value - do not edit', null=True, verbose_name='Short ID')), + ('cache_complete_id', models.TextField(blank=True, db_index=True, help_text='Cached value - do not edit', null=True, verbose_name='Complete ID')), + ('history_id', models.AutoField(primary_key=True, serialize=False)), + ('history_date', models.DateTimeField()), + ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), + ], + options={ + 'verbose_name': 'historical Base find', + 'ordering': ('-history_date', '-history_id'), + 'get_latest_by': 'history_date', + }, + ), + migrations.CreateModel( + name='HistoricalFind', + fields=[ + ('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('qrcode', models.TextField(blank=True, max_length=255, null=True)), + ('last_modified', models.DateTimeField(blank=True, editable=False)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('external_id', models.TextField(blank=True, null=True, verbose_name='External ID')), + ('auto_external_id', models.BooleanField(default=False, verbose_name='External ID is set automatically')), + ('seal_number', models.TextField(blank=True, null=True, verbose_name='Seal number')), + ('order', models.IntegerField(default=1, verbose_name='Order')), + ('label', models.TextField(verbose_name='Free ID')), + ('denomination', models.TextField(blank=True, null=True, verbose_name='Denomination')), + ('museum_id', models.TextField(blank=True, null=True, verbose_name='Museum ID')), + ('laboratory_id', models.TextField(blank=True, null=True, verbose_name='Laboratory ID')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('decoration', models.TextField(blank=True, null=True, verbose_name='Decoration')), + ('inscription', models.TextField(blank=True, null=True, verbose_name='Inscription')), + ('manufacturing_place', models.TextField(blank=True, null=True, verbose_name='Manufacturing place')), + ('material_comment', models.TextField(blank=True, null=True, verbose_name='Comment on the material')), + ('volume', models.FloatField(blank=True, null=True, verbose_name='Volume (l)')), + ('weight', models.FloatField(blank=True, null=True, verbose_name='Weight')), + ('weight_unit', models.CharField(blank=True, choices=[('g', 'g'), ('kg', 'kg')], max_length=4, null=True, verbose_name='Weight unit')), + ('find_number', models.IntegerField(blank=True, null=True, verbose_name='Find number')), + ('is_complete', models.NullBooleanField(verbose_name='Is complete?')), + ('min_number_of_individuals', models.IntegerField(blank=True, null=True, verbose_name='Minimum number of individuals (MNI)')), + ('length', models.FloatField(blank=True, null=True, verbose_name='Length (cm)')), + ('width', models.FloatField(blank=True, null=True, verbose_name='Width (cm)')), + ('height', models.FloatField(blank=True, null=True, verbose_name='Height (cm)')), + ('diameter', models.FloatField(blank=True, null=True, verbose_name='Diameter (cm)')), + ('circumference', models.FloatField(blank=True, null=True, verbose_name='Circumference (cm)')), + ('thickness', models.FloatField(blank=True, null=True, verbose_name='Thickness (cm)')), + ('clutter_long_side', models.FloatField(blank=True, null=True, verbose_name='Clutter - long side (cm)')), + ('clutter_short_side', models.FloatField(blank=True, null=True, verbose_name='Clutter - short side (cm)')), + ('clutter_height', models.FloatField(blank=True, null=True, verbose_name='Clutter - height (cm)')), + ('dimensions_comment', models.TextField(blank=True, null=True, verbose_name='Dimensions comment')), + ('mark', models.TextField(blank=True, null=True, verbose_name='Mark')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('dating_comment', models.TextField(blank=True, null=True, verbose_name='Comment on dating')), + ('previous_id', models.TextField(blank=True, null=True, verbose_name='Previous ID')), + ('index', models.IntegerField(default=0, verbose_name='Index')), + ('check_date', models.DateField(default=datetime.date.today, verbose_name='Check date')), + ('estimated_value', models.FloatField(blank=True, null=True, verbose_name='Estimated value')), + ('conservatory_comment', models.TextField(blank=True, null=True, verbose_name='Conservatory comment')), + ('insurance_value', models.FloatField(blank=True, null=True, verbose_name='Insurance value')), + ('appraisal_date', models.DateField(blank=True, null=True, verbose_name='Appraisal date')), + ('public_description', models.TextField(blank=True, null=True, verbose_name='Public description')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('cached_periods', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached periods label')), + ('cached_object_types', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached object types label')), + ('cached_materials', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached material types label')), + ('history_id', models.AutoField(primary_key=True, serialize=False)), + ('history_date', models.DateTimeField()), + ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), + ], + options={ + 'verbose_name': 'historical Find', + 'ordering': ('-history_date', '-history_id'), + 'get_latest_by': 'history_date', + }, + ), + migrations.CreateModel( + name='HistoricalTreatment', + fields=[ + ('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), + ('image', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=255, null=True)), + ('thumbnail', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=255, null=True)), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(blank=True, editable=False)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('label', models.CharField(blank=True, max_length=200, null=True, verbose_name='Label')), + ('other_reference', models.CharField(blank=True, max_length=200, null=True, verbose_name='Other ref.')), + ('year', models.IntegerField(default=ishtar_common.utils.get_current_year, verbose_name='Year')), + ('index', models.IntegerField(default=1, verbose_name='Index')), + ('executed', models.BooleanField(default=False, verbose_name='Treatment have been executed')), + ('external_id', models.CharField(blank=True, max_length=200, null=True, verbose_name='External ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('goal', models.TextField(blank=True, null=True, verbose_name='Goal')), + ('start_date', models.DateField(blank=True, null=True, verbose_name='Start date')), + ('end_date', models.DateField(blank=True, null=True, verbose_name='Closing date')), + ('creation_date', models.DateTimeField(default=datetime.datetime.now)), + ('estimated_cost', models.FloatField(blank=True, null=True, verbose_name='Estimated cost')), + ('quoted_cost', models.FloatField(blank=True, null=True, verbose_name='Quoted cost')), + ('realized_cost', models.FloatField(blank=True, null=True, verbose_name='Realized cost')), + ('insurance_cost', models.FloatField(blank=True, null=True, verbose_name='Insurance cost')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('history_id', models.AutoField(primary_key=True, serialize=False)), + ('history_date', models.DateTimeField()), + ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), + ], + options={ + 'verbose_name': 'historical Treatment', + 'ordering': ('-history_date', '-history_id'), + 'get_latest_by': 'history_date', + }, + ), + migrations.CreateModel( + name='HistoricalTreatmentFile', + fields=[ + ('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(blank=True, editable=False)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('year', models.IntegerField(default=ishtar_common.utils.get_current_year, verbose_name='Year')), + ('index', models.IntegerField(default=1, verbose_name='Index')), + ('internal_reference', models.CharField(blank=True, max_length=200, null=True, verbose_name='Internal reference')), + ('external_id', models.CharField(blank=True, max_length=200, null=True, verbose_name='External ID')), + ('name', models.TextField(blank=True, null=True, verbose_name='Name')), + ('end_date', models.DateField(blank=True, null=True, verbose_name='Closing date')), + ('creation_date', models.DateField(blank=True, default=datetime.date.today, null=True, verbose_name='Creation date')), + ('reception_date', models.DateField(blank=True, null=True, verbose_name='Reception date')), + ('exhibition_name', models.TextField(blank=True, null=True, verbose_name='Exhibition name')), + ('exhibition_start_date', models.DateField(blank=True, null=True, verbose_name='Exhibition start date')), + ('exhibition_end_date', models.DateField(blank=True, null=True, verbose_name='Exhibition end date')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('history_id', models.AutoField(primary_key=True, serialize=False)), + ('history_date', models.DateTimeField()), + ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), + ], + options={ + 'verbose_name': 'historical Treatment request', + 'ordering': ('-history_date', '-history_id'), + 'get_latest_by': 'history_date', + }, + ), + migrations.CreateModel( + name='IntegrityType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Integrity / interest type', + 'verbose_name_plural': 'Integrity / interest types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='MaterialType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Code')), + ('recommendation', models.TextField(blank=True, null=True, verbose_name='Recommendation')), + ], + options={ + 'verbose_name': 'Material type', + 'verbose_name_plural': 'Material types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='MaterialTypeQualityType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=10, verbose_name='Order')), + ], + options={ + 'verbose_name': 'Material type quality type', + 'verbose_name_plural': 'Material type quality types', + 'ordering': ('order',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='ObjectType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Object type', + 'verbose_name_plural': 'Object types', + 'ordering': ('parent__label', 'label'), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='ObjectTypeQualityType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=10, verbose_name='Order')), + ], + options={ + 'verbose_name': 'Object type quality type', + 'verbose_name_plural': 'Object type quality types', + 'ordering': ('order',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='Property', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('history_date', models.DateTimeField(default=datetime.datetime.now)), + ('start_date', models.DateField(verbose_name='Start date')), + ('end_date', models.DateField(verbose_name='End date')), + ], + options={ + 'verbose_name': 'Property', + 'verbose_name_plural': 'Properties', + }, + bases=(ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate), + ), + migrations.CreateModel( + name='RemarkabilityType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Remarkability type', + 'verbose_name_plural': 'Remarkability types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='Treatment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('image', models.ImageField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=255, null=True, upload_to=ishtar_common.models.get_image_path)), + ('thumbnail', models.ImageField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=255, null=True, upload_to=ishtar_common.models.get_image_path)), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('label', models.CharField(blank=True, max_length=200, null=True, verbose_name='Label')), + ('other_reference', models.CharField(blank=True, max_length=200, null=True, verbose_name='Other ref.')), + ('year', models.IntegerField(default=ishtar_common.utils.get_current_year, verbose_name='Year')), + ('index', models.IntegerField(default=1, verbose_name='Index')), + ('executed', models.BooleanField(default=False, verbose_name='Treatment have been executed')), + ('external_id', models.CharField(blank=True, max_length=200, null=True, verbose_name='External ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('goal', models.TextField(blank=True, null=True, verbose_name='Goal')), + ('start_date', models.DateField(blank=True, null=True, verbose_name='Start date')), + ('end_date', models.DateField(blank=True, null=True, verbose_name='Closing date')), + ('creation_date', models.DateTimeField(default=datetime.datetime.now)), + ('estimated_cost', models.FloatField(blank=True, null=True, verbose_name='Estimated cost')), + ('quoted_cost', models.FloatField(blank=True, null=True, verbose_name='Quoted cost')), + ('realized_cost', models.FloatField(blank=True, null=True, verbose_name='Realized cost')), + ('insurance_cost', models.FloatField(blank=True, null=True, verbose_name='Insurance cost')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ], + options={ + 'verbose_name': 'Treatment', + 'verbose_name_plural': 'Treatments', + 'ordering': ('-year', '-index', '-start_date'), + 'permissions': (('view_treatment', 'Can view all Treatments'), ('view_own_treatment', 'Can view own Treatment'), ('add_own_treatment', 'Can add own Treatment'), ('change_own_treatment', 'Can change own Treatment'), ('delete_own_treatment', 'Can delete own Treatment')), + }, + bases=(ishtar_common.models.DashboardFormItem, ishtar_common.models.ValueGetter, ishtar_common.models.DocumentItem, ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate, ishtar_common.models.ImageContainerModel, ishtar_common.models.OwnPerms, ishtar_common.models.ShortMenuItem), + ), + migrations.CreateModel( + name='TreatmentEmergencyType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Treatment emergency type', + 'verbose_name_plural': 'Treatment emergency types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='TreatmentFile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('year', models.IntegerField(default=ishtar_common.utils.get_current_year, verbose_name='Year')), + ('index', models.IntegerField(default=1, verbose_name='Index')), + ('internal_reference', models.CharField(blank=True, max_length=200, null=True, verbose_name='Internal reference')), + ('external_id', models.CharField(blank=True, max_length=200, null=True, verbose_name='External ID')), + ('name', models.TextField(blank=True, null=True, verbose_name='Name')), + ('end_date', models.DateField(blank=True, null=True, verbose_name='Closing date')), + ('creation_date', models.DateField(blank=True, default=datetime.date.today, null=True, verbose_name='Creation date')), + ('reception_date', models.DateField(blank=True, null=True, verbose_name='Reception date')), + ('exhibition_name', models.TextField(blank=True, null=True, verbose_name='Exhibition name')), + ('exhibition_start_date', models.DateField(blank=True, null=True, verbose_name='Exhibition start date')), + ('exhibition_end_date', models.DateField(blank=True, null=True, verbose_name='Exhibition end date')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('applicant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='treatmentfile_applicant', to='ishtar_common.Person', verbose_name='Applicant')), + ('applicant_organisation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='treatmentfile_applicant', to='ishtar_common.Organization', verbose_name='Applicant organisation')), + ('associated_basket', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='treatment_files', to='archaeological_finds.FindBasket')), + ('documents', models.ManyToManyField(blank=True, related_name='treatment_files', to='ishtar_common.Document', verbose_name='Documents')), + ('history_creator', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator')), + ('history_modifier', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor')), + ('imports', models.ManyToManyField(blank=True, related_name='imported_archaeological_finds_treatmentfile', to='ishtar_common.Import')), + ('in_charge', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='treatmentfile_responsability', to='ishtar_common.Person', verbose_name='Person in charge')), + ('lock_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by')), + ('main_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='main_image_treatment_files', to='ishtar_common.Document', verbose_name='Main image')), + ], + options={ + 'verbose_name': 'Treatment request', + 'verbose_name_plural': 'Treatment requests', + 'ordering': ('cached_label',), + 'permissions': (('view_treatmentfile', 'Can view all Treatment requests'), ('view_own_treatmentfile', 'Can view own Treatment request'), ('add_own_treatmentfile', 'Can add own Treatment request'), ('change_own_treatmentfile', 'Can change own Treatment request'), ('delete_own_treatmentfile', 'Can delete own Treatment request')), + }, + bases=(ishtar_common.models.DashboardFormItem, archaeological_operations.models.ClosedItem, ishtar_common.models.DocumentItem, ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate, ishtar_common.models.OwnPerms, ishtar_common.models.ValueGetter, ishtar_common.models.ShortMenuItem), + ), + migrations.CreateModel( + name='TreatmentFileType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Treatment request type', + 'verbose_name_plural': 'Treatment request types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='TreatmentState', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('executed', models.BooleanField(default=False, verbose_name='Treatment is executed')), + ('order', models.IntegerField(default=10, verbose_name='Order')), + ], + options={ + 'verbose_name': 'Treatment state type', + 'verbose_name_plural': 'Treatment state types', + 'ordering': ('order', 'label'), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='TreatmentType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=10, verbose_name='Order')), + ('virtual', models.BooleanField(verbose_name='Virtual')), + ('destructive', models.BooleanField(default=False, verbose_name='Destructive')), + ('create_new_find', models.BooleanField(default=False, help_text='If True when this treatment is applied a new version of the object will be created.', verbose_name='Create a new find')), + ('upstream_is_many', models.BooleanField(default=False, help_text="Check this if for this treatment from many finds you'll get one.", verbose_name='Upstream is many')), + ('downstream_is_many', models.BooleanField(default=False, help_text="Check this if for this treatment from one find you'll get many.", verbose_name='Downstream is many')), + ('change_reference_location', models.BooleanField(default=False, help_text='The treatment change the reference location.', verbose_name='Change reference location')), + ('change_current_location', models.BooleanField(default=False, help_text='The treatment change the current location.', verbose_name='Change current location')), + ('restore_reference_location', models.BooleanField(default=False, help_text='The treatment change restore reference location to the current location.', verbose_name='Restore the reference location')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.TreatmentType', verbose_name='Parent')), + ], + options={ + 'verbose_name': 'Treatment type', + 'verbose_name_plural': 'Treatment types', + 'ordering': ('order', 'label'), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='FindDownstreamTreatments', + fields=[ + ('treatment', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='archaeological_finds.Treatment', verbose_name='Treatment')), + ('treatment_nb', models.IntegerField(verbose_name='Order')), + ], + options={ + 'db_table': 'find_downtreatments', + 'ordering': ('find', '-treatment_nb'), + 'managed': False, + }, + ), + migrations.CreateModel( + name='FindNonModifTreatments', + fields=[ + ('treatment', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='archaeological_finds.Treatment', verbose_name='Treatment')), + ('treatment_nb', models.IntegerField(verbose_name='Order')), + ], + options={ + 'db_table': 'find_nonmodif_treatments', + 'ordering': ('find', '-treatment_nb'), + 'managed': False, + }, + ), + migrations.CreateModel( + name='FindTreatments', + fields=[ + ('treatment', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='archaeological_finds.Treatment', verbose_name='Treatment')), + ('treatment_nb', models.IntegerField(verbose_name='Order')), + ('upstream', models.BooleanField(verbose_name='Is upstream')), + ], + options={ + 'db_table': 'find_treatments', + 'ordering': ('find', 'upstream', '-treatment_nb'), + 'managed': False, + }, + ), + migrations.CreateModel( + name='FindUpstreamTreatments', + fields=[ + ('treatment', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='archaeological_finds.Treatment', verbose_name='Treatment')), + ('treatment_nb', models.IntegerField(verbose_name='Order')), + ], + options={ + 'db_table': 'find_uptreatments', + 'ordering': ('find', '-treatment_nb'), + 'managed': False, + }, + ), + migrations.AddField( + model_name='treatmentfiletype', + name='treatment_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='archaeological_finds.TreatmentType'), + ), + migrations.AddField( + model_name='treatmentfile', + name='type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_finds.TreatmentFileType', verbose_name='Treatment request type'), + ), + ] diff --git a/archaeological_finds/migrations/0102_link_apps.py b/archaeological_finds/migrations/0102_link_apps.py new file mode 100644 index 000000000..2eb9abc5f --- /dev/null +++ b/archaeological_finds/migrations/0102_link_apps.py @@ -0,0 +1,601 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.27 on 2020-01-23 18:21 +from __future__ import unicode_literals + +import archaeological_finds.models_treatments +from django.conf import settings +import django.contrib.postgres.indexes +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('archaeological_finds', '0101_squashed'), + ('archaeological_context_records', '0102_link_apps'), + ('ishtar_common', '0201_squashed'), + ('archaeological_operations', '0101_squashed'), + ('archaeological_warehouse', '0101_squashed'), + ] + + operations = [ + migrations.AddField( + model_name='treatment', + name='container', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_warehouse.Container', verbose_name='Container'), + ), + migrations.AddField( + model_name='treatment', + name='documents', + field=models.ManyToManyField(blank=True, related_name='treatments', to='ishtar_common.Document', verbose_name='Documents'), + ), + migrations.AddField( + model_name='treatment', + name='file', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='treatments', to='archaeological_finds.TreatmentFile', verbose_name='Associated request'), + ), + migrations.AddField( + model_name='treatment', + name='history_creator', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator'), + ), + migrations.AddField( + model_name='treatment', + name='history_modifier', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor'), + ), + migrations.AddField( + model_name='treatment', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_archaeological_finds_treatment', to='ishtar_common.Import'), + ), + migrations.AddField( + model_name='treatment', + name='location', + field=models.ForeignKey(blank=True, help_text='Location where the treatment is done. Target warehouse for a move.', null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_warehouse.Warehouse', verbose_name='Location'), + ), + migrations.AddField( + model_name='treatment', + name='lock_user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), + ), + migrations.AddField( + model_name='treatment', + name='main_image', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='main_image_treatments', to='ishtar_common.Document', verbose_name='Main image'), + ), + migrations.AddField( + model_name='treatment', + name='organization', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='treatments', to='ishtar_common.Organization', verbose_name='Organization'), + ), + migrations.AddField( + model_name='treatment', + name='person', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='treatments', to='ishtar_common.Person', verbose_name='Responsible'), + ), + migrations.AddField( + model_name='treatment', + name='scientific_monitoring_manager', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='manage_treatments', to='ishtar_common.Person', verbose_name='Scientific monitoring manager'), + ), + migrations.AddField( + model_name='treatment', + name='treatment_state', + field=models.ForeignKey(default=archaeological_finds.models_treatments.TreatmentState.get_default, on_delete=django.db.models.deletion.CASCADE, to='archaeological_finds.TreatmentState', verbose_name='State'), + ), + migrations.AddField( + model_name='treatment', + name='treatment_types', + field=models.ManyToManyField(to='archaeological_finds.TreatmentType', verbose_name='Treatment type'), + ), + migrations.AddField( + model_name='property', + name='administrative_act', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_operations.AdministrativeAct', verbose_name='Administrative act'), + ), + migrations.AddField( + model_name='property', + name='find', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_finds.Find', verbose_name='Find'), + ), + migrations.AddField( + model_name='property', + name='history_creator', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator'), + ), + migrations.AddField( + model_name='property', + name='history_modifier', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor'), + ), + migrations.AddField( + model_name='property', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_archaeological_finds_property', to='ishtar_common.Import'), + ), + migrations.AddField( + model_name='property', + name='lock_user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), + ), + migrations.AddField( + model_name='property', + name='person', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='properties', to='ishtar_common.Person', verbose_name='Person'), + ), + migrations.AddField( + model_name='objecttype', + name='parent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.ObjectType', verbose_name='Parent'), + ), + migrations.AddField( + model_name='materialtype', + name='parent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.MaterialType', verbose_name='Parent'), + ), + migrations.AddField( + model_name='historicaltreatmentfile', + name='applicant', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person'), + ), + migrations.AddField( + model_name='historicaltreatmentfile', + name='applicant_organisation', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Organization'), + ), + migrations.AddField( + model_name='historicaltreatmentfile', + name='associated_basket', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.FindBasket'), + ), + migrations.AddField( + model_name='historicaltreatmentfile', + name='history_creator', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicaltreatmentfile', + name='history_modifier', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicaltreatmentfile', + name='history_user', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicaltreatmentfile', + name='in_charge', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person'), + ), + migrations.AddField( + model_name='historicaltreatmentfile', + name='lock_user', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicaltreatmentfile', + name='main_image', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Document'), + ), + migrations.AddField( + model_name='historicaltreatmentfile', + name='type', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.TreatmentFileType'), + ), + migrations.AddField( + model_name='historicaltreatment', + name='container', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_warehouse.Container'), + ), + migrations.AddField( + model_name='historicaltreatment', + name='file', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.TreatmentFile'), + ), + migrations.AddField( + model_name='historicaltreatment', + name='history_creator', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicaltreatment', + name='history_modifier', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicaltreatment', + name='history_user', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicaltreatment', + name='location', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_warehouse.Warehouse'), + ), + migrations.AddField( + model_name='historicaltreatment', + name='lock_user', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicaltreatment', + name='main_image', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Document'), + ), + migrations.AddField( + model_name='historicaltreatment', + name='organization', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Organization'), + ), + migrations.AddField( + model_name='historicaltreatment', + name='person', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person'), + ), + migrations.AddField( + model_name='historicaltreatment', + name='scientific_monitoring_manager', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person'), + ), + migrations.AddField( + model_name='historicaltreatment', + name='treatment_state', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.TreatmentState'), + ), + migrations.AddField( + model_name='historicalfind', + name='checked_type', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.CheckedType'), + ), + migrations.AddField( + model_name='historicalfind', + name='collection', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_warehouse.Collection'), + ), + migrations.AddField( + model_name='historicalfind', + name='conservatory_state', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.ConservatoryState'), + ), + migrations.AddField( + model_name='historicalfind', + name='container', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_warehouse.Container'), + ), + migrations.AddField( + model_name='historicalfind', + name='container_ref', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_warehouse.Container'), + ), + migrations.AddField( + model_name='historicalfind', + name='downstream_treatment', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.Treatment'), + ), + migrations.AddField( + model_name='historicalfind', + name='history_creator', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalfind', + name='history_modifier', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalfind', + name='history_user', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalfind', + name='lock_user', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalfind', + name='main_image', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Document'), + ), + migrations.AddField( + model_name='historicalfind', + name='material_type_quality', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.MaterialTypeQualityType'), + ), + migrations.AddField( + model_name='historicalfind', + name='object_type_quality', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.ObjectTypeQualityType'), + ), + migrations.AddField( + model_name='historicalfind', + name='treatment_emergency', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.TreatmentEmergencyType'), + ), + migrations.AddField( + model_name='historicalfind', + name='upstream_treatment', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.Treatment'), + ), + migrations.AddField( + model_name='historicalbasefind', + name='batch', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.BatchType'), + ), + migrations.AddField( + model_name='historicalbasefind', + name='context_record', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_context_records.ContextRecord'), + ), + migrations.AddField( + model_name='historicalbasefind', + name='history_creator', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalbasefind', + name='history_modifier', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalbasefind', + name='history_user', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalbasefind', + name='lock_user', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalbasefind', + name='spatial_reference_system', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.SpatialReferenceSystem'), + ), + migrations.AddField( + model_name='findbasket', + name='items', + field=models.ManyToManyField(blank=True, related_name='basket', to='archaeological_finds.Find'), + ), + migrations.AddField( + model_name='findbasket', + name='shared_with', + field=models.ManyToManyField(blank=True, related_name='shared_findbaskets', to='ishtar_common.IshtarUser', verbose_name='Shared (read) with'), + ), + migrations.AddField( + model_name='findbasket', + name='shared_write_with', + field=models.ManyToManyField(blank=True, related_name='shared_write_findbaskets', to='ishtar_common.IshtarUser', verbose_name='Shared (read/edit) with'), + ), + migrations.AddField( + model_name='findbasket', + name='user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='findbaskets', to='ishtar_common.IshtarUser', verbose_name='Owner'), + ), + migrations.AddField( + model_name='find', + name='alteration_causes', + field=models.ManyToManyField(blank=True, related_name='finds', to='archaeological_finds.AlterationCauseType', verbose_name='Alteration cause'), + ), + migrations.AddField( + model_name='find', + name='alterations', + field=models.ManyToManyField(blank=True, related_name='finds', to='archaeological_finds.AlterationType', verbose_name='Alteration'), + ), + migrations.AddField( + model_name='find', + name='base_finds', + field=models.ManyToManyField(related_name='find', to='archaeological_finds.BaseFind', verbose_name='Base find'), + ), + migrations.AddField( + model_name='find', + name='checked_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.CheckedType', verbose_name='Check'), + ), + migrations.AddField( + model_name='find', + name='collection', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='finds', to='archaeological_warehouse.Collection', verbose_name='Collection'), + ), + migrations.AddField( + model_name='find', + name='communicabilities', + field=models.ManyToManyField(blank=True, related_name='find', to='archaeological_finds.CommunicabilityType', verbose_name='Communicability'), + ), + migrations.AddField( + model_name='find', + name='conservatory_state', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.ConservatoryState', verbose_name='Conservatory state'), + ), + migrations.AddField( + model_name='find', + name='container', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='finds', to='archaeological_warehouse.Container', verbose_name='Container'), + ), + migrations.AddField( + model_name='find', + name='container_ref', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='finds_ref', to='archaeological_warehouse.Container', verbose_name='Reference container'), + ), + migrations.AddField( + model_name='find', + name='cultural_attributions', + field=models.ManyToManyField(blank=True, to='archaeological_operations.CulturalAttributionType', verbose_name='Cultural attribution'), + ), + migrations.AddField( + model_name='find', + name='datings', + field=models.ManyToManyField(related_name='find', to='archaeological_context_records.Dating', verbose_name='Dating'), + ), + migrations.AddField( + model_name='find', + name='documents', + field=models.ManyToManyField(blank=True, related_name='finds', to='ishtar_common.Document', verbose_name='Documents'), + ), + migrations.AddField( + model_name='find', + name='downstream_treatment', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='upstream', to='archaeological_finds.Treatment', verbose_name='Downstream treatment'), + ), + migrations.AddField( + model_name='find', + name='history_creator', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator'), + ), + migrations.AddField( + model_name='find', + name='history_modifier', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor'), + ), + migrations.AddField( + model_name='find', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_archaeological_finds_find', to='ishtar_common.Import'), + ), + migrations.AddField( + model_name='find', + name='integrities', + field=models.ManyToManyField(blank=True, related_name='find', to='archaeological_finds.IntegrityType', verbose_name='Integrity / interest'), + ), + migrations.AddField( + model_name='find', + name='lock_user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), + ), + migrations.AddField( + model_name='find', + name='main_image', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='main_image_finds', to='ishtar_common.Document', verbose_name='Main image'), + ), + migrations.AddField( + model_name='find', + name='material_type_quality', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='finds', to='archaeological_finds.MaterialTypeQualityType', verbose_name='Material type quality'), + ), + migrations.AddField( + model_name='find', + name='material_types', + field=models.ManyToManyField(blank=True, related_name='finds', to='archaeological_finds.MaterialType', verbose_name='Material types'), + ), + migrations.AddField( + model_name='find', + name='object_type_quality', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='finds', to='archaeological_finds.ObjectTypeQualityType', verbose_name='Object type quality'), + ), + migrations.AddField( + model_name='find', + name='object_types', + field=models.ManyToManyField(blank=True, related_name='find', to='archaeological_finds.ObjectType', verbose_name='Object types'), + ), + migrations.AddField( + model_name='find', + name='preservation_to_considers', + field=models.ManyToManyField(blank=True, related_name='finds_recommended', to='archaeological_finds.TreatmentType', verbose_name='Recommended treatments'), + ), + migrations.AddField( + model_name='find', + name='remarkabilities', + field=models.ManyToManyField(blank=True, related_name='find', to='archaeological_finds.RemarkabilityType', verbose_name='Remarkability'), + ), + migrations.AddField( + model_name='find', + name='treatment_emergency', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.TreatmentEmergencyType', verbose_name='Treatment emergency'), + ), + migrations.AddField( + model_name='find', + name='treatments', + field=models.ManyToManyField(blank=True, help_text='Related treatments when no new find is created', related_name='finds', to='archaeological_finds.Treatment', verbose_name='Treatments'), + ), + migrations.AddField( + model_name='find', + name='upstream_treatment', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='downstream', to='archaeological_finds.Treatment', verbose_name='Upstream treatment'), + ), + migrations.AddField( + model_name='conservatorystate', + name='parent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.ConservatoryState', verbose_name='Parent'), + ), + migrations.AddField( + model_name='communicabilitytype', + name='parent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.CommunicabilityType', verbose_name='Parent'), + ), + migrations.AddField( + model_name='basefind', + name='batch', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.BatchType', verbose_name='Batch/object'), + ), + migrations.AddField( + model_name='basefind', + name='context_record', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='base_finds', to='archaeological_context_records.ContextRecord', verbose_name='Context Record'), + ), + migrations.AddField( + model_name='basefind', + name='history_creator', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator'), + ), + migrations.AddField( + model_name='basefind', + name='history_modifier', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor'), + ), + migrations.AddField( + model_name='basefind', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_archaeological_finds_basefind', to='ishtar_common.Import'), + ), + migrations.AddField( + model_name='basefind', + name='lock_user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), + ), + migrations.AddField( + model_name='basefind', + name='spatial_reference_system', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.SpatialReferenceSystem', verbose_name='Spatial Reference System'), + ), + migrations.AddField( + model_name='alterationtype', + name='parent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.AlterationType', verbose_name='Parent'), + ), + migrations.AddField( + model_name='alterationcausetype', + name='parent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.AlterationCauseType', verbose_name='Parent'), + ), + migrations.AddIndex( + model_name='treatmentfile', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='archaeologi_data_4ecdf7_gin'), + ), + migrations.AlterUniqueTogether( + name='treatmentfile', + unique_together=set([('year', 'index')]), + ), + migrations.AddIndex( + model_name='treatment', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='archaeologi_data_011f1a_gin'), + ), + migrations.AlterUniqueTogether( + name='treatment', + unique_together=set([('year', 'index')]), + ), + migrations.AddIndex( + model_name='property', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='archaeologi_data_cb9c09_gin'), + ), + migrations.AddIndex( + model_name='find', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='archaeologi_data_622f41_gin'), + ), + migrations.AddIndex( + model_name='basefind', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='archaeologi_data_fb3df5_gin'), + ), + ] diff --git a/archaeological_operations/migrations/0101_squashed.py b/archaeological_operations/migrations/0101_squashed.py new file mode 100644 index 000000000..3b97094ce --- /dev/null +++ b/archaeological_operations/migrations/0101_squashed.py @@ -0,0 +1,822 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.27 on 2020-01-23 18:21 +from __future__ import unicode_literals + +import archaeological_operations.models +import datetime +from django.conf import settings +import django.contrib.gis.db.models.fields +import django.contrib.postgres.fields.jsonb +import django.contrib.postgres.indexes +import django.contrib.postgres.search +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import ishtar_common.models +import re +import uuid + + +class Migration(migrations.Migration): + dependencies = [ + ('archaeological_files', '0101_squashed'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('ishtar_common', '0201_squashed'), + ('archaeological_finds', '0101_squashed'), + ('archaeological_operations', '0075_auto_20191216_1045'), + ] + + operations = [ + migrations.CreateModel( + name='OperationByDepartment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + options={ + 'db_table': 'operation_department', + 'managed': False, + }, + ), + migrations.CreateModel( + name='ActType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('intented_to', models.CharField(choices=[('F', 'Archaeological file'), ('O', 'Operation'), ('TF', 'Treatment request'), ('T', 'Treatment')], max_length=2, verbose_name='Intended to')), + ('code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Code')), + ('indexed', models.BooleanField(default=False, verbose_name='Indexed')), + ('associated_template', models.ManyToManyField(blank=True, related_name='acttypes', to='ishtar_common.DocumentTemplate', verbose_name='Associated template')), + ], + options={ + 'verbose_name': 'Act type', + 'verbose_name_plural': 'Act types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='AdministrativeAct', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('index', models.IntegerField(blank=True, null=True, verbose_name='Index')), + ('signature_date', models.DateField(blank=True, null=True, verbose_name='Signature date')), + ('year', models.IntegerField(blank=True, null=True, verbose_name='Year')), + ('act_object', models.TextField(blank=True, max_length=300, null=True, verbose_name='Object')), + ('ref_sra', models.CharField(blank=True, max_length=15, null=True, verbose_name='Référence SRA')), + ('departments_label', models.TextField(blank=True, help_text='Cached values get from associated departments', null=True, verbose_name='Departments')), + ('towns_label', models.TextField(blank=True, help_text='Cached values get from associated towns', null=True, verbose_name='Towns')), + ('act_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_operations.ActType', verbose_name='Act type')), + ('associated_file', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='administrative_act', to='archaeological_files.File', verbose_name='Archaeological file')), + ('history_creator', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator')), + ('history_modifier', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor')), + ('imports', models.ManyToManyField(blank=True, related_name='imported_archaeological_operations_administrativeact', to='ishtar_common.Import')), + ('in_charge', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='adminact_operation_in_charge', to='ishtar_common.Person', verbose_name='Person in charge of the operation')), + ('lock_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by')), + ], + options={ + 'verbose_name': 'Administrative act', + 'verbose_name_plural': 'Administrative acts', + 'ordering': ('year', 'signature_date', 'index', 'act_type'), + 'permissions': (('view_administrativeact', 'Can view all Administrative acts'), ('view_own_administrativeact', 'Can view own Administrative act'), ('add_own_administrativeact', 'Can add own Administrative act'), ('change_own_administrativeact', 'Can change own Administrative act'), ('delete_own_administrativeact', 'Can delete own Administrative act')), + }, + bases=(ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate, ishtar_common.models.OwnPerms, ishtar_common.models.ValueGetter), + ), + migrations.CreateModel( + name='ArchaeologicalSite', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('qrcode', models.ImageField(blank=True, max_length=255, null=True, upload_to=ishtar_common.models.get_image_path)), + ('x', models.FloatField(blank=True, null=True, verbose_name='X')), + ('y', models.FloatField(blank=True, null=True, verbose_name='Y')), + ('z', models.FloatField(blank=True, null=True, verbose_name='Z')), + ('estimated_error_x', models.FloatField(blank=True, null=True, verbose_name='Estimated error for X')), + ('estimated_error_y', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Y')), + ('estimated_error_z', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Z')), + ('point', django.contrib.gis.db.models.fields.PointField(blank=True, dim=3, null=True, srid=4326, verbose_name='Point')), + ('point_2d', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point (2D)')), + ('point_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Point source')), + ('point_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Point source item')), + ('multi_polygon', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Multi polygon')), + ('multi_polygon_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Multi-polygon source')), + ('multi_polygon_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Multi polygon source item')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('reference', models.CharField(max_length=200, unique=True, verbose_name='Reference')), + ('other_reference', models.TextField(blank=True, null=True, verbose_name='Other reference')), + ('name', models.CharField(blank=True, max_length=200, null=True, verbose_name='Name')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('locality_ngi', models.TextField(blank=True, null=True, verbose_name='National Geographic Institute locality')), + ('locality_cadastral', models.TextField(blank=True, null=True, verbose_name='Cadastral locality')), + ('shipwreck_name', models.TextField(blank=True, null=True, verbose_name='Shipwreck name')), + ('oceanographic_service_localisation', models.TextField(blank=True, null=True, verbose_name='Oceanographic service localisation')), + ('shipwreck_code', models.TextField(blank=True, null=True, verbose_name='Shipwreck code')), + ('sinking_date', models.DateField(blank=True, null=True, verbose_name='Sinking date')), + ('discovery_area', models.TextField(blank=True, null=True, verbose_name='Discovery area')), + ('affmar_number', models.CharField(blank=True, max_length=100, null=True, verbose_name='AffMar number')), + ('drassm_number', models.CharField(blank=True, max_length=100, null=True, verbose_name='DRASSM number')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('cached_towns_label', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached town label')), + ('cached_periods', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached periods label')), + ('cached_remains', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached remains label')), + ('collaborators', models.ManyToManyField(blank=True, related_name='site_collaborator', to='ishtar_common.Person', verbose_name='Collaborators')), + ], + options={ + 'verbose_name': 'Archaeological site', + 'verbose_name_plural': 'Archaeological sites', + 'permissions': (('view_archaeologicalsite', 'Can view all Archaeological sites'), ('view_own_archaeologicalsite', 'Can view own Archaeological site'), ('add_own_archaeologicalsite', 'Can add own Archaeological site'), ('change_own_archaeologicalsite', 'Can change own Archaeological site'), ('delete_own_archaeologicalsite', 'Can delete own Archaeological site')), + }, + bases=(ishtar_common.models.DocumentItem, ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate, ishtar_common.models.ImageContainerModel, ishtar_common.models.OwnPerms, ishtar_common.models.ValueGetter, ishtar_common.models.MainItem), + ), + migrations.CreateModel( + name='CulturalAttributionType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=10, verbose_name='Order')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_operations.CulturalAttributionType', verbose_name='Parent')), + ], + options={ + 'verbose_name': 'Cultural attribution type', + 'verbose_name_plural': 'Cultural attribution types', + 'ordering': ('order',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='HistoricalAdministrativeAct', + fields=[ + ('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(blank=True, editable=False)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('index', models.IntegerField(blank=True, null=True, verbose_name='Index')), + ('signature_date', models.DateField(blank=True, null=True, verbose_name='Signature date')), + ('year', models.IntegerField(blank=True, null=True, verbose_name='Year')), + ('act_object', models.TextField(blank=True, max_length=300, null=True, verbose_name='Object')), + ('ref_sra', models.CharField(blank=True, max_length=15, null=True, verbose_name='Référence SRA')), + ('departments_label', models.TextField(blank=True, help_text='Cached values get from associated departments', null=True, verbose_name='Departments')), + ('towns_label', models.TextField(blank=True, help_text='Cached values get from associated towns', null=True, verbose_name='Towns')), + ('history_id', models.AutoField(primary_key=True, serialize=False)), + ('history_date', models.DateTimeField()), + ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), + ('act_type', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_operations.ActType')), + ('associated_file', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_files.File')), + ('history_creator', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), + ('history_modifier', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), + ('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ('in_charge', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person')), + ('lock_user', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'historical Administrative act', + 'ordering': ('-history_date', '-history_id'), + 'get_latest_by': 'history_date', + }, + ), + migrations.CreateModel( + name='HistoricalArchaeologicalSite', + fields=[ + ('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('qrcode', models.TextField(blank=True, max_length=255, null=True)), + ('x', models.FloatField(blank=True, null=True, verbose_name='X')), + ('y', models.FloatField(blank=True, null=True, verbose_name='Y')), + ('z', models.FloatField(blank=True, null=True, verbose_name='Z')), + ('estimated_error_x', models.FloatField(blank=True, null=True, verbose_name='Estimated error for X')), + ('estimated_error_y', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Y')), + ('estimated_error_z', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Z')), + ('point', django.contrib.gis.db.models.fields.PointField(blank=True, dim=3, null=True, srid=4326, verbose_name='Point')), + ('point_2d', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point (2D)')), + ('point_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Point source')), + ('point_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Point source item')), + ('multi_polygon', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Multi polygon')), + ('multi_polygon_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Multi-polygon source')), + ('multi_polygon_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Multi polygon source item')), + ('last_modified', models.DateTimeField(blank=True, editable=False)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('reference', models.CharField(db_index=True, max_length=200, verbose_name='Reference')), + ('other_reference', models.TextField(blank=True, null=True, verbose_name='Other reference')), + ('name', models.CharField(blank=True, max_length=200, null=True, verbose_name='Name')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('locality_ngi', models.TextField(blank=True, null=True, verbose_name='National Geographic Institute locality')), + ('locality_cadastral', models.TextField(blank=True, null=True, verbose_name='Cadastral locality')), + ('shipwreck_name', models.TextField(blank=True, null=True, verbose_name='Shipwreck name')), + ('oceanographic_service_localisation', models.TextField(blank=True, null=True, verbose_name='Oceanographic service localisation')), + ('shipwreck_code', models.TextField(blank=True, null=True, verbose_name='Shipwreck code')), + ('sinking_date', models.DateField(blank=True, null=True, verbose_name='Sinking date')), + ('discovery_area', models.TextField(blank=True, null=True, verbose_name='Discovery area')), + ('affmar_number', models.CharField(blank=True, max_length=100, null=True, verbose_name='AffMar number')), + ('drassm_number', models.CharField(blank=True, max_length=100, null=True, verbose_name='DRASSM number')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('cached_towns_label', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached town label')), + ('cached_periods', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached periods label')), + ('cached_remains', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached remains label')), + ('history_id', models.AutoField(primary_key=True, serialize=False)), + ('history_date', models.DateTimeField()), + ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), + ('history_creator', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), + ('history_modifier', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), + ('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ('lock_user', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), + ('main_image', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Document')), + ('spatial_reference_system', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.SpatialReferenceSystem')), + ], + options={ + 'verbose_name': 'historical Archaeological site', + 'ordering': ('-history_date', '-history_id'), + 'get_latest_by': 'history_date', + }, + ), + migrations.CreateModel( + name='HistoricalOperation', + fields=[ + ('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), + ('relation_image', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated relation image (SVG)')), + ('relation_bitmap_image', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated relation image (PNG)')), + ('relation_dot', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated relation image (DOT)')), + ('relation_image_above', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated above relation image (SVG)')), + ('relation_dot_above', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated above relation image (DOT)')), + ('relation_bitmap_image_above', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated above relation image (PNG)')), + ('relation_image_below', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated below relation image (SVG)')), + ('relation_dot_below', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated below relation image (DOT)')), + ('relation_bitmap_image_below', models.TextField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=100, null=True, verbose_name='Generated below relation image (PNG)')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('qrcode', models.TextField(blank=True, max_length=255, null=True)), + ('x', models.FloatField(blank=True, null=True, verbose_name='X')), + ('y', models.FloatField(blank=True, null=True, verbose_name='Y')), + ('z', models.FloatField(blank=True, null=True, verbose_name='Z')), + ('estimated_error_x', models.FloatField(blank=True, null=True, verbose_name='Estimated error for X')), + ('estimated_error_y', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Y')), + ('estimated_error_z', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Z')), + ('point', django.contrib.gis.db.models.fields.PointField(blank=True, dim=3, null=True, srid=4326, verbose_name='Point')), + ('point_2d', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point (2D)')), + ('point_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Point source')), + ('point_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Point source item')), + ('multi_polygon', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Multi polygon')), + ('multi_polygon_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Multi-polygon source')), + ('multi_polygon_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Multi polygon source item')), + ('last_modified', models.DateTimeField(blank=True, editable=False)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('creation_date', models.DateField(default=datetime.date.today, verbose_name='Creation date')), + ('end_date', models.DateField(blank=True, null=True, verbose_name='Closing date')), + ('start_date', models.DateField(blank=True, null=True, verbose_name='Start date')), + ('excavation_end_date', models.DateField(blank=True, null=True, verbose_name='Excavation end date')), + ('report_delivery_date', models.DateField(blank=True, null=True, verbose_name='Report delivery date')), + ('year', models.IntegerField(blank=True, null=True, verbose_name='Year')), + ('operation_code', models.IntegerField(blank=True, null=True, verbose_name='Numeric reference')), + ('surface', models.IntegerField(blank=True, null=True, verbose_name='Surface (m2)')), + ('cost', models.IntegerField(blank=True, null=True, verbose_name='Cost (euros)')), + ('scheduled_man_days', models.IntegerField(blank=True, null=True, verbose_name='Scheduled man-days')), + ('optional_man_days', models.IntegerField(blank=True, null=True, verbose_name='Optional man-days')), + ('effective_man_days', models.IntegerField(blank=True, null=True, verbose_name='Effective man-days')), + ('old_code', models.CharField(blank=True, max_length=200, null=True, verbose_name='Old code')), + ('code_patriarche', models.TextField(blank=True, db_index=True, null=True, verbose_name='Code PATRIARCHE')), + ('fnap_financing', models.FloatField(blank=True, null=True, verbose_name='Financement FNAP (%)')), + ('fnap_cost', models.IntegerField(blank=True, null=True, verbose_name='Financement FNAP (€)')), + ('zoning_prescription', models.NullBooleanField(verbose_name='Prescription on zoning')), + ('large_area_prescription', models.NullBooleanField(verbose_name='Prescription on large area')), + ('geoarchaeological_context_prescription', models.NullBooleanField(verbose_name='Prescription on geoarchaeological context')), + ('negative_result', models.NullBooleanField(verbose_name='Résultat considéré comme négatif')), + ('cira_date', models.DateField(blank=True, null=True, verbose_name='Date avis CIRA')), + ('eas_number', models.CharField(blank=True, max_length=20, null=True, verbose_name="Numéro de l'EA")), + ('operator_reference', models.CharField(blank=True, max_length=20, null=True, verbose_name='Operator reference')), + ('common_name', models.TextField(blank=True, null=True, verbose_name='Generic name')), + ('address', models.TextField(blank=True, null=True, verbose_name='Address / Locality')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('scientific_documentation_comment', models.TextField(blank=True, null=True, verbose_name='Comment about scientific documentation')), + ('cached_label', models.CharField(blank=True, db_index=True, max_length=500, null=True, verbose_name='Cached name')), + ('virtual_operation', models.BooleanField(default=False, help_text='If checked, it means that this operation have not been officialy registered.', verbose_name='Virtual operation')), + ('abstract', models.TextField(blank=True, null=True, verbose_name='Abstract')), + ('documentation_deadline', models.DateField(blank=True, null=True, verbose_name='Deadline for submission of the documentation')), + ('documentation_received', models.NullBooleanField(verbose_name='Documentation received')), + ('finds_deadline', models.DateField(blank=True, null=True, verbose_name='Deadline for submission of the finds')), + ('finds_received', models.NullBooleanField(verbose_name='Finds received')), + ('drassm_code', models.CharField(blank=True, max_length=100, null=True, verbose_name='DRASSM code')), + ('seizure_name', models.TextField(blank=True, null=True, verbose_name='Seizure name')), + ('official_report_number', models.TextField(blank=True, null=True, verbose_name='Official report number')), + ('cached_towns_label', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached town label')), + ('cached_periods', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached periods label')), + ('cached_remains', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached remains label')), + ('history_id', models.AutoField(primary_key=True, serialize=False)), + ('history_date', models.DateTimeField()), + ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), + ('applicant_authority', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Organization')), + ('associated_file', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_files.File')), + ('cira_rapporteur', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person')), + ('history_creator', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), + ('history_modifier', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), + ('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ('in_charge', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person')), + ('lock_user', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), + ('main_image', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Document')), + ('minutes_writer', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person')), + ('operation_type', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.OperationType')), + ('operator', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Organization')), + ('protagonist', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person')), + ], + options={ + 'verbose_name': 'historical Operation', + 'ordering': ('-history_date', '-history_id'), + 'get_latest_by': 'history_date', + }, + ), + migrations.CreateModel( + name='Operation', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('relation_image', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated relation image (SVG)')), + ('relation_bitmap_image', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated relation image (PNG)')), + ('relation_dot', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated relation image (DOT)')), + ('relation_image_above', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated above relation image (SVG)')), + ('relation_dot_above', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated above relation image (DOT)')), + ('relation_bitmap_image_above', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated above relation image (PNG)')), + ('relation_image_below', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated below relation image (SVG)')), + ('relation_dot_below', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated below relation image (DOT)')), + ('relation_bitmap_image_below', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', null=True, upload_to=ishtar_common.models.get_image_path, verbose_name='Generated below relation image (PNG)')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('qrcode', models.ImageField(blank=True, max_length=255, null=True, upload_to=ishtar_common.models.get_image_path)), + ('x', models.FloatField(blank=True, null=True, verbose_name='X')), + ('y', models.FloatField(blank=True, null=True, verbose_name='Y')), + ('z', models.FloatField(blank=True, null=True, verbose_name='Z')), + ('estimated_error_x', models.FloatField(blank=True, null=True, verbose_name='Estimated error for X')), + ('estimated_error_y', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Y')), + ('estimated_error_z', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Z')), + ('point', django.contrib.gis.db.models.fields.PointField(blank=True, dim=3, null=True, srid=4326, verbose_name='Point')), + ('point_2d', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point (2D)')), + ('point_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Point source')), + ('point_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Point source item')), + ('multi_polygon', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Multi polygon')), + ('multi_polygon_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Multi-polygon source')), + ('multi_polygon_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Multi polygon source item')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('creation_date', models.DateField(default=datetime.date.today, verbose_name='Creation date')), + ('end_date', models.DateField(blank=True, null=True, verbose_name='Closing date')), + ('start_date', models.DateField(blank=True, null=True, verbose_name='Start date')), + ('excavation_end_date', models.DateField(blank=True, null=True, verbose_name='Excavation end date')), + ('report_delivery_date', models.DateField(blank=True, null=True, verbose_name='Report delivery date')), + ('year', models.IntegerField(blank=True, null=True, verbose_name='Year')), + ('operation_code', models.IntegerField(blank=True, null=True, verbose_name='Numeric reference')), + ('surface', models.IntegerField(blank=True, null=True, verbose_name='Surface (m2)')), + ('cost', models.IntegerField(blank=True, null=True, verbose_name='Cost (euros)')), + ('scheduled_man_days', models.IntegerField(blank=True, null=True, verbose_name='Scheduled man-days')), + ('optional_man_days', models.IntegerField(blank=True, null=True, verbose_name='Optional man-days')), + ('effective_man_days', models.IntegerField(blank=True, null=True, verbose_name='Effective man-days')), + ('old_code', models.CharField(blank=True, max_length=200, null=True, verbose_name='Old code')), + ('code_patriarche', models.TextField(blank=True, null=True, unique=True, verbose_name='Code PATRIARCHE')), + ('fnap_financing', models.FloatField(blank=True, null=True, verbose_name='Financement FNAP (%)')), + ('fnap_cost', models.IntegerField(blank=True, null=True, verbose_name='Financement FNAP (€)')), + ('zoning_prescription', models.NullBooleanField(verbose_name='Prescription on zoning')), + ('large_area_prescription', models.NullBooleanField(verbose_name='Prescription on large area')), + ('geoarchaeological_context_prescription', models.NullBooleanField(verbose_name='Prescription on geoarchaeological context')), + ('negative_result', models.NullBooleanField(verbose_name='Résultat considéré comme négatif')), + ('cira_date', models.DateField(blank=True, null=True, verbose_name='Date avis CIRA')), + ('eas_number', models.CharField(blank=True, max_length=20, null=True, verbose_name="Numéro de l'EA")), + ('operator_reference', models.CharField(blank=True, max_length=20, null=True, verbose_name='Operator reference')), + ('common_name', models.TextField(blank=True, null=True, verbose_name='Generic name')), + ('address', models.TextField(blank=True, null=True, verbose_name='Address / Locality')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('scientific_documentation_comment', models.TextField(blank=True, null=True, verbose_name='Comment about scientific documentation')), + ('cached_label', models.CharField(blank=True, db_index=True, max_length=500, null=True, verbose_name='Cached name')), + ('virtual_operation', models.BooleanField(default=False, help_text='If checked, it means that this operation have not been officialy registered.', verbose_name='Virtual operation')), + ('abstract', models.TextField(blank=True, null=True, verbose_name='Abstract')), + ('documentation_deadline', models.DateField(blank=True, null=True, verbose_name='Deadline for submission of the documentation')), + ('documentation_received', models.NullBooleanField(verbose_name='Documentation received')), + ('finds_deadline', models.DateField(blank=True, null=True, verbose_name='Deadline for submission of the finds')), + ('finds_received', models.NullBooleanField(verbose_name='Finds received')), + ('drassm_code', models.CharField(blank=True, max_length=100, null=True, verbose_name='DRASSM code')), + ('seizure_name', models.TextField(blank=True, null=True, verbose_name='Seizure name')), + ('official_report_number', models.TextField(blank=True, null=True, verbose_name='Official report number')), + ('cached_towns_label', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached town label')), + ('cached_periods', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached periods label')), + ('cached_remains', models.TextField(blank=True, help_text='Generated automatically - do not edit', null=True, verbose_name='Cached remains label')), + ('applicant_authority', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='operation_applicant_authority', to='ishtar_common.Organization', verbose_name='Applicant authority')), + ('archaeological_sites', models.ManyToManyField(blank=True, related_name='operations', to='archaeological_operations.ArchaeologicalSite', verbose_name='Archaeological sites')), + ('associated_file', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='operations', to='archaeological_files.File', verbose_name='File')), + ('cira_rapporteur', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='cira_rapporteur', to='ishtar_common.Person', verbose_name='Rapporteur CIRA')), + ('collaborators', models.ManyToManyField(blank=True, related_name='operation_collaborator', to='ishtar_common.Person', verbose_name='Collaborators')), + ('documents', models.ManyToManyField(blank=True, related_name='operations', to='ishtar_common.Document', verbose_name='Documents')), + ('history_creator', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator')), + ('history_modifier', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor')), + ('imports', models.ManyToManyField(blank=True, related_name='imported_archaeological_operations_operation', to='ishtar_common.Import')), + ('in_charge', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='operation_responsability', to='ishtar_common.Person', verbose_name='In charge')), + ('lock_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by')), + ('main_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='main_image_operations', to='ishtar_common.Document', verbose_name='Main image')), + ('minutes_writer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='minutes_writer', to='ishtar_common.Person', verbose_name='Writer of the minutes')), + ('operation_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='ishtar_common.OperationType', verbose_name='Operation type')), + ('operator', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='operator', to='ishtar_common.Organization', verbose_name='Operator')), + ], + options={ + 'verbose_name': 'Operation', + 'verbose_name_plural': 'Operations', + 'ordering': ('cached_label',), + 'permissions': (('view_operation', 'Can view all Operations'), ('view_own_operation', 'Can view own Operation'), ('add_own_operation', 'Can add own Operation'), ('change_own_operation', 'Can change own Operation'), ('delete_own_operation', 'Can delete own Operation'), ('close_operation', 'Can close Operation')), + }, + bases=(archaeological_operations.models.ClosedItem, ishtar_common.models.DocumentItem, ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, ishtar_common.models.OwnPerms, ishtar_common.models.ValueGetter, ishtar_common.models.MainItem, ishtar_common.models.DashboardFormItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate, ishtar_common.models.ImageContainerModel), + ), + migrations.CreateModel( + name='OperationTypeOld', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=1, verbose_name='Order')), + ('preventive', models.BooleanField(default=True, verbose_name='Is preventive')), + ], + options={ + 'verbose_name': 'Operation type old', + 'verbose_name_plural': 'Operation types old', + 'ordering': ['-preventive', 'order', 'label'], + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='Parcel', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('history_date', models.DateTimeField(default=datetime.datetime.now)), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('year', models.IntegerField(blank=True, null=True, verbose_name='Year')), + ('section', models.CharField(blank=True, max_length=4, null=True, verbose_name='Section')), + ('parcel_number', models.CharField(blank=True, max_length=6, null=True, verbose_name='Parcel number')), + ('public_domain', models.BooleanField(default=False, verbose_name='Public domain')), + ('external_id', models.CharField(blank=True, max_length=100, null=True, verbose_name='External ID')), + ('auto_external_id', models.BooleanField(default=False, verbose_name='External ID is set automatically')), + ('address', models.TextField(blank=True, null=True, verbose_name='Address - Locality')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('associated_file', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='parcels', to='archaeological_files.File', verbose_name='File')), + ('history_creator', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator')), + ('history_modifier', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor')), + ('imports', models.ManyToManyField(blank=True, related_name='imported_archaeological_operations_parcel', to='ishtar_common.Import')), + ('lock_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by')), + ('operation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='parcels', to='archaeological_operations.Operation', verbose_name='Operation')), + ('town', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='parcels', to='ishtar_common.Town', verbose_name='Town')), + ], + options={ + 'verbose_name': 'Parcel', + 'verbose_name_plural': 'Parcels', + 'ordering': ('year', 'section', 'parcel_number'), + }, + bases=(ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate), + ), + migrations.CreateModel( + name='ParcelOwner', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('history_date', models.DateTimeField(default=datetime.datetime.now)), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('start_date', models.DateField(verbose_name='Start date')), + ('end_date', models.DateField(verbose_name='End date')), + ('history_creator', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator')), + ('history_modifier', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor')), + ('imports', models.ManyToManyField(blank=True, related_name='imported_archaeological_operations_parcelowner', to='ishtar_common.Import')), + ('lock_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by')), + ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='parcel_owner', to='ishtar_common.Person', verbose_name='Owner')), + ('parcel', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='owners', to='archaeological_operations.Parcel', verbose_name='Parcel')), + ], + options={ + 'verbose_name': 'Parcel owner', + 'verbose_name_plural': 'Parcel owners', + }, + bases=(ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate), + ), + migrations.CreateModel( + name='Period', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(verbose_name='Order')), + ('start_date', models.IntegerField(blank=True, null=True, verbose_name='Start date')), + ('end_date', models.IntegerField(blank=True, null=True, verbose_name='End date')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_operations.Period', verbose_name='Parent period')), + ], + options={ + 'verbose_name': 'Type Period', + 'verbose_name_plural': 'Types Period', + 'ordering': ('order',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='RecordQualityType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(verbose_name='Order')), + ], + options={ + 'verbose_name': 'Type of record quality', + 'verbose_name_plural': 'Types of record quality', + 'ordering': ('order',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='RecordRelations', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('left_record', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='right_relations', to='archaeological_operations.Operation')), + ], + options={ + 'verbose_name': 'Operation record relation', + 'verbose_name_plural': 'Operation record relations', + 'ordering': ('left_record', 'relation_type'), + 'permissions': [('view_operationrelation', 'Can view all Operation relations')], + }, + bases=(ishtar_common.models.GeneralRecordRelations, models.Model), + ), + migrations.CreateModel( + name='RelationType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=1, verbose_name='Order')), + ('symmetrical', models.BooleanField(verbose_name='Symmetrical')), + ('tiny_label', models.CharField(blank=True, max_length=50, null=True, verbose_name='Tiny label')), + ('logical_relation', models.CharField(blank=True, choices=[('above', 'Above'), ('below', 'Below'), ('equal', 'Equal')], max_length=10, null=True, verbose_name='Logical relation')), + ('inverse_relation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='archaeological_operations.RelationType', verbose_name='Inverse relation')), + ], + options={ + 'verbose_name': 'Operation relation type', + 'verbose_name_plural': 'Operation relation types', + 'ordering': ('order', 'label'), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='RemainType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Remain type', + 'verbose_name_plural': 'Remain types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='ReportState', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(verbose_name='Order')), + ], + options={ + 'verbose_name': 'Type of report state', + 'verbose_name_plural': 'Types of report state', + 'ordering': ('order',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.AddField( + model_name='recordrelations', + name='relation_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_operations.RelationType'), + ), + migrations.AddField( + model_name='recordrelations', + name='right_record', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='left_relations', to='archaeological_operations.Operation'), + ), + migrations.AddField( + model_name='operation', + name='periods', + field=models.ManyToManyField(blank=True, to='archaeological_operations.Period', verbose_name='Periods'), + ), + migrations.AddField( + model_name='operation', + name='protagonist', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='operation_protagonist', to='ishtar_common.Person', verbose_name='Name of the protagonist'), + ), + migrations.AddField( + model_name='operation', + name='record_quality_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_operations.RecordQualityType', verbose_name='Record quality'), + ), + migrations.AddField( + model_name='operation', + name='remains', + field=models.ManyToManyField(blank=True, to='archaeological_operations.RemainType', verbose_name='Remains'), + ), + migrations.AddField( + model_name='operation', + name='report_processing', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_operations.ReportState', verbose_name='Report processing'), + ), + migrations.AddField( + model_name='operation', + name='scientist', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='operation_scientist_responsability', to='ishtar_common.Person', verbose_name='In charge scientist'), + ), + migrations.AddField( + model_name='operation', + name='spatial_reference_system', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.SpatialReferenceSystem', verbose_name='Spatial Reference System'), + ), + migrations.AddField( + model_name='operation', + name='top_sites', + field=models.ManyToManyField(blank=True, related_name='top_operations', to='archaeological_operations.ArchaeologicalSite', verbose_name='Sites for which this operation is top operation'), + ), + migrations.AddField( + model_name='operation', + name='towns', + field=models.ManyToManyField(related_name='operations', to='ishtar_common.Town', verbose_name='Towns'), + ), + migrations.AddField( + model_name='historicaloperation', + name='record_quality_type', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_operations.RecordQualityType'), + ), + migrations.AddField( + model_name='historicaloperation', + name='report_processing', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_operations.ReportState'), + ), + migrations.AddField( + model_name='historicaloperation', + name='scientist', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person'), + ), + migrations.AddField( + model_name='historicaloperation', + name='spatial_reference_system', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.SpatialReferenceSystem'), + ), + migrations.AddField( + model_name='historicaladministrativeact', + name='operation', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_operations.Operation'), + ), + migrations.AddField( + model_name='historicaladministrativeact', + name='operator', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Organization'), + ), + migrations.AddField( + model_name='historicaladministrativeact', + name='scientist', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person'), + ), + migrations.AddField( + model_name='historicaladministrativeact', + name='signatory', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='cultural_attributions', + field=models.ManyToManyField(blank=True, to='archaeological_operations.CulturalAttributionType', verbose_name='Cultural attribution'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='documents', + field=models.ManyToManyField(blank=True, related_name='sites', to='ishtar_common.Document', verbose_name='Documents'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='history_creator', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='history_modifier', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_archaeological_operations_archaeologicalsite', to='ishtar_common.Import'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='lock_user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='main_image', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='main_image_sites', to='ishtar_common.Document', verbose_name='Main image'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='periods', + field=models.ManyToManyField(blank=True, to='archaeological_operations.Period', verbose_name='Periods'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='remains', + field=models.ManyToManyField(blank=True, to='archaeological_operations.RemainType', verbose_name='Remains'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='spatial_reference_system', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.SpatialReferenceSystem', verbose_name='Spatial Reference System'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='towns', + field=models.ManyToManyField(blank=True, related_name='sites', to='ishtar_common.Town', verbose_name='Towns'), + ), + migrations.AddField( + model_name='administrativeact', + name='operation', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='administrative_act', to='archaeological_operations.Operation', verbose_name='Operation'), + ), + migrations.AddField( + model_name='administrativeact', + name='operator', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='adminact_operator', to='ishtar_common.Organization', verbose_name='Archaeological preventive operator'), + ), + migrations.AddField( + model_name='administrativeact', + name='scientist', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='adminact_scientist', to='ishtar_common.Person', verbose_name='Scientist in charge'), + ), + migrations.AddField( + model_name='administrativeact', + name='signatory', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='signatory', to='ishtar_common.Person', verbose_name='Signatory'), + ), + migrations.AddIndex( + model_name='parcelowner', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='archaeologi_data_457021_gin'), + ), + migrations.AddIndex( + model_name='parcel', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='archaeologi_data_835f5e_gin'), + ), + migrations.AddIndex( + model_name='operation', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='archaeologi_data_8d8f9f_gin'), + ), + migrations.AddIndex( + model_name='archaeologicalsite', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='archaeologi_data_071fb5_gin'), + ), + migrations.AddIndex( + model_name='administrativeact', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='archaeologi_data_587bb3_gin'), + ), + ] diff --git a/archaeological_operations/migrations/0102_link_apps.py b/archaeological_operations/migrations/0102_link_apps.py new file mode 100644 index 000000000..45045b534 --- /dev/null +++ b/archaeological_operations/migrations/0102_link_apps.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_operations', '0101_squashed'), + ] + + operations = [ + migrations.AddField( + model_name='historicaladministrativeact', + name='treatment', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.Treatment'), + ), + migrations.AddField( + model_name='historicaladministrativeact', + name='treatment_file', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.TreatmentFile'), + ), + migrations.AddField( + model_name='administrativeact', + name='treatment', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='administrative_act', to='archaeological_finds.Treatment', verbose_name='Treatment'), + ), + migrations.AddField( + model_name='administrativeact', + name='treatment_file', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='administrative_act', to='archaeological_finds.TreatmentFile', verbose_name='Treatment request'), + ), + ] diff --git a/archaeological_warehouse/migrations/0101_squashed.py b/archaeological_warehouse/migrations/0101_squashed.py new file mode 100644 index 000000000..fb4745c10 --- /dev/null +++ b/archaeological_warehouse/migrations/0101_squashed.py @@ -0,0 +1,374 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.27 on 2020-01-23 18:21 +from __future__ import unicode_literals + +import datetime +from django.conf import settings +import django.contrib.gis.db.models.fields +import django.contrib.postgres.fields.jsonb +import django.contrib.postgres.indexes +import django.contrib.postgres.search +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import ishtar_common.models +import re +import uuid + + +class Migration(migrations.Migration): + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('ishtar_common', '0201_squashed'), + ("archaeological_warehouse", "0044_auto_20191216_1050") + ] + + operations = [ + migrations.CreateModel( + name='Collection', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('history_date', models.DateTimeField(default=datetime.datetime.now)), + ('name', models.CharField(blank=True, max_length=200, null=True, verbose_name='Name')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('history_creator', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator')), + ('history_modifier', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor')), + ('imports', models.ManyToManyField(blank=True, related_name='imported_archaeological_warehouse_collection', to='ishtar_common.Import')), + ('lock_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by')), + ], + options={ + 'verbose_name': 'Collection', + 'verbose_name_plural': 'Collection', + 'ordering': ('name',), + }, + bases=(ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate), + ), + migrations.CreateModel( + name='Container', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('qrcode', models.ImageField(blank=True, max_length=255, null=True, upload_to=ishtar_common.models.get_image_path)), + ('x', models.FloatField(blank=True, null=True, verbose_name='X')), + ('y', models.FloatField(blank=True, null=True, verbose_name='Y')), + ('z', models.FloatField(blank=True, null=True, verbose_name='Z')), + ('estimated_error_x', models.FloatField(blank=True, null=True, verbose_name='Estimated error for X')), + ('estimated_error_y', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Y')), + ('estimated_error_z', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Z')), + ('point', django.contrib.gis.db.models.fields.PointField(blank=True, dim=3, null=True, srid=4326, verbose_name='Point')), + ('point_2d', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point (2D)')), + ('point_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Point source')), + ('point_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Point source item')), + ('multi_polygon', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Multi polygon')), + ('multi_polygon_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Multi-polygon source')), + ('multi_polygon_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Multi polygon source item')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('history_date', models.DateTimeField(default=datetime.datetime.now)), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('reference', models.TextField(verbose_name='Container ref.')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Localisation')), + ('cached_location', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached location')), + ('cached_division', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached division')), + ('index', models.IntegerField(default=0, verbose_name='Container ID')), + ('old_reference', models.TextField(blank=True, null=True, verbose_name='Old reference')), + ('external_id', models.TextField(blank=True, null=True, verbose_name='External ID')), + ('auto_external_id', models.BooleanField(default=False, verbose_name='External ID is set automatically')), + ], + options={ + 'verbose_name': 'Container', + 'verbose_name_plural': 'Containers', + 'ordering': ('cached_label',), + 'permissions': (('view_container', 'Can view all Containers'), ('view_own_container', 'Can view own Container'), ('add_own_container', 'Can add own Container'), ('change_own_container', 'Can change own Container'), ('delete_own_container', 'Can delete own Container')), + }, + bases=(ishtar_common.models.DocumentItem, ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate, ishtar_common.models.ImageContainerModel, ishtar_common.models.OwnPerms, ishtar_common.models.MainItem), + ), + migrations.CreateModel( + name='ContainerLocalisation', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('reference', models.CharField(default='', max_length=200, verbose_name='Reference')), + ('container', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='division', to='archaeological_warehouse.Container', verbose_name='Container')), + ], + options={ + 'verbose_name': 'Container localisation', + 'verbose_name_plural': 'Container localisations', + 'ordering': ('container', 'division__order'), + }, + ), + migrations.CreateModel( + name='ContainerType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('length', models.IntegerField(blank=True, null=True, verbose_name='Length (mm)')), + ('width', models.IntegerField(blank=True, null=True, verbose_name='Width (mm)')), + ('height', models.IntegerField(blank=True, null=True, verbose_name='Height (mm)')), + ('volume', models.FloatField(blank=True, null=True, verbose_name='Volume (l)')), + ('reference', models.CharField(blank=True, max_length=300, null=True, verbose_name='Ref.')), + ], + options={ + 'verbose_name': 'Container type', + 'verbose_name_plural': 'Container types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='Warehouse', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('qrcode', models.ImageField(blank=True, max_length=255, null=True, upload_to=ishtar_common.models.get_image_path)), + ('x', models.FloatField(blank=True, null=True, verbose_name='X')), + ('y', models.FloatField(blank=True, null=True, verbose_name='Y')), + ('z', models.FloatField(blank=True, null=True, verbose_name='Z')), + ('estimated_error_x', models.FloatField(blank=True, null=True, verbose_name='Estimated error for X')), + ('estimated_error_y', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Y')), + ('estimated_error_z', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Z')), + ('point', django.contrib.gis.db.models.fields.PointField(blank=True, dim=3, null=True, srid=4326, verbose_name='Point')), + ('point_2d', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point (2D)')), + ('point_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Point source')), + ('point_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Point source item')), + ('multi_polygon', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Multi polygon')), + ('multi_polygon_source', models.CharField(blank=True, choices=[('T', 'Town'), ('P', 'Precise'), ('M', 'Polygon')], max_length=1, null=True, verbose_name='Multi-polygon source')), + ('multi_polygon_source_item', models.CharField(blank=True, max_length=100, null=True, verbose_name='Multi polygon source item')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('address', models.TextField(blank=True, null=True, verbose_name='Address')), + ('address_complement', models.TextField(blank=True, null=True, verbose_name='Address complement')), + ('postal_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Postal code')), + ('town', models.CharField(blank=True, max_length=150, null=True, verbose_name='Town (freeform)')), + ('country', models.CharField(blank=True, max_length=30, null=True, verbose_name='Country')), + ('alt_address', models.TextField(blank=True, null=True, verbose_name='Other address: address')), + ('alt_address_complement', models.TextField(blank=True, null=True, verbose_name='Other address: address complement')), + ('alt_postal_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Other address: postal code')), + ('alt_town', models.CharField(blank=True, max_length=70, null=True, verbose_name='Other address: town')), + ('alt_country', models.CharField(blank=True, max_length=30, null=True, verbose_name='Other address: country')), + ('phone', models.CharField(blank=True, max_length=18, null=True, verbose_name='Phone')), + ('phone_desc', models.CharField(blank=True, max_length=300, null=True, verbose_name='Phone description')), + ('phone2', models.CharField(blank=True, max_length=18, null=True, verbose_name='Phone description 2')), + ('phone_desc2', models.CharField(blank=True, max_length=300, null=True, verbose_name='Phone description 2')), + ('phone3', models.CharField(blank=True, max_length=18, null=True, verbose_name='Phone 3')), + ('phone_desc3', models.CharField(blank=True, max_length=300, null=True, verbose_name='Phone description 3')), + ('raw_phone', models.TextField(blank=True, null=True, verbose_name='Raw phone')), + ('mobile_phone', models.CharField(blank=True, max_length=18, null=True, verbose_name='Mobile phone')), + ('email', models.EmailField(blank=True, max_length=300, null=True, verbose_name='Email')), + ('alt_address_is_prefered', models.BooleanField(default=False, verbose_name='Alternative address is prefered')), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('name', models.CharField(max_length=200, verbose_name='Name')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('external_id', models.TextField(blank=True, null=True, verbose_name='External ID')), + ('auto_external_id', models.BooleanField(default=False, verbose_name='External ID is set automatically')), + ], + options={ + 'verbose_name': 'Warehouse', + 'verbose_name_plural': 'Warehouses', + 'permissions': (('view_warehouse', 'Can view all Warehouses'), ('view_own_warehouse', 'Can view own Warehouse'), ('add_own_warehouse', 'Can add own Warehouse'), ('change_own_warehouse', 'Can change own Warehouse'), ('delete_own_warehouse', 'Can delete own Warehouse')), + }, + bases=(ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, ishtar_common.models.DocumentItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate, ishtar_common.models.ImageContainerModel, ishtar_common.models.DashboardFormItem, ishtar_common.models.OwnPerms, ishtar_common.models.MainItem), + ), + migrations.CreateModel( + name='WarehouseDivision', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Warehouse division type', + 'verbose_name_plural': 'Warehouse division types', + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='WarehouseDivisionLink', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('order', models.IntegerField(default=10, verbose_name='Order')), + ('division', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_warehouse.WarehouseDivision')), + ('warehouse', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='divisions', to='archaeological_warehouse.Warehouse')), + ], + options={ + 'ordering': ('warehouse', 'order'), + }, + ), + migrations.CreateModel( + name='WarehouseType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Warehouse type', + 'verbose_name_plural': 'Warehouse types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.AddField( + model_name='warehouse', + name='associated_divisions', + field=models.ManyToManyField(blank=True, through='archaeological_warehouse.WarehouseDivisionLink', to='archaeological_warehouse.WarehouseDivision', verbose_name='Divisions'), + ), + migrations.AddField( + model_name='warehouse', + name='documents', + field=models.ManyToManyField(blank=True, related_name='warehouses', to='ishtar_common.Document', verbose_name='Documents'), + ), + migrations.AddField( + model_name='warehouse', + name='history_creator', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator'), + ), + migrations.AddField( + model_name='warehouse', + name='history_modifier', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor'), + ), + migrations.AddField( + model_name='warehouse', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_archaeological_warehouse_warehouse', to='ishtar_common.Import'), + ), + migrations.AddField( + model_name='warehouse', + name='lock_user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), + ), + migrations.AddField( + model_name='warehouse', + name='main_image', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='main_image_warehouses', to='ishtar_common.Document', verbose_name='Main image'), + ), + migrations.AddField( + model_name='warehouse', + name='organization', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='warehouses', to='ishtar_common.Organization', verbose_name='Organization'), + ), + migrations.AddField( + model_name='warehouse', + name='person_in_charge', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='warehouse_in_charge', to='ishtar_common.Person', verbose_name='Person in charge'), + ), + migrations.AddField( + model_name='warehouse', + name='precise_town', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.Town', verbose_name='Town (precise)'), + ), + migrations.AddField( + model_name='warehouse', + name='spatial_reference_system', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.SpatialReferenceSystem', verbose_name='Spatial Reference System'), + ), + migrations.AddField( + model_name='warehouse', + name='warehouse_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_warehouse.WarehouseType', verbose_name='Warehouse type'), + ), + migrations.AddField( + model_name='containerlocalisation', + name='division', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_warehouse.WarehouseDivisionLink', verbose_name='Division'), + ), + migrations.AddField( + model_name='container', + name='container_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_warehouse.ContainerType', verbose_name='Container type'), + ), + migrations.AddField( + model_name='container', + name='documents', + field=models.ManyToManyField(blank=True, related_name='containers', to='ishtar_common.Document', verbose_name='Documents'), + ), + migrations.AddField( + model_name='container', + name='history_creator', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator'), + ), + migrations.AddField( + model_name='container', + name='history_modifier', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor'), + ), + migrations.AddField( + model_name='container', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_archaeological_warehouse_container', to='ishtar_common.Import'), + ), + migrations.AddField( + model_name='container', + name='location', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='containers', to='archaeological_warehouse.Warehouse', verbose_name='Location (warehouse)'), + ), + migrations.AddField( + model_name='container', + name='lock_user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), + ), + migrations.AddField( + model_name='container', + name='main_image', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='main_image_containers', to='ishtar_common.Document', verbose_name='Main image'), + ), + migrations.AddField( + model_name='container', + name='responsible', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='owned_containers', to='archaeological_warehouse.Warehouse', verbose_name='Responsible warehouse'), + ), + migrations.AddField( + model_name='container', + name='spatial_reference_system', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.SpatialReferenceSystem', verbose_name='Spatial Reference System'), + ), + migrations.AddField( + model_name='collection', + name='warehouse', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='collections', to='archaeological_warehouse.Warehouse', verbose_name='Warehouse'), + ), + migrations.AlterUniqueTogether( + name='warehousedivisionlink', + unique_together=set([('warehouse', 'division')]), + ), + migrations.AddIndex( + model_name='warehouse', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='archaeologi_data_49b6ad_gin'), + ), + migrations.AlterUniqueTogether( + name='containerlocalisation', + unique_together=set([('container', 'division')]), + ), + migrations.AddIndex( + model_name='container', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='archaeologi_data_edae47_gin'), + ), + migrations.AlterUniqueTogether( + name='container', + unique_together=set([('index', 'responsible')]), + ), + migrations.AddIndex( + model_name='collection', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='archaeologi_data_4a4a83_gin'), + ), + ] diff --git a/install/ishtar-install b/install/ishtar-install index 26cd71cb0..7baa428b0 100755 --- a/install/ishtar-install +++ b/install/ishtar-install @@ -461,7 +461,7 @@ EOF python3-cairocffi python3-cffi libpangocairo-1.0-0 \ # weasyprint python3-cssselect2 python3-tinycss2 \ # weasyprint python3-pyphen python3-defusedxml \ # weasyprint - python3-markdown2 python3-jinja2 \ secretary + python3-markdown2 python3-jinja2 \ # secretary gettext memcached graphviz pandoc' ) # python3-reportlab ? fi diff --git a/ishtar_common/migrations/0201_squashed.py b/ishtar_common/migrations/0201_squashed.py new file mode 100644 index 000000000..e0b23b5ed --- /dev/null +++ b/ishtar_common/migrations/0201_squashed.py @@ -0,0 +1,1428 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.27 on 2020-01-23 18:21 +from __future__ import unicode_literals + +import datetime +from django.conf import settings +import django.contrib.gis.db.models.fields +import django.contrib.postgres.fields.jsonb +import django.contrib.postgres.indexes +import django.contrib.postgres.search +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import ishtar_common.models +import re +import uuid + + +class Migration(migrations.Migration): + initial = True + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('auth', '0008_alter_user_username_max_length'), + ('ishtar_common', '0117_auto_20191216_1027'), + ] + + operations = [ + migrations.CreateModel( + name='AdministrationScript', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('path', models.CharField(max_length=30, verbose_name='Filename')), + ('name', models.TextField(blank=True, null=True, verbose_name='Name')), + ], + options={ + 'verbose_name': 'Administration script', + 'verbose_name_plural': 'Administration scripts', + 'ordering': ['name'], + }, + ), + migrations.CreateModel( + name='AdministrationTask', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('state', models.CharField(choices=[('S', 'Scheduled'), ('P', 'In progress'), ('FE', 'Finished with errors'), ('F', 'Finished')], default='S', max_length=2, verbose_name='State')), + ('creation_date', models.DateTimeField(default=datetime.datetime.now)), + ('launch_date', models.DateTimeField(blank=True, null=True)), + ('finished_date', models.DateTimeField(blank=True, null=True)), + ('result', models.TextField(blank=True, null=True, verbose_name='Result')), + ('script', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.AdministrationScript')), + ], + options={ + 'verbose_name': 'Administration task', + 'verbose_name_plural': 'Administration tasks', + 'ordering': ['script'], + }, + ), + migrations.CreateModel( + name='Area', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('reference', models.CharField(blank=True, max_length=200, null=True, verbose_name='Reference')), + ('parent', models.ForeignKey(blank=True, help_text='Only four level of parent are managed.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='children', to='ishtar_common.Area', verbose_name='Parent')), + ], + options={ + 'verbose_name': 'Area', + 'verbose_name_plural': 'Areas', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='Arrondissement', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=30, verbose_name='Nom')), + ], + ), + migrations.CreateModel( + name='Author', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ], + options={ + 'verbose_name': 'Author', + 'verbose_name_plural': 'Authors', + 'ordering': ('author_type__order', 'person__name'), + 'permissions': (('view_author', 'Can view all Authors'), ('view_own_author', 'Can view own Author'), ('add_own_author', 'Can add own Author'), ('change_own_author', 'Can change own Author'), ('delete_own_author', 'Can delete own Author')), + }, + ), + migrations.CreateModel( + name='AuthorType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=1, verbose_name='Order')), + ], + options={ + 'verbose_name': 'Author type', + 'verbose_name_plural': 'Author types', + 'ordering': ['order', 'label'], + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='Canton', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=30, verbose_name='Nom')), + ('arrondissement', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.Arrondissement', verbose_name='Arrondissement')), + ], + ), + migrations.CreateModel( + name='CustomForm', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=250, verbose_name='Name')), + ('form', models.CharField(max_length=250, verbose_name='Form')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('enabled', models.BooleanField(default=True, help_text='Disable with caution: disabling a form with mandatory fields may lead to database errors.', verbose_name='Enable this form')), + ('apply_to_all', models.BooleanField(default=False, help_text='Apply this form to all users. If set to True, selecting user and user type is useless.', verbose_name='Apply to all')), + ], + options={ + 'verbose_name': 'Custom form', + 'verbose_name_plural': 'Custom forms', + 'ordering': ['name', 'form'], + }, + ), + migrations.CreateModel( + name='CustomFormJsonField', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.CharField(blank=True, default='', max_length=200, verbose_name='Label')), + ('order', models.IntegerField(default=1, verbose_name='Order')), + ('help_text', models.TextField(blank=True, null=True, verbose_name='Help')), + ('custom_form', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='json_fields', to='ishtar_common.CustomForm')), + ], + options={ + 'verbose_name': 'Custom form - Json data field', + 'verbose_name_plural': 'Custom form - Json data fields', + }, + ), + migrations.CreateModel( + name='Department', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.CharField(max_length=30, verbose_name='Label')), + ('number', models.CharField(max_length=3, unique=True, verbose_name='Number')), + ], + options={ + 'verbose_name': 'Department', + 'verbose_name_plural': 'Departments', + 'ordering': ['number'], + }, + ), + migrations.CreateModel( + name='Document', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('image', models.ImageField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=255, null=True, upload_to=ishtar_common.models.get_image_path)), + ('thumbnail', models.ImageField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=255, null=True, upload_to=ishtar_common.models.get_image_path)), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('qrcode', models.ImageField(blank=True, max_length=255, null=True, upload_to=ishtar_common.models.get_image_path)), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('title', models.TextField(blank=True, default='', verbose_name='Title')), + ('associated_file', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=255, null=True, upload_to=ishtar_common.models.get_image_path)), + ('index', models.IntegerField(blank=True, null=True, verbose_name='Index')), + ('external_id', models.TextField(blank=True, null=True, verbose_name='External ID')), + ('reference', models.TextField(blank=True, null=True, verbose_name='Ref.')), + ('internal_reference', models.TextField(blank=True, null=True, verbose_name='Internal ref.')), + ('scale', models.CharField(blank=True, max_length=30, null=True, verbose_name='Scale')), + ('authors_raw', models.CharField(blank=True, max_length=250, null=True, verbose_name='Authors (raw)')), + ('associated_url', models.URLField(blank=True, max_length=1000, null=True, verbose_name='Numerical ressource (web address)')), + ('receipt_date', models.DateField(blank=True, null=True, verbose_name='Receipt date')), + ('creation_date', models.DateField(blank=True, null=True, verbose_name='Creation date')), + ('receipt_date_in_documentation', models.DateField(blank=True, null=True, verbose_name='Receipt date in documentation')), + ('item_number', models.IntegerField(default=1, verbose_name='Number of items')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('additional_information', models.TextField(blank=True, null=True, verbose_name='Additional information')), + ('duplicate', models.NullBooleanField(verbose_name='Has a duplicate')), + ('associated_links', models.TextField(blank=True, null=True, verbose_name='Symbolic links')), + ('cache_related_label', models.TextField(blank=True, db_index=True, help_text='Cached value - do not edit', null=True, verbose_name='Related')), + ('authors', models.ManyToManyField(related_name='documents', to='ishtar_common.Author', verbose_name='Authors')), + ], + options={ + 'verbose_name': 'Document', + 'verbose_name_plural': 'Documents', + 'ordering': ('title',), + 'permissions': (('view_document', 'Peut voir tous les Documents'), ('view_own_document', 'Peut voir ses propres Documents'), ('add_own_document', 'Peut ajouter son propre Document'), ('change_own_document', 'Peut modifier ses propres Documents'), ('delete_own_document', 'Peut supprimer ses propres Documents')), + }, + bases=(ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, ishtar_common.models.OwnPerms, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate, ishtar_common.models.ImageContainerModel, ishtar_common.models.ValueGetter, ishtar_common.models.MainItem), + ), + migrations.CreateModel( + name='DocumentTemplate', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100, verbose_name='Name')), + ('slug', models.SlugField(max_length=100, unique=True, verbose_name='Slug')), + ('template', models.FileField(help_text='La taille maximale supportée pour le fichier est de 100 Mo.', upload_to='templates/%Y/', verbose_name='Template')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('for_labels', models.BooleanField(default=False, verbose_name='Used for labels')), + ('label_per_page', models.IntegerField(blank=True, help_text='Only relevant for label template', null=True, verbose_name='Number of label per page')), + ], + options={ + 'verbose_name': 'Document template', + 'verbose_name_plural': 'Document templates', + 'ordering': ['associated_model', 'name'], + }, + ), + migrations.CreateModel( + name='ExcludedField', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('field', models.CharField(max_length=250, verbose_name='Field')), + ('custom_form', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='excluded_fields', to='ishtar_common.CustomForm')), + ], + options={ + 'verbose_name': 'Excluded field', + 'verbose_name_plural': 'Excluded fields', + }, + ), + migrations.CreateModel( + name='ExportTask', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('filter_type', models.CharField(blank=True, choices=[('O', 'Operation'), ('S', 'Archaeological site'), ('CR', 'Context record'), ('F', 'Find'), ('W', 'Warehouse')], max_length=2, null=True, verbose_name='Filter on')), + ('filter_text', models.TextField(blank=True, help_text='Textual query on this item (try it on the main interface)', null=True, verbose_name='Filter query')), + ('geo', models.BooleanField(default=True, help_text='Geographic data can represent large volume of information. Geographic data can be excluded from the export', verbose_name='Export geographic data')), + ('state', models.CharField(choices=[('C', 'Created'), ('S', 'Scheduled'), ('P', 'In progress'), ('FE', 'Finished with errors'), ('F', 'Finished')], default='C', max_length=2, verbose_name='State')), + ('put_locks', models.BooleanField(default=False, verbose_name='Put locks on associated items')), + ('export_types', models.BooleanField(default=True, verbose_name='Export types')), + ('export_conf', models.BooleanField(default=True, verbose_name='Export configuration')), + ('export_importers', models.BooleanField(default=True, verbose_name='Export importers')), + ('export_geo', models.BooleanField(default=True, verbose_name='Export towns, areas...')), + ('export_dir', models.BooleanField(default=True, verbose_name='Export directory')), + ('export_docs', models.BooleanField(default=True, verbose_name='Export documents')), + ('export_items', models.BooleanField(default=True, verbose_name='Export main items')), + ('creation_date', models.DateTimeField(default=datetime.datetime.now)), + ('launch_date', models.DateTimeField(blank=True, null=True)), + ('finished_date', models.DateTimeField(blank=True, null=True)), + ('result', models.FileField(blank=True, null=True, upload_to='exports/%Y/%m/', verbose_name='Result')), + ('result_info', models.TextField(blank=True, null=True, verbose_name='Result information')), + ], + options={ + 'verbose_name': 'Archive - Export', + 'verbose_name_plural': 'Archive - Exports', + 'ordering': ['creation_date'], + }, + ), + migrations.CreateModel( + name='Format', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Format type', + 'verbose_name_plural': 'Format types', + 'ordering': ['label'], + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='FormaterType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('formater_type', models.CharField(choices=[('IntegerFormater', 'Integer'), ('FloatFormater', 'Float'), ('UnicodeFormater', 'String'), ('DateFormater', 'Date'), ('TypeFormater', 'Type'), ('YearFormater', 'Year'), ('InseeFormater', 'INSEE code'), ('StrToBoolean', 'String to boolean'), ('FileFormater', 'File'), ('UnknowType', 'Unknow type')], max_length=20, verbose_name='Formater type')), + ('options', models.CharField(blank=True, max_length=500, null=True, verbose_name='Options')), + ('many_split', models.CharField(blank=True, max_length=10, null=True, verbose_name='Split character(s)')), + ], + options={ + 'verbose_name': 'Importer - Formater type', + 'verbose_name_plural': 'Importer - Formater types', + 'ordering': ('formater_type', 'options'), + }, + ), + migrations.CreateModel( + name='GlobalVar', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('slug', models.SlugField(unique=True, verbose_name='Variable name')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description of the variable')), + ('value', models.TextField(blank=True, null=True, verbose_name='Value')), + ], + options={ + 'verbose_name': 'Global variable', + 'verbose_name_plural': 'Global variables', + 'ordering': ['slug'], + }, + bases=(models.Model, ishtar_common.models.Cached), + ), + migrations.CreateModel( + name='HistoricalOrganization', + fields=[ + ('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(blank=True, editable=False)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('address', models.TextField(blank=True, null=True, verbose_name='Address')), + ('address_complement', models.TextField(blank=True, null=True, verbose_name='Address complement')), + ('postal_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Postal code')), + ('town', models.CharField(blank=True, max_length=150, null=True, verbose_name='Town (freeform)')), + ('country', models.CharField(blank=True, max_length=30, null=True, verbose_name='Country')), + ('alt_address', models.TextField(blank=True, null=True, verbose_name='Other address: address')), + ('alt_address_complement', models.TextField(blank=True, null=True, verbose_name='Other address: address complement')), + ('alt_postal_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Other address: postal code')), + ('alt_town', models.CharField(blank=True, max_length=70, null=True, verbose_name='Other address: town')), + ('alt_country', models.CharField(blank=True, max_length=30, null=True, verbose_name='Other address: country')), + ('phone', models.CharField(blank=True, max_length=18, null=True, verbose_name='Phone')), + ('phone_desc', models.CharField(blank=True, max_length=300, null=True, verbose_name='Phone description')), + ('phone2', models.CharField(blank=True, max_length=18, null=True, verbose_name='Phone description 2')), + ('phone_desc2', models.CharField(blank=True, max_length=300, null=True, verbose_name='Phone description 2')), + ('phone3', models.CharField(blank=True, max_length=18, null=True, verbose_name='Phone 3')), + ('phone_desc3', models.CharField(blank=True, max_length=300, null=True, verbose_name='Phone description 3')), + ('raw_phone', models.TextField(blank=True, null=True, verbose_name='Raw phone')), + ('mobile_phone', models.CharField(blank=True, max_length=18, null=True, verbose_name='Mobile phone')), + ('email', models.EmailField(blank=True, max_length=300, null=True, verbose_name='Email')), + ('alt_address_is_prefered', models.BooleanField(default=False, verbose_name='Alternative address is prefered')), + ('merge_key', models.TextField(blank=True, null=True, verbose_name='Merge key')), + ('archived', models.NullBooleanField(default=False)), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('name', models.CharField(max_length=500, verbose_name='Name')), + ('url', models.URLField(blank=True, null=True, verbose_name='Web address')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('history_id', models.AutoField(primary_key=True, serialize=False)), + ('history_date', models.DateTimeField()), + ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), + ], + options={ + 'verbose_name': 'historical Organization', + 'ordering': ('-history_date', '-history_id'), + 'get_latest_by': 'history_date', + }, + ), + migrations.CreateModel( + name='HistoricalPerson', + fields=[ + ('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(blank=True, editable=False)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('address', models.TextField(blank=True, null=True, verbose_name='Address')), + ('address_complement', models.TextField(blank=True, null=True, verbose_name='Address complement')), + ('postal_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Postal code')), + ('town', models.CharField(blank=True, max_length=150, null=True, verbose_name='Town (freeform)')), + ('country', models.CharField(blank=True, max_length=30, null=True, verbose_name='Country')), + ('alt_address', models.TextField(blank=True, null=True, verbose_name='Other address: address')), + ('alt_address_complement', models.TextField(blank=True, null=True, verbose_name='Other address: address complement')), + ('alt_postal_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Other address: postal code')), + ('alt_town', models.CharField(blank=True, max_length=70, null=True, verbose_name='Other address: town')), + ('alt_country', models.CharField(blank=True, max_length=30, null=True, verbose_name='Other address: country')), + ('phone', models.CharField(blank=True, max_length=18, null=True, verbose_name='Phone')), + ('phone_desc', models.CharField(blank=True, max_length=300, null=True, verbose_name='Phone description')), + ('phone2', models.CharField(blank=True, max_length=18, null=True, verbose_name='Phone description 2')), + ('phone_desc2', models.CharField(blank=True, max_length=300, null=True, verbose_name='Phone description 2')), + ('phone3', models.CharField(blank=True, max_length=18, null=True, verbose_name='Phone 3')), + ('phone_desc3', models.CharField(blank=True, max_length=300, null=True, verbose_name='Phone description 3')), + ('raw_phone', models.TextField(blank=True, null=True, verbose_name='Raw phone')), + ('mobile_phone', models.CharField(blank=True, max_length=18, null=True, verbose_name='Mobile phone')), + ('email', models.EmailField(blank=True, max_length=300, null=True, verbose_name='Email')), + ('alt_address_is_prefered', models.BooleanField(default=False, verbose_name='Alternative address is prefered')), + ('merge_key', models.TextField(blank=True, null=True, verbose_name='Merge key')), + ('archived', models.NullBooleanField(default=False)), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('old_title', models.CharField(blank=True, choices=[('Mr', 'Mr'), ('Ms', 'Miss'), ('Mr and Miss', 'Mr and Mrs'), ('Md', 'Mrs'), ('Dr', 'Doctor')], max_length=100, null=True, verbose_name='Title')), + ('salutation', models.CharField(blank=True, max_length=200, null=True, verbose_name='Salutation')), + ('surname', models.CharField(blank=True, max_length=50, null=True, verbose_name='Surname')), + ('name', models.CharField(blank=True, max_length=200, null=True, verbose_name='Name')), + ('raw_name', models.CharField(blank=True, max_length=300, null=True, verbose_name='Raw name')), + ('contact_type', models.CharField(blank=True, max_length=300, null=True, verbose_name='Contact type')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('history_id', models.AutoField(primary_key=True, serialize=False)), + ('history_date', models.DateTimeField()), + ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), + ], + options={ + 'verbose_name': 'historical Person', + 'ordering': ('-history_date', '-history_id'), + 'get_latest_by': 'history_date', + }, + ), + migrations.CreateModel( + name='Import', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=500, null=True, verbose_name='Name')), + ('imported_file', models.FileField(help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=220, upload_to='upload/imports/%Y/%m/', verbose_name='Imported file')), + ('imported_images', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=220, null=True, upload_to='upload/imports/%Y/%m/', verbose_name='Associated images (zip file)')), + ('encoding', models.CharField(choices=[('windows-1252', 'windows-1252'), ('ISO-8859-15', 'ISO-8859-15'), ('utf-8', 'utf-8')], default='utf-8', max_length=15, verbose_name='Encoding')), + ('csv_sep', models.CharField(choices=[(',', ','), (';', ';')], default=',', help_text='Separator for CSV file. Standard is comma but Microsoft Excel do not follow this standard and use semi-colon.', max_length=1, verbose_name='CSV separator')), + ('skip_lines', models.IntegerField(default=1, help_text='Number of header lines in your file (can be 0).', verbose_name='Skip lines')), + ('error_file', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=255, null=True, upload_to='upload/imports/%Y/%m/', verbose_name='Error file')), + ('result_file', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=255, null=True, upload_to='upload/imports/%Y/%m/', verbose_name='Result file')), + ('match_file', models.FileField(blank=True, help_text='La taille maximale supportée pour le fichier est de 100 Mo.', max_length=255, null=True, upload_to='upload/imports/%Y/%m/', verbose_name='Match file')), + ('state', models.CharField(choices=[('C', 'Created'), ('AP', 'Analyse in progress'), ('A', 'Analysed'), ('HQ', 'Check modified in queue'), ('IQ', 'Import in queue'), ('HP', 'Check modified in progress'), ('IP', 'Import in progress'), ('PI', 'Partially imported'), ('FE', 'Finished with errors'), ('F', 'Finished'), ('AC', 'Archived')], default='C', max_length=2, verbose_name='State')), + ('conservative_import', models.BooleanField(default=False, help_text='If set to true, do not overload existing values.', verbose_name='Conservative import')), + ('creation_date', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Creation date')), + ('end_date', models.DateTimeField(auto_now_add=True, null=True, verbose_name='End date')), + ('seconds_remaining', models.IntegerField(blank=True, editable=False, null=True, verbose_name='Remaining seconds')), + ('current_line', models.IntegerField(blank=True, null=True, verbose_name='Current line')), + ('number_of_line', models.IntegerField(blank=True, null=True, verbose_name='Number of line')), + ('imported_line_numbers', models.TextField(blank=True, null=True, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:,\\d+)*\\Z', 32), code='invalid', message='Enter only digits separated by commas.')], verbose_name='Imported line numbers')), + ('changed_checked', models.BooleanField(default=False, verbose_name='Changed have been checked')), + ('changed_line_numbers', models.TextField(blank=True, null=True, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:,\\d+)*\\Z', 32), code='invalid', message='Enter only digits separated by commas.')], verbose_name='Changed line numbers')), + ], + options={ + 'verbose_name': 'Import', + 'verbose_name_plural': 'Imports', + }, + ), + migrations.CreateModel( + name='ImporterColumn', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.CharField(blank=True, max_length=200, null=True, verbose_name='Label')), + ('col_number', models.IntegerField(default=1, verbose_name='Column number')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('required', models.BooleanField(default=False, verbose_name='Required')), + ('export_field_name', models.CharField(blank=True, help_text='Fill this field if the field name is ambiguous for export. For instance: concatenated fields.', max_length=200, null=True, verbose_name='Export field name')), + ], + options={ + 'verbose_name': 'Importer - Column', + 'verbose_name_plural': 'Importer - Columns', + 'ordering': ('importer_type', 'col_number'), + }, + ), + migrations.CreateModel( + name='ImporterDefault', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('target', models.CharField(max_length=500, verbose_name='Target')), + ], + options={ + 'verbose_name': 'Importer - Default', + 'verbose_name_plural': 'Importer - Defaults', + }, + ), + migrations.CreateModel( + name='ImporterDefaultValues', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('target', models.CharField(max_length=500, verbose_name='Target')), + ('value', models.CharField(max_length=500, verbose_name='Value')), + ('default_target', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='default_values', to='ishtar_common.ImporterDefault')), + ], + options={ + 'verbose_name': 'Importer - Default value', + 'verbose_name_plural': 'Importer - Default values', + }, + ), + migrations.CreateModel( + name='ImporterDuplicateField', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('field_name', models.CharField(blank=True, max_length=200, null=True, verbose_name='Field name')), + ('force_new', models.BooleanField(default=False, verbose_name='Force creation of new items')), + ('concat', models.BooleanField(default=False, verbose_name='Concatenate with existing')), + ('concat_str', models.CharField(blank=True, max_length=5, null=True, verbose_name='Concatenate character')), + ('column', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='duplicate_fields', to='ishtar_common.ImporterColumn')), + ], + options={ + 'verbose_name': 'Importer - Duplicate field', + 'verbose_name_plural': 'Importer - Duplicate fields', + 'ordering': ('column', 'field_name'), + }, + ), + migrations.CreateModel( + name='ImporterModel', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, verbose_name='Name')), + ('klass', models.CharField(max_length=200, unique=True, verbose_name='Class name')), + ], + options={ + 'verbose_name': 'Model', + 'verbose_name_plural': 'Models', + 'ordering': ('name',), + }, + ), + migrations.CreateModel( + name='ImporterType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, verbose_name='Name')), + ('slug', models.SlugField(max_length=100, unique=True, verbose_name='Slug')), + ('description', models.CharField(blank=True, max_length=500, null=True, verbose_name='Description')), + ('is_template', models.BooleanField(default=False, verbose_name='Can be exported')), + ('unicity_keys', models.CharField(blank=True, max_length=500, null=True, verbose_name='Unicity keys (separator ";")')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('associated_models', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ishtar_common.ImporterModel', verbose_name='Associated model')), + ('created_models', models.ManyToManyField(blank=True, help_text='Leave blank for no restrictions', related_name='_importertype_created_models_+', to='ishtar_common.ImporterModel', verbose_name='Models that can accept new items')), + ], + options={ + 'verbose_name': 'Importer - Type', + 'verbose_name_plural': 'Importer - Types', + 'ordering': ('name',), + }, + ), + migrations.CreateModel( + name='ImportTarget', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('target', models.CharField(max_length=500, verbose_name='Target')), + ('force_new', models.BooleanField(default=False, verbose_name='Force creation of new items')), + ('concat', models.BooleanField(default=False, verbose_name='Concatenate with existing')), + ('concat_str', models.CharField(blank=True, max_length=5, null=True, verbose_name='Concatenate character')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('column', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='targets', to='ishtar_common.ImporterColumn')), + ('formater_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.FormaterType')), + ], + options={ + 'verbose_name': 'Importer - Target', + 'verbose_name_plural': 'Importer - Targets', + }, + ), + migrations.CreateModel( + name='ImportTask', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('creation_date', models.DateTimeField(default=datetime.datetime.now)), + ('launch_date', models.DateTimeField(blank=True, null=True)), + ('finished_date', models.DateTimeField(blank=True, null=True)), + ('state', models.CharField(choices=[('C', 'Created'), ('S', 'Scheduled'), ('P', 'In progress'), ('FE', 'Finished with errors'), ('F', 'Finished')], default='C', max_length=2, verbose_name='State')), + ('delete_before', models.BooleanField(default=False, help_text='Delete existing items before adding', verbose_name='Delete before adding')), + ('releasing_locks', models.BooleanField(default=False, verbose_name='Releasing locks on associated items')), + ('source', models.FileField(upload_to='imports/%Y/%m/', verbose_name='Source')), + ], + options={ + 'verbose_name': 'Archive - Import', + 'verbose_name_plural': 'Archive - Imports', + 'ordering': ['creation_date'], + }, + ), + migrations.CreateModel( + name='IshtarSiteProfile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Name')), + ('slug', models.SlugField(unique=True, verbose_name='Slug')), + ('active', models.BooleanField(default=False, verbose_name='Current active')), + ('experimental_feature', models.BooleanField(default=False, verbose_name='Activate experimental feature')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('warning_name', models.TextField(blank=True, verbose_name='Warning name')), + ('warning_message', models.TextField(blank=True, verbose_name='Warning message')), + ('config', models.CharField(blank=True, choices=[('DRASSM', 'DRASSM')], help_text='Choose an alternate configuration for label, index management', max_length=200, null=True, verbose_name='Alternate configuration')), + ('files', models.BooleanField(default=False, verbose_name='Files module')), + ('archaeological_site', models.BooleanField(default=False, verbose_name='Archaeological site module')), + ('archaeological_site_label', models.CharField(choices=[('site', 'Site'), ('entity', 'Archaeological entity')], default='site', max_length=200, verbose_name='Archaeological site type')), + ('context_record', models.BooleanField(default=False, verbose_name='Context records module')), + ('find', models.BooleanField(default=False, help_text='Need context records module', verbose_name='Finds module')), + ('find_index', models.CharField(choices=[('O', 'Operations'), ('CR', 'Context records')], default='O', help_text='To prevent irrelevant indexes, change this parameter only if there is no find in the database', max_length=2, verbose_name='Find index is based on')), + ('warehouse', models.BooleanField(default=False, help_text='Need finds module', verbose_name='Warehouses module')), + ('preservation', models.BooleanField(default=False, verbose_name='Preservation module')), + ('mapping', models.BooleanField(default=False, verbose_name='Mapping module')), + ('point_precision', models.IntegerField(blank=True, help_text='Number of digit to round from the decimal point for coordinates in WGS84 (latitude, longitude). Empty value means no round.', null=True, verbose_name='Point precision (search and sheets)')), + ('locate_warehouses', models.BooleanField(default=False, help_text='Mapping module must be activated. With many containers and background task not activated, activating this option may consume many resources.', verbose_name='Locate warehouse and containers')), + ('use_town_for_geo', models.BooleanField(default=True, verbose_name='Use town to locate when coordinates are missing')), + ('relation_graph', models.BooleanField(default=False, verbose_name='Generate relation graph')), + ('underwater', models.BooleanField(default=False, verbose_name='Underwater module')), + ('parcel_mandatory', models.BooleanField(default=True, verbose_name='Parcel are mandatory for context records')), + ('homepage', models.TextField(blank=True, help_text='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.', null=True, verbose_name='Home page')), + ('operation_prefix', models.CharField(blank=True, default='OA', max_length=20, null=True, verbose_name='Main operation code prefix')), + ('default_operation_prefix', models.CharField(blank=True, default='OP', max_length=20, null=True, verbose_name='Default operation code prefix')), + ('operation_region_code', models.CharField(blank=True, max_length=5, null=True, verbose_name='Operation region code')), + ('file_external_id', models.TextField(default='{year}-{numeric_reference}', help_text='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.', verbose_name='File external id')), + ('parcel_external_id', models.TextField(default='{associated_file__external_id}{operation__code_patriarche}-{town__numero_insee}-{section}{parcel_number}', help_text='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.', verbose_name='Parcel external id')), + ('context_record_external_id', models.TextField(default='{parcel__external_id}-{label}', help_text='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.', verbose_name='Context record external id')), + ('base_find_external_id', models.TextField(default='{context_record__external_id}-{label}', help_text='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.', verbose_name='Base find external id')), + ('find_external_id', models.TextField(default='{get_first_base_find__context_record__external_id}-{label}', help_text='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.', verbose_name='Find external id')), + ('container_external_id', models.TextField(default='{responsible__external_id}-{index}', help_text='Formula to manage container external ID. Change this with care. With incorrect formula, the application might be unusable and import of external data can be destructive.', verbose_name='Container external id')), + ('warehouse_external_id', models.TextField(default='{name|slug}', help_text='Formula to manage warehouse external ID. Change this with care. With incorrect formula, the application might be unusable and import of external data can be destructive.', verbose_name='Warehouse external id')), + ('document_external_id', models.TextField(default='{index}', help_text='Formula to manage document external ID. Change this with care. With incorrect formula, the application might be unusable and import of external data can be destructive.', verbose_name='Document external id')), + ('person_raw_name', models.TextField(default='{name|upper} {surname}', help_text='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.', verbose_name='Raw name for person')), + ('find_use_index', models.BooleanField(default=True, verbose_name='Use auto index for finds')), + ('currency', models.CharField(choices=[('€', 'Euro'), ('$', 'US dollar')], default='€', max_length=5, verbose_name='Currency')), + ('account_naming_style', models.CharField(choices=[('NF', 'name.firstname'), ('FN', 'firstname.name')], default='NF', max_length=2, verbose_name='Naming style for accounts')), + ('default_center', django.contrib.gis.db.models.fields.PointField(default='SRID=4326;POINT(2.4397 46.5528)', srid=4326, verbose_name='Maps - default center')), + ('default_zoom', models.IntegerField(default=6, verbose_name='Maps - default zoom')), + ], + options={ + 'verbose_name': 'Ishtar site profile', + 'verbose_name_plural': 'Ishtar site profiles', + 'ordering': ['label'], + }, + bases=(models.Model, ishtar_common.models.Cached), + ), + migrations.CreateModel( + name='IshtarUser', + fields=[ + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('user_ptr', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, related_name='ishtaruser', serialize=False, to=settings.AUTH_USER_MODEL)), + ('advanced_shortcut_menu', models.BooleanField(default=False, verbose_name='Advanced shortcut menu')), + ], + options={ + 'verbose_name': 'Ishtar user', + 'verbose_name_plural': 'Ishtar users', + }, + ), + migrations.CreateModel( + name='ItemKey', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('key', models.TextField(verbose_name='Key')), + ('object_id', models.PositiveIntegerField()), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ], + ), + migrations.CreateModel( + name='JsonDataField', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, verbose_name='Name')), + ('key', models.CharField(help_text='Value of the key in the JSON schema. For hierarchical key use "__" to explain it. For instance for the key \'my_subkey\' with data such as {\'my_key\': {\'my_subkey\': \'value\'}}, its value will be reached with my_key__my_subkey.', max_length=200, verbose_name='Key')), + ('display', models.BooleanField(default=True, verbose_name='Display')), + ('value_type', models.CharField(choices=[('T', 'Text'), ('LT', 'Long text'), ('I', 'Integer'), ('B', 'Boolean'), ('F', 'Float'), ('D', 'Date'), ('C', 'Choices')], default='T', max_length=10, verbose_name='Type')), + ('order', models.IntegerField(default=10, verbose_name='Order')), + ('search_index', models.BooleanField(default=False, verbose_name='Use in search indexes')), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ('custom_forms', models.ManyToManyField(blank=True, through='ishtar_common.CustomFormJsonField', to='ishtar_common.CustomForm')), + ], + options={ + 'verbose_name': 'Json data - Field', + 'verbose_name_plural': 'Json data - Fields', + 'ordering': ['order', 'name'], + }, + ), + migrations.CreateModel( + name='JsonDataSection', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, verbose_name='Name')), + ('order', models.IntegerField(default=10, verbose_name='Order')), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ], + options={ + 'verbose_name': 'Json data - Menu', + 'verbose_name_plural': 'Json data - Menus', + 'ordering': ['order', 'name'], + }, + ), + migrations.CreateModel( + name='LicenseType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('url', models.URLField(blank=True, null=True, verbose_name='URL')), + ], + options={ + 'verbose_name': 'License type', + 'verbose_name_plural': 'License types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='OperationType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=1, verbose_name='Order')), + ('preventive', models.BooleanField(default=True, verbose_name='Is preventive')), + ('judiciary', models.BooleanField(default=False, verbose_name='Is judiciary')), + ], + options={ + 'verbose_name': 'Operation type', + 'verbose_name_plural': 'Operation types', + 'ordering': ['judiciary', '-preventive', 'order', 'label'], + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='Organization', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('address', models.TextField(blank=True, null=True, verbose_name='Address')), + ('address_complement', models.TextField(blank=True, null=True, verbose_name='Address complement')), + ('postal_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Postal code')), + ('town', models.CharField(blank=True, max_length=150, null=True, verbose_name='Town (freeform)')), + ('country', models.CharField(blank=True, max_length=30, null=True, verbose_name='Country')), + ('alt_address', models.TextField(blank=True, null=True, verbose_name='Other address: address')), + ('alt_address_complement', models.TextField(blank=True, null=True, verbose_name='Other address: address complement')), + ('alt_postal_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Other address: postal code')), + ('alt_town', models.CharField(blank=True, max_length=70, null=True, verbose_name='Other address: town')), + ('alt_country', models.CharField(blank=True, max_length=30, null=True, verbose_name='Other address: country')), + ('phone', models.CharField(blank=True, max_length=18, null=True, verbose_name='Phone')), + ('phone_desc', models.CharField(blank=True, max_length=300, null=True, verbose_name='Phone description')), + ('phone2', models.CharField(blank=True, max_length=18, null=True, verbose_name='Phone description 2')), + ('phone_desc2', models.CharField(blank=True, max_length=300, null=True, verbose_name='Phone description 2')), + ('phone3', models.CharField(blank=True, max_length=18, null=True, verbose_name='Phone 3')), + ('phone_desc3', models.CharField(blank=True, max_length=300, null=True, verbose_name='Phone description 3')), + ('raw_phone', models.TextField(blank=True, null=True, verbose_name='Raw phone')), + ('mobile_phone', models.CharField(blank=True, max_length=18, null=True, verbose_name='Mobile phone')), + ('email', models.EmailField(blank=True, max_length=300, null=True, verbose_name='Email')), + ('alt_address_is_prefered', models.BooleanField(default=False, verbose_name='Alternative address is prefered')), + ('merge_key', models.TextField(blank=True, null=True, verbose_name='Merge key')), + ('archived', models.NullBooleanField(default=False)), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('name', models.CharField(max_length=500, verbose_name='Name')), + ('url', models.URLField(blank=True, null=True, verbose_name='Web address')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('history_creator', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator')), + ('history_modifier', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor')), + ('imports', models.ManyToManyField(blank=True, related_name='imported_ishtar_common_organization', to='ishtar_common.Import')), + ('lock_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by')), + ('merge_candidate', models.ManyToManyField(blank=True, related_name='_organization_merge_candidate_+', to='ishtar_common.Organization')), + ('merge_exclusion', models.ManyToManyField(blank=True, related_name='_organization_merge_exclusion_+', to='ishtar_common.Organization')), + ], + options={ + 'verbose_name': 'Organization', + 'verbose_name_plural': 'Organizations', + 'permissions': (('view_organization', 'Can view all Organizations'), ('view_own_organization', 'Can view own Organization'), ('add_own_organization', 'Can add own Organization'), ('change_own_organization', 'Can change own Organization'), ('delete_own_organization', 'Can delete own Organization')), + }, + bases=(ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate, ishtar_common.models.OwnPerms, ishtar_common.models.ValueGetter, ishtar_common.models.MainItem), + ), + migrations.CreateModel( + name='OrganizationType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Organization type', + 'verbose_name_plural': 'Organization types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='Person', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('last_modified', models.DateTimeField(auto_now=True)), + ('history_m2m', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('need_update', models.BooleanField(default=False, verbose_name='Need update')), + ('locked', models.BooleanField(default=False, verbose_name='Item locked for edition')), + ('address', models.TextField(blank=True, null=True, verbose_name='Address')), + ('address_complement', models.TextField(blank=True, null=True, verbose_name='Address complement')), + ('postal_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Postal code')), + ('town', models.CharField(blank=True, max_length=150, null=True, verbose_name='Town (freeform)')), + ('country', models.CharField(blank=True, max_length=30, null=True, verbose_name='Country')), + ('alt_address', models.TextField(blank=True, null=True, verbose_name='Other address: address')), + ('alt_address_complement', models.TextField(blank=True, null=True, verbose_name='Other address: address complement')), + ('alt_postal_code', models.CharField(blank=True, max_length=10, null=True, verbose_name='Other address: postal code')), + ('alt_town', models.CharField(blank=True, max_length=70, null=True, verbose_name='Other address: town')), + ('alt_country', models.CharField(blank=True, max_length=30, null=True, verbose_name='Other address: country')), + ('phone', models.CharField(blank=True, max_length=18, null=True, verbose_name='Phone')), + ('phone_desc', models.CharField(blank=True, max_length=300, null=True, verbose_name='Phone description')), + ('phone2', models.CharField(blank=True, max_length=18, null=True, verbose_name='Phone description 2')), + ('phone_desc2', models.CharField(blank=True, max_length=300, null=True, verbose_name='Phone description 2')), + ('phone3', models.CharField(blank=True, max_length=18, null=True, verbose_name='Phone 3')), + ('phone_desc3', models.CharField(blank=True, max_length=300, null=True, verbose_name='Phone description 3')), + ('raw_phone', models.TextField(blank=True, null=True, verbose_name='Raw phone')), + ('mobile_phone', models.CharField(blank=True, max_length=18, null=True, verbose_name='Mobile phone')), + ('email', models.EmailField(blank=True, max_length=300, null=True, verbose_name='Email')), + ('alt_address_is_prefered', models.BooleanField(default=False, verbose_name='Alternative address is prefered')), + ('merge_key', models.TextField(blank=True, null=True, verbose_name='Merge key')), + ('archived', models.NullBooleanField(default=False)), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('old_title', models.CharField(blank=True, choices=[('Mr', 'Mr'), ('Ms', 'Miss'), ('Mr and Miss', 'Mr and Mrs'), ('Md', 'Mrs'), ('Dr', 'Doctor')], max_length=100, null=True, verbose_name='Title')), + ('salutation', models.CharField(blank=True, max_length=200, null=True, verbose_name='Salutation')), + ('surname', models.CharField(blank=True, max_length=50, null=True, verbose_name='Surname')), + ('name', models.CharField(blank=True, max_length=200, null=True, verbose_name='Name')), + ('raw_name', models.CharField(blank=True, max_length=300, null=True, verbose_name='Raw name')), + ('contact_type', models.CharField(blank=True, max_length=300, null=True, verbose_name='Contact type')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('attached_to', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='members', to='ishtar_common.Organization', verbose_name='Is attached to')), + ('history_creator', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator')), + ('history_modifier', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor')), + ('imports', models.ManyToManyField(blank=True, related_name='imported_ishtar_common_person', to='ishtar_common.Import')), + ('lock_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by')), + ('merge_candidate', models.ManyToManyField(blank=True, related_name='_person_merge_candidate_+', to='ishtar_common.Person')), + ('merge_exclusion', models.ManyToManyField(blank=True, related_name='_person_merge_exclusion_+', to='ishtar_common.Person')), + ], + options={ + 'verbose_name': 'Person', + 'verbose_name_plural': 'Persons', + 'permissions': (('view_person', 'Can view all Persons'), ('view_own_person', 'Can view own Person'), ('add_own_person', 'Can add own Person'), ('change_own_person', 'Can change own Person'), ('delete_own_person', 'Can delete own Person')), + }, + bases=(ishtar_common.models.StatisticItem, ishtar_common.models.TemplateItem, models.Model, ishtar_common.models.CachedGen, ishtar_common.models.FixAssociated, ishtar_common.models.CascasdeUpdate, ishtar_common.models.OwnPerms, ishtar_common.models.ValueGetter, ishtar_common.models.MainItem), + ), + migrations.CreateModel( + name='PersonType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Person type', + 'verbose_name_plural': 'Person types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='ProfileType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('groups', models.ManyToManyField(blank=True, to='auth.Group', verbose_name='Groups')), + ], + options={ + 'verbose_name': 'Profile type', + 'verbose_name_plural': 'Profile types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='Regexp', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100, unique=True, verbose_name='Name')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('regexp', models.CharField(max_length=500, verbose_name='Regular expression')), + ], + options={ + 'verbose_name': 'Importer - Regular expression', + 'verbose_name_plural': 'Importer - Regular expressions', + }, + ), + migrations.CreateModel( + name='SearchQuery', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(blank=True, verbose_name='Label')), + ('query', models.TextField(blank=True, verbose_name='Query')), + ('is_alert', models.BooleanField(default=False, verbose_name='Is an alert')), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='Content type')), + ], + options={ + 'verbose_name': 'Search query', + 'verbose_name_plural': 'Search queries', + 'ordering': ['label'], + }, + ), + migrations.CreateModel( + name='SourceType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.SourceType', verbose_name='Parent')), + ], + options={ + 'verbose_name': 'Source type', + 'verbose_name_plural': 'Source types', + 'ordering': ['label'], + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='SpatialReferenceSystem', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=10, verbose_name='Order')), + ('auth_name', models.CharField(default='EPSG', max_length=256, verbose_name='Authority name')), + ('srid', models.IntegerField(verbose_name='Authority SRID')), + ], + options={ + 'verbose_name': 'Spatial reference system', + 'verbose_name_plural': 'Spatial reference systems', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='State', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.CharField(max_length=30, verbose_name='Label')), + ('number', models.CharField(max_length=3, unique=True, verbose_name='Number')), + ], + options={ + 'verbose_name': 'State', + 'ordering': ['number'], + }, + ), + migrations.CreateModel( + name='StatsCache', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('model', models.CharField(max_length=200, verbose_name='Model name')), + ('model_pk', models.IntegerField(verbose_name='Associated primary key')), + ('values', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={})), + ('updated', models.DateTimeField(default=datetime.datetime.now)), + ('update_requested', models.DateTimeField(blank=True, null=True)), + ], + options={ + 'verbose_name': 'Cache for stats', + 'verbose_name_plural': 'Caches for stats', + }, + ), + migrations.CreateModel( + name='SupportType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Support type', + 'verbose_name_plural': 'Support types', + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='TargetKey', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('key', models.TextField(verbose_name='Key')), + ('value', models.TextField(blank=True, null=True, verbose_name='Value')), + ('is_set', models.BooleanField(default=False, verbose_name='Is set')), + ], + options={ + 'verbose_name': 'Importer - Target key', + 'verbose_name_plural': 'Importer - Targets keys', + 'ordering': ('target', 'key'), + }, + ), + migrations.CreateModel( + name='TargetKeyGroup', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField(unique=True, verbose_name='Name')), + ('all_user_can_use', models.BooleanField(default=False, verbose_name='All users can use it')), + ('all_user_can_modify', models.BooleanField(default=False, verbose_name='All users can modify it')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Importer - Target key group', + 'verbose_name_plural': 'Importer - Target key groups', + }, + ), + migrations.CreateModel( + name='TinyUrl', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('link', models.URLField()), + ], + ), + migrations.CreateModel( + name='TitleType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z', 32), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ], + options={ + 'verbose_name': 'Title type', + 'verbose_name_plural': 'Title types', + 'ordering': ('label',), + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.CreateModel( + name='Town', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100, verbose_name='Name')), + ('surface', models.IntegerField(blank=True, null=True, verbose_name='Surface (m2)')), + ('center', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=27572, verbose_name='Localisation')), + ('limit', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Limit')), + ('numero_insee', models.CharField(max_length=120, verbose_name='Code commune (numéro INSEE)')), + ('year', models.IntegerField(blank=True, help_text='Filling this field is relevant to distinguish old towns from new towns.', null=True, verbose_name='Year of creation')), + ('cached_label', models.CharField(blank=True, db_index=True, max_length=500, null=True, verbose_name='Cached name')), + ('children', models.ManyToManyField(blank=True, related_name='parents', to='ishtar_common.Town', verbose_name='Town children')), + ('departement', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.Department', verbose_name='Department')), + ('imports', models.ManyToManyField(blank=True, related_name='imported_ishtar_common_town', to='ishtar_common.Import')), + ], + options={ + 'verbose_name': 'Town', + 'verbose_name_plural': 'Towns', + 'ordering': ['numero_insee'], + }, + ), + migrations.CreateModel( + name='UserProfile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(blank=True, default='', max_length=100, verbose_name='Name')), + ('current', models.BooleanField(default=False, verbose_name='Current profile')), + ('show_field_number', models.BooleanField(default=False, verbose_name='Show field number')), + ('auto_pin', models.BooleanField(default=False, verbose_name='Automatically pin')), + ('display_pin_menu', models.BooleanField(default=False, verbose_name='Display pin menu')), + ('areas', models.ManyToManyField(blank=True, related_name='profiles', to='ishtar_common.Area', verbose_name='Areas')), + ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='profiles', to='ishtar_common.Person', verbose_name='Person')), + ('profile_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.ProfileType', verbose_name='Profile type')), + ], + options={ + 'verbose_name': 'User profile', + 'verbose_name_plural': 'User profiles', + }, + ), + migrations.CreateModel( + name='ValueFormater', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100, unique=True, verbose_name='Name')), + ('slug', models.SlugField(max_length=100, unique=True, verbose_name='Slug')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('format_string', models.CharField(help_text='A string used to format a value using the Python "format()" method. The site https://pyformat.info/ provide good examples of usage. Only one "{}" entry is managed. The input is assumed to be a string.', max_length=100, verbose_name='Format string')), + ], + options={ + 'verbose_name': 'Importer - Value format', + 'verbose_name_plural': 'Importer - Value formats', + }, + ), + migrations.AddField( + model_name='targetkey', + name='associated_group', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.TargetKeyGroup'), + ), + migrations.AddField( + model_name='targetkey', + name='associated_import', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.Import'), + ), + migrations.AddField( + model_name='targetkey', + name='associated_user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='targetkey', + name='target', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='keys', to='ishtar_common.ImportTarget'), + ), + migrations.AddField( + model_name='searchquery', + name='profile', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.UserProfile', verbose_name='Profile'), + ), + migrations.AddField( + model_name='person', + name='person_types', + field=models.ManyToManyField(to='ishtar_common.PersonType', verbose_name='Types'), + ), + migrations.AddField( + model_name='person', + name='precise_town', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.Town', verbose_name='Town (precise)'), + ), + migrations.AddField( + model_name='person', + name='title', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.TitleType', verbose_name='Title'), + ), + migrations.AddField( + model_name='organization', + name='organization_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.OrganizationType', verbose_name='Type'), + ), + migrations.AddField( + model_name='organization', + name='precise_town', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.Town', verbose_name='Town (precise)'), + ), + migrations.AddField( + model_name='jsondatafield', + name='section', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.JsonDataSection'), + ), + migrations.AddField( + model_name='itemkey', + name='group', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.TargetKeyGroup'), + ), + migrations.AddField( + model_name='itemkey', + name='importer', + field=models.ForeignKey(blank=True, help_text='Specific key to an import', null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.Import'), + ), + migrations.AddField( + model_name='itemkey', + name='user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='ishtaruser', + name='person', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='ishtaruser', to='ishtar_common.Person', verbose_name='Person'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='display_srs', + field=models.ForeignKey(blank=True, help_text='Spatial Reference System used for display when no SRS is defined', null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.SpatialReferenceSystem', verbose_name='Spatial Reference System for display'), + ), + migrations.AddField( + model_name='importtask', + name='import_user', + field=models.ForeignKey(blank=True, help_text='If set the "Import user" will be the editor for last version. If the field is left empty no history will be recorded.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Import user'), + ), + migrations.AddField( + model_name='importertype', + name='users', + field=models.ManyToManyField(blank=True, to='ishtar_common.IshtarUser', verbose_name='Users'), + ), + migrations.AddField( + model_name='importerdefault', + name='importer_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='defaults', to='ishtar_common.ImporterType'), + ), + migrations.AddField( + model_name='importercolumn', + name='importer_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='columns', to='ishtar_common.ImporterType'), + ), + migrations.AddField( + model_name='importercolumn', + name='regexp_pre_filter', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.Regexp'), + ), + migrations.AddField( + model_name='importercolumn', + name='value_format', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.ValueFormater'), + ), + migrations.AddField( + model_name='import', + name='associated_group', + field=models.ForeignKey(blank=True, help_text='If a group is selected, target key saved in this group will be used.', null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.TargetKeyGroup'), + ), + migrations.AddField( + model_name='import', + name='importer_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.ImporterType'), + ), + migrations.AddField( + model_name='import', + name='user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='historicalperson', + name='attached_to', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Organization'), + ), + migrations.AddField( + model_name='historicalperson', + name='history_creator', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalperson', + name='history_modifier', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalperson', + name='history_user', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalperson', + name='lock_user', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalperson', + name='precise_town', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Town'), + ), + migrations.AddField( + model_name='historicalperson', + name='title', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.TitleType'), + ), + migrations.AddField( + model_name='historicalorganization', + name='history_creator', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalorganization', + name='history_modifier', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalorganization', + name='history_user', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalorganization', + name='lock_user', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='historicalorganization', + name='organization_type', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.OrganizationType'), + ), + migrations.AddField( + model_name='historicalorganization', + name='precise_town', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Town'), + ), + migrations.AlterUniqueTogether( + name='formatertype', + unique_together=set([('formater_type', 'options', 'many_split')]), + ), + migrations.AddField( + model_name='exporttask', + name='lock_user', + field=models.ForeignKey(blank=True, help_text='Owner of the lock if item are locked. Warning: if no user is provided the locks can be remove by any user with the permission to edit.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Lock user'), + ), + migrations.AddField( + model_name='documenttemplate', + name='associated_model', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.ImporterModel'), + ), + migrations.AddField( + model_name='document', + name='format_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.Format', verbose_name='Format'), + ), + migrations.AddField( + model_name='document', + name='history_creator', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Creator'), + ), + migrations.AddField( + model_name='document', + name='history_modifier', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Last editor'), + ), + migrations.AddField( + model_name='document', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_ishtar_common_document', to='ishtar_common.Import'), + ), + migrations.AddField( + model_name='document', + name='licenses', + field=models.ManyToManyField(blank=True, to='ishtar_common.LicenseType', verbose_name='License'), + ), + migrations.AddField( + model_name='document', + name='lock_user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), + ), + migrations.AddField( + model_name='document', + name='source_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.SourceType', verbose_name='Type'), + ), + migrations.AddField( + model_name='document', + name='support_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.SupportType', verbose_name='Support'), + ), + migrations.AddField( + model_name='department', + name='state', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.State', verbose_name='State'), + ), + migrations.AddField( + model_name='customformjsonfield', + name='json_field', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='custom_form_details', to='ishtar_common.JsonDataField'), + ), + migrations.AddField( + model_name='customform', + name='user_types', + field=models.ManyToManyField(blank=True, to='ishtar_common.PersonType'), + ), + migrations.AddField( + model_name='customform', + name='users', + field=models.ManyToManyField(blank=True, to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='author', + name='author_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.AuthorType', verbose_name='Author type'), + ), + migrations.AddField( + model_name='author', + name='person', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='author', to='ishtar_common.Person', verbose_name='Person'), + ), + migrations.AddField( + model_name='arrondissement', + name='department', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.Department', verbose_name='Département'), + ), + migrations.AddField( + model_name='area', + name='towns', + field=models.ManyToManyField(blank=True, related_name='areas', to='ishtar_common.Town', verbose_name='Towns'), + ), + migrations.CreateModel( + name='ProfileTypeSummary', + fields=[ + ], + options={ + 'verbose_name': 'Profile type summary', + 'verbose_name_plural': 'Profile types summary', + 'proxy': True, + 'indexes': [], + }, + bases=('ishtar_common.profiletype',), + ), + migrations.AlterUniqueTogether( + name='userprofile', + unique_together=set([('name', 'profile_type', 'person')]), + ), + migrations.AlterUniqueTogether( + name='town', + unique_together=set([('numero_insee', 'year')]), + ), + migrations.AlterUniqueTogether( + name='targetkey', + unique_together=set([('target', 'key', 'associated_user', 'associated_import')]), + ), + migrations.AddIndex( + model_name='person', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='ishtar_comm_data_a563fb_gin'), + ), + migrations.AddIndex( + model_name='organization', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='ishtar_comm_data_36ecc0_gin'), + ), + migrations.AlterUniqueTogether( + name='jsondatasection', + unique_together=set([('name', 'content_type')]), + ), + migrations.AlterUniqueTogether( + name='jsondatafield', + unique_together=set([('content_type', 'key')]), + ), + migrations.AlterUniqueTogether( + name='importtarget', + unique_together=set([('column', 'target')]), + ), + migrations.AlterUniqueTogether( + name='importerduplicatefield', + unique_together=set([('column', 'field_name')]), + ), + migrations.AlterUniqueTogether( + name='importerdefaultvalues', + unique_together=set([('default_target', 'target')]), + ), + migrations.AlterUniqueTogether( + name='importerdefault', + unique_together=set([('importer_type', 'target')]), + ), + migrations.AlterUniqueTogether( + name='importercolumn', + unique_together=set([('importer_type', 'col_number')]), + ), + migrations.AlterUniqueTogether( + name='excludedfield', + unique_together=set([('custom_form', 'field')]), + ), + migrations.AddIndex( + model_name='document', + index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='ishtar_comm_data_c6da6f_gin'), + ), + migrations.AlterUniqueTogether( + name='customformjsonfield', + unique_together=set([('custom_form', 'json_field')]), + ), + migrations.AlterUniqueTogether( + name='customform', + unique_together=set([('name', 'form')]), + ), + ] |