summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.md14
-rw-r--r--Makefile.example1
-rw-r--r--archaeological_context_records/forms.py4
-rw-r--r--archaeological_context_records/locale/django.pot6
-rw-r--r--archaeological_context_records/models.py14
-rw-r--r--archaeological_context_records/tests.py141
-rw-r--r--archaeological_context_records/tests/MCC-context-records-example.csv2
-rw-r--r--archaeological_files/locale/django.pot1
-rw-r--r--archaeological_files_pdl/templates/ishtar/wizard/wizard_instruction.html11
-rw-r--r--archaeological_files_pdl/templates/ishtar/wizard/wizard_person_orga.html11
-rw-r--r--archaeological_files_pdl/templates/ishtar/wizard/wizard_planningservice.html11
-rw-r--r--archaeological_files_pdl/templates/ishtar/wizard/wizard_preventiveplanning.html11
-rw-r--r--archaeological_finds/locale/django.pot1
-rw-r--r--archaeological_finds/templates/ishtar/sheet_find.html4
-rw-r--r--archaeological_finds/templates/ishtar/sheet_findbasket.html6
-rw-r--r--archaeological_finds/tests.py28
-rw-r--r--archaeological_operations/admin.py10
-rw-r--r--archaeological_operations/tests.py237
-rw-r--r--ishtar_common/admin.py8
-rw-r--r--ishtar_common/data_importer.py98
-rw-r--r--ishtar_common/fixtures/initial_importtypes-fr.json107
-rw-r--r--ishtar_common/locale/django.pot664
-rw-r--r--ishtar_common/migrations/0070_auto__add_importermodel__add_field_importertype_new_associated_models.py515
-rw-r--r--ishtar_common/migrations/0071_migrate_importermodels.py520
-rw-r--r--ishtar_common/migrations/0072_auto__del_field_importertype_new_associated_models__chg_field_importer.py489
-rw-r--r--ishtar_common/models.py78
-rw-r--r--ishtar_common/static/media/style.css8
-rw-r--r--ishtar_common/templates/ishtar/wizard/confirm_wizard.html15
-rw-r--r--ishtar_common/templates/ishtar/wizard/default_wizard.html10
-rw-r--r--ishtar_common/templates/ishtar/wizard/parcels_wizard.html11
-rw-r--r--ishtar_common/templates/ishtar/wizard/relations_wizard.html11
-rw-r--r--ishtar_common/tests.py31
-rw-r--r--ishtar_common/views.py6
-rw-r--r--ishtar_common/widgets.py2
-rw-r--r--translations/de/ishtar_common.po663
-rw-r--r--translations/fr/archaeological_context_records.po26
-rw-r--r--translations/fr/archaeological_files.po6
-rw-r--r--translations/fr/archaeological_finds.po8
-rw-r--r--translations/fr/archaeological_operations.po12
-rw-r--r--translations/fr/archaeological_warehouse.po6
-rw-r--r--translations/fr/ishtar_common.po687
-rw-r--r--version.py2
42 files changed, 3241 insertions, 1255 deletions
diff --git a/CHANGES.md b/CHANGES.md
index ddb825759..33ba9cf24 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,6 +1,20 @@
Ishtar changelog
================
+v0.99.11 (2017-02-06)
+---------------------
+### Features ###
+- Imports: manage model limitation (don't create items not in a whitelist)
+- Harmonize CSV import and CSV exports
+- Imports: multi format parse of dates
+- Find sheet: display treatment states in treatment table
+- Basket sheet: add basket name and basic informations
+- Admin: improve search and ordering
+- Update labels and translations
+
+### Bug fixes ###
+- Fix UI bug: validation button at the bottom of the page
+
v0.99.10 (2017-02-04)
---------------------
diff --git a/Makefile.example b/Makefile.example
index cc6eac60f..89cae31a1 100644
--- a/Makefile.example
+++ b/Makefile.example
@@ -175,6 +175,7 @@ fixtures_common: fixtures_common_importers fixtures_spatialrefsystem
fixtures_common_importers:
cd $(project); $(PYTHON) ./manage.py dumpdata --indent 4 \
+ ishtar_common.importermodel \
ishtar_common.importertype \
ishtar_common.regexp \
ishtar_common.importerdefault \
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py
index 0452243e2..953d33417 100644
--- a/archaeological_context_records/forms.py
+++ b/archaeological_context_records/forms.py
@@ -144,7 +144,7 @@ class RecordFormGeneral(ManageOldType, forms.Form):
width = forms.FloatField(label=_(u"Width (m)"), required=False)
thickness = forms.FloatField(label=_(u"Thickness (m)"), required=False)
depth = forms.FloatField(label=_(u"Depth (m)"), required=False)
- unit = forms.ChoiceField(label=_("Unit"), required=False, choices=[])
+ unit = forms.ChoiceField(label=_("Context record type"), required=False, choices=[])
has_furniture = forms.NullBooleanField(label=_(u"Has furniture?"),
required=False)
location = forms.CharField(
@@ -352,7 +352,7 @@ class RecordSourceSelect(SourceSelect):
context_record__datings__period = forms.ChoiceField(
label=_(u"Period of the context record"), choices=[])
context_record__unit = forms.ChoiceField(
- label=_(u"Unit type of the context record"), choices=[])
+ label=_(u"Context record type"), choices=[])
def __init__(self, *args, **kwargs):
super(RecordSourceSelect, self).__init__(*args, **kwargs)
diff --git a/archaeological_context_records/locale/django.pot b/archaeological_context_records/locale/django.pot
index 75e6a2160..e42400f29 100644
--- a/archaeological_context_records/locale/django.pot
+++ b/archaeological_context_records/locale/django.pot
@@ -3,7 +3,7 @@
# This file is distributed under the same license as the Ishtar package.
# Étienne Loks <etienne.loks at peacefrogs net>, 2010-2015.
# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
-# Étienne Loks <etienne.loks@iggdrasil.net>, 2017. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2017. #zanata
msgid ""
msgstr ""
@@ -253,11 +253,11 @@ msgid "Dating types"
msgstr ""
#: models.py:47
-msgid "Dating quality"
+msgid "Dating quality type"
msgstr ""
#: models.py:48
-msgid "Dating qualities"
+msgid "Dating quality types"
msgstr ""
#: models.py:62
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index 9714673e6..377cea087 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -76,12 +76,12 @@ class Dating(models.Model):
class Unit(GeneralType):
order = models.IntegerField(_(u"Order"))
- parent = models.ForeignKey("Unit", verbose_name=_(u"Parent unit"),
+ parent = models.ForeignKey("Unit", verbose_name=_(u"Parent context record type"),
blank=True, null=True)
class Meta:
- verbose_name = _(u"Unit Type")
- verbose_name_plural = _(u"Unit Types")
+ verbose_name = _(u"Context record Type")
+ verbose_name_plural = _(u"Context record Types")
ordering = ('order', 'label')
def __unicode__(self):
@@ -193,7 +193,7 @@ class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms,
datings = models.ManyToManyField(Dating)
datings_comment = models.TextField(_(u"Comment on datings"), blank=True,
null=True)
- unit = models.ForeignKey(Unit, verbose_name=_(u"Unit"), related_name='+',
+ unit = models.ForeignKey(Unit, verbose_name=_(u"Context record type"), related_name='+',
blank=True, null=True)
has_furniture = models.NullBooleanField(_(u"Has furniture?"), blank=True,
null=True)
@@ -410,13 +410,13 @@ class RecordRelations(GeneralRecordRelations, models.Model):
]
COL_LABELS = {
"left_record__label": _(u"ID (left)"),
- "left_record__unit": _(u"Unit (left)"),
+ "left_record__unit": _(u"Context record type (left)"),
"left_record__parcel": _(u"Parcel (left)"),
"left_record__description": _(u"Description (left)"),
"left_record__datings__period": _(u"Periods (left)"),
"relation_type": _(u"Relation type"),
"right_record__label": _(u"ID (right)"),
- "right_record__unit": _(u"Unit (right)"),
+ "right_record__unit": _(u"Context record type (right)"),
"right_record__parcel": _(u"Parcel (right)"),
"right_record__description": _(u"Description (right)"),
"right_record__datings__period": _(u"Periods (right)")
@@ -454,7 +454,7 @@ class RecordRelationView(models.Model):
COL_LABELS = {
"relation_type": _(u"Relation type"),
"right_record__label": _(u"ID"),
- "right_record__unit": _(u"Unit"),
+ "right_record__unit": _(u"Context record type"),
"right_record__parcel": _(u"Parcel"),
"right_record__description": _(u"Description"),
"right_record__datings__period": _(u"Periods")
diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py
index 87eb80c57..f1e6581d7 100644
--- a/archaeological_context_records/tests.py
+++ b/archaeological_context_records/tests.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2015 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2015-2017 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -20,76 +20,129 @@
import json
from django.conf import settings
-from django.core.exceptions import ValidationError
-from django.core.files.uploadedfile import SimpleUploadedFile
+from django.core.exceptions import ValidationError, ImproperlyConfigured
from django.core.urlresolvers import reverse
from django.test import TestCase
from django.test.client import Client
-from ishtar_common.models import ImporterType, IshtarSiteProfile
+from ishtar_common.models import IshtarSiteProfile, ImporterModel
from ishtar_common.tests import create_superuser
from archaeological_operations.tests import OperationInitTest, \
- ImportOperationTest
+ ImportTest, ImportOperationTest
from archaeological_operations import models as models_ope
from archaeological_context_records import models
-from ishtar_common import forms_common
-class ImportContextRecordTest(ImportOperationTest):
- test_operations = False
- test_context_records = True
+class ImportContextRecordTest(ImportTest, TestCase):
fixtures = ImportOperationTest.fixtures + [
settings.ROOT_PATH +
'../archaeological_context_records/fixtures/initial_data-fr.json',
]
- def testMCCImportContextRecords(self, test=True):
- if test and not self.test_context_records:
- return
- self.testMCCImportParcels(test=False)
-
+ def test_mcc_import_contextrecords(self):
old_nb = models.ContextRecord.objects.count()
- MCC = ImporterType.objects.get(name=u"MCC - UE")
- mcc_file = open(
- settings.ROOT_PATH +
- '../archaeological_context_records/tests/'
- 'MCC-context-records-example.csv', 'rb')
- file_dict = {'imported_file': SimpleUploadedFile(mcc_file.name,
- mcc_file.read())}
- post_dict = {'importer_type': MCC.pk, 'skip_lines': 1,
- "encoding": 'utf-8'}
- form = forms_common.NewImportForm(data=post_dict, files=file_dict,
- instance=None)
- form.is_valid()
- if test:
- self.assertTrue(form.is_valid())
+ mcc, form = self.init_context_record_import()
+
+ self.assertTrue(form.is_valid())
impt = form.save(self.ishtar_user)
impt.initialize()
- # doing manual connections
- hc = models.Unit.objects.get(txt_idx='not_in_context').pk
- self.setTargetKey('unit', 'hc', hc)
- self.setTargetKey('unit', 'hors-contexte', hc)
- layer = models.Unit.objects.get(txt_idx='layer').pk
- self.setTargetKey('unit', 'couche', layer)
-
+ self.init_cr_targetkey(impt)
impt.importation()
- if not test:
- return
-
- # new ues has now been imported
+ # new context records has now been imported
current_nb = models.ContextRecord.objects.count()
- self.assertTrue(current_nb == (old_nb + 4))
+ self.assertEqual(current_nb, old_nb + 4)
self.assertEqual(
- models.ContextRecord.objects.filter(unit__pk=hc).count(), 3)
+ models.ContextRecord.objects.filter(
+ unit__txt_idx='not_in_context').count(), 3)
self.assertEqual(
- models.ContextRecord.objects.filter(unit__pk=layer).count(), 1)
+ models.ContextRecord.objects.filter(
+ unit__txt_idx='layer').count(), 1)
+ def test_model_limitation(self):
+ old_nb = models.ContextRecord.objects.count()
+ mcc, form = self.init_context_record_import()
+ mcc.created_models.clear()
+
+ self.assertTrue(form.is_valid())
+ impt = form.save(self.ishtar_user)
+ impt.initialize()
+
+ self.init_cr_targetkey(impt)
+ impt.importation()
+ # no model defined in created_models: normal import
+ current_nb = models.ContextRecord.objects.count()
+ self.assertEqual(current_nb, old_nb + 4)
+
+ # add an inadequate model to make created_models non empty
+ for cr in models.ContextRecord.objects.all():
+ cr.delete()
+ mcc, form = self.init_context_record_import()
+ mcc.created_models.clear()
+ mcc.created_models.add(ImporterModel.objects.get(
+ klass='ishtar_common.models.Organization'
+ ))
+ impt = form.save(self.ishtar_user)
+ impt.initialize()
+ self.init_cr_targetkey(impt)
+ # Dating is not in models that can be created but force new is
+ # set for a column that references Dating
+ with self.assertRaises(ImproperlyConfigured):
+ impt.importation()
+
+ # retry with only Dating (no context record)
+ for cr in models.ContextRecord.objects.all():
+ cr.delete()
+ mcc, form = self.init_context_record_import()
+ mcc.created_models.clear()
+ dat_model, c = ImporterModel.objects.get_or_create(
+ klass='archaeological_context_records.models.Dating',
+ defaults={"name": 'Dating'})
+ mcc.created_models.add(dat_model)
+ impt = form.save(self.ishtar_user)
+ impt.initialize()
+ self.init_cr_targetkey(impt)
+ impt.importation()
+
+ current_nb = models.ContextRecord.objects.count()
+ self.assertEqual(current_nb, 0)
+
+ # add a context record model
+ for cr in models.ContextRecord.objects.all():
+ cr.delete()
+ mcc, form = self.init_context_record_import()
+ mcc.created_models.clear()
+ mcc.created_models.add(ImporterModel.objects.get(
+ klass='archaeological_context_records.models.ContextRecord'
+ ))
+ mcc.created_models.add(dat_model)
+ impt = form.save(self.ishtar_user)
+ impt.initialize()
+ self.init_cr_targetkey(impt)
+ impt.importation()
+ current_nb = models.ContextRecord.objects.count()
+ self.assertEqual(current_nb, 4)
+ '''
+
+ # add a context record model
+ for cr in models.ContextRecord.objects.all():
+ cr.delete()
+ mcc, form = self.init_context_record_import()
+ mcc.created_models.clear()
+ mcc.created_models.add(ImporterModel.objects.get(
+ klass='archaeological_context_records.models.ContextRecord'
+ ))
+ impt = form.save(self.ishtar_user)
+ impt.initialize()
+ self.init_cr_targetkey(impt)
+ impt.importation()
+ current_nb = models.ContextRecord.objects.count()
+ self.assertEqual(current_nb, 4)
+ '''
-class ContextRecordInit(OperationInitTest):
- test_operations = False
+class ContextRecordInit(OperationInitTest):
def create_context_record(self, user=None, data={}, force=False):
if not getattr(self, 'context_records', None):
self.context_records = []
diff --git a/archaeological_context_records/tests/MCC-context-records-example.csv b/archaeological_context_records/tests/MCC-context-records-example.csv
index d246623cd..9a6ad5f09 100644
--- a/archaeological_context_records/tests/MCC-context-records-example.csv
+++ b/archaeological_context_records/tests/MCC-context-records-example.csv
@@ -1,5 +1,5 @@
code OA,numero INSEE commune,identifiant parcelle,identifiant UE,type,description,interpretation,date ouverture,date fermeture,identifiant document georeferencement,commentaire,nature,chronologie
4200,75101,XXXX,HC,Hors contexte,UE globale pour cette parcelle,Non-applicable,,,,UE virtuelle,,
4200,75101,XXXX,H.-C.,HC,UE globale pour cette parcelle,NA,,,,UE virtuelle,,
-4200,59350,YY55,XXXXXX,HC,UE globale pour cette parcelle,,,,,UE virtuelle,,
+4200,59350,YY55,XXXXXX,HC,UE globale pour cette parcelle,,,,,UE virtuelle,,paleolithic
4200,59350,YY55,US17,couche,couche de cendre,comblement,,,,présence de charbons,,indéterminé
diff --git a/archaeological_files/locale/django.pot b/archaeological_files/locale/django.pot
index 111ba45c4..3eecfc8cd 100644
--- a/archaeological_files/locale/django.pot
+++ b/archaeological_files/locale/django.pot
@@ -5,6 +5,7 @@
# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata
# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2017. #zanata
msgid ""
msgstr ""
diff --git a/archaeological_files_pdl/templates/ishtar/wizard/wizard_instruction.html b/archaeological_files_pdl/templates/ishtar/wizard/wizard_instruction.html
index f579a9d47..72dc1d35d 100644
--- a/archaeological_files_pdl/templates/ishtar/wizard/wizard_instruction.html
+++ b/archaeological_files_pdl/templates/ishtar/wizard/wizard_instruction.html
@@ -58,9 +58,14 @@
<input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
{{ previous_fields|safe }}
-{% block "validation_bar" %}
-{% include 'ishtar/wizard/validation_bar.html' %}
-{% endblock %}
+ {% block "footer" %}
+ <div id="footer">
+ {% block "validation_bar" %}
+ {% include 'ishtar/wizard/validation_bar.html' %}
+ {% endblock %}
+ {% include 'ishtar/blocks/footer.html' %}
+ </div>
+ {% endblock %}
</div>
</form>
<script type='text/javascript'>
diff --git a/archaeological_files_pdl/templates/ishtar/wizard/wizard_person_orga.html b/archaeological_files_pdl/templates/ishtar/wizard/wizard_person_orga.html
index d520c1ec8..36f1aa4f8 100644
--- a/archaeological_files_pdl/templates/ishtar/wizard/wizard_person_orga.html
+++ b/archaeological_files_pdl/templates/ishtar/wizard/wizard_person_orga.html
@@ -62,9 +62,14 @@ $(function() {
<input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
{{ previous_fields|safe }}
-{% block "validation_bar" %}
-{% include 'ishtar/wizard/validation_bar.html' %}
-{% endblock %}
+ {% block "footer" %}
+ <div id="footer">
+ {% block "validation_bar" %}
+ {% include 'ishtar/wizard/validation_bar.html' %}
+ {% endblock %}
+ {% include 'ishtar/blocks/footer.html' %}
+ </div>
+ {% endblock %}
</div>
</form>
{% endblock %}
diff --git a/archaeological_files_pdl/templates/ishtar/wizard/wizard_planningservice.html b/archaeological_files_pdl/templates/ishtar/wizard/wizard_planningservice.html
index bfa490680..5eb7c014b 100644
--- a/archaeological_files_pdl/templates/ishtar/wizard/wizard_planningservice.html
+++ b/archaeological_files_pdl/templates/ishtar/wizard/wizard_planningservice.html
@@ -37,9 +37,14 @@
<input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
{{ previous_fields|safe }}
-{% block "validation_bar" %}
-{% include 'ishtar/wizard/validation_bar.html' %}
-{% endblock %}
+ {% block "footer" %}
+ <div id="footer">
+ {% block "validation_bar" %}
+ {% include 'ishtar/wizard/validation_bar.html' %}
+ {% endblock %}
+ {% include 'ishtar/blocks/footer.html' %}
+ </div>
+ {% endblock %}
</div>
</form>
{% endblock %}
diff --git a/archaeological_files_pdl/templates/ishtar/wizard/wizard_preventiveplanning.html b/archaeological_files_pdl/templates/ishtar/wizard/wizard_preventiveplanning.html
index 304b58b76..95e8e8841 100644
--- a/archaeological_files_pdl/templates/ishtar/wizard/wizard_preventiveplanning.html
+++ b/archaeological_files_pdl/templates/ishtar/wizard/wizard_preventiveplanning.html
@@ -103,9 +103,14 @@
<input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
{{ previous_fields|safe }}
-{% block "validation_bar" %}
-{% include 'ishtar/wizard/validation_bar.html' %}
-{% endblock %}
+ {% block "footer" %}
+ <div id="footer">
+ {% block "validation_bar" %}
+ {% include 'ishtar/wizard/validation_bar.html' %}
+ {% endblock %}
+ {% include 'ishtar/blocks/footer.html' %}
+ </div>
+ {% endblock %}
</div>
</form>
{% endblock %}
diff --git a/archaeological_finds/locale/django.pot b/archaeological_finds/locale/django.pot
index 819cf38bf..b25eac027 100644
--- a/archaeological_finds/locale/django.pot
+++ b/archaeological_finds/locale/django.pot
@@ -4,7 +4,6 @@
# Étienne Loks <etienne.loks at peacefrogs net>, 2010-2015.
# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
# Valérie-Emma Leroux <emma@iggdrasil.net>, 2017. #zanata
-# Étienne Loks <etienne.loks@iggdrasil.net>, 2017. #zanata
msgid ""
msgstr ""
diff --git a/archaeological_finds/templates/ishtar/sheet_find.html b/archaeological_finds/templates/ishtar/sheet_find.html
index bb2e629c7..4ae6dbffe 100644
--- a/archaeological_finds/templates/ishtar/sheet_find.html
+++ b/archaeological_finds/templates/ishtar/sheet_find.html
@@ -95,6 +95,7 @@
<th>{% trans "Year - index" %}</th>
<th>{% trans "Label" %}</th>
<th>{% trans "Type" %}</th>
+ <th>{% trans "State" %}</th>
<th>{% trans "Related finds (max. 15 displayed)" %}</th>
<th>{% trans "Doer" %}</th>
<th>{% trans "Container" %}</th>
@@ -112,6 +113,7 @@
<td class='string'>{{ treatment.year }} - {{treatment.index}}</td>
<td class='string'>{{ treatment.label|default_if_none:"-" }}</td>
<td class='string'>{{ treatment.treatment_types_lbl }}</td>
+ <td class='string'>{{ treatment.treatment_state|default_if_none:"-" }}</td>
<td class='item-list'>{% for item in items %}<span>{{item}} {{ item|link_to_window}}</span>{% endfor %}</td>
<td class='string'>{{ treatment.person|default_if_none:"-" }}</td>
<td class='string'>{{ treatment.container|default_if_none:"-" }}</td>
@@ -135,6 +137,7 @@
<th>{% trans "Year - index" %}</th>
<th>{% trans "Label" %}</th>
<th>{% trans "Type" %}</th>
+ <th>{% trans "State" %}</th>
<th>{% trans "Related finds (max. 15 displayed)" %}</th>
<th>{% trans "Doer" %}</th>
<th>{% trans "Container" %}</th>
@@ -152,6 +155,7 @@
<td class='string'>{{ treatment.year }} - {{treatment.index}}</td>
<td class='string'>{{ treatment.label }}</td>
<td class='string'>{{ treatment.treatment_types_lbl }}</td>
+ <td class='string'>{{ treatment.treatment_state|default_if_none:"-" }}</td>
<td class='item-list'>{% for item in items %}<span>{{item}} {{ item|link_to_window}}</span>{% endfor %}</td>
<td class='string'>{{ treatment.person|default_if_none:"" }}</td>
<td class='string'>{{ treatment.container|default_if_none:"-" }}</td>
diff --git a/archaeological_finds/templates/ishtar/sheet_findbasket.html b/archaeological_finds/templates/ishtar/sheet_findbasket.html
index 7738a872d..6f8b12e6d 100644
--- a/archaeological_finds/templates/ishtar/sheet_findbasket.html
+++ b/archaeological_finds/templates/ishtar/sheet_findbasket.html
@@ -1,9 +1,13 @@
{% extends "ishtar/sheet.html" %}
-{% load i18n window_tables window_header from_dict %}
+{% load i18n window_tables window_header from_dict window_field %}
{% block head_title %}{% trans "Find basket" %}{% endblock %}
{% block content %}
+
{% window_nav item window_id 'show-findbasket' 'select_itemsinbasket' %}
+<p class="window-refs">{{ item.label|default:"" }}</p>
+{% field "Owned by" item.user %}
+{% field "Comment" item.comment %}
{% dynamic_table_document_large finds 'finds_for_ope' 'basket' item.pk 'TABLE_COLS_FOR_OPE' output %}
{% endblock %}
diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py
index f0112123b..a1dc33dd8 100644
--- a/archaeological_finds/tests.py
+++ b/archaeological_finds/tests.py
@@ -33,11 +33,12 @@ from archaeological_context_records.models import Period, Dating
from archaeological_finds import models, views
from archaeological_warehouse.models import Warehouse, WarehouseType
-from archaeological_context_records.tests import ImportContextRecordTest, \
- ContextRecordInit
-
from ishtar_common import forms_common
+
from ishtar_common.tests import WizardTest, WizardTestFormData as FormData
+from archaeological_operations.tests import ImportTest
+from archaeological_context_records.tests import ImportContextRecordTest, \
+ ContextRecordInit
class FindInit(ContextRecordInit):
@@ -217,17 +218,14 @@ class ATreatmentWizardCreationTest(WizardTest, FindInit, TestCase):
treat)
-class ImportFindTest(ImportContextRecordTest):
- test_operations = False
- test_context_records = False
-
+class ImportFindTest(ImportTest, TestCase):
fixtures = ImportContextRecordTest.fixtures + [
settings.ROOT_PATH +
'../archaeological_finds/fixtures/initial_data-fr.json',
]
- def testMCCImportFinds(self, test=True):
- self.testMCCImportContextRecords(test=False)
+ def test_mcc_import_finds(self):
+ self.init_context_record()
old_nb = models.BaseFind.objects.count()
old_nb_find = models.Find.objects.count()
@@ -252,22 +250,18 @@ class ImportFindTest(ImportContextRecordTest):
mcc_images.read())}
post_dict = {'importer_type': MCC.pk, 'skip_lines': 1,
"encoding": 'utf-8'}
- form = forms_common.NewImportForm(data=post_dict, files=file_dict,
- instance=None)
+ form = forms_common.NewImportForm(data=post_dict, files=file_dict)
form.is_valid()
- if test:
- self.assertTrue(form.is_valid())
+ self.assertTrue(form.is_valid())
impt = form.save(self.ishtar_user)
impt.initialize()
# doing manual connections
ceram = models.MaterialType.objects.get(txt_idx='ceramic').pk
glass = models.MaterialType.objects.get(txt_idx='glass').pk
- self.setTargetKey('find__material_types', 'terre-cuite', ceram)
- self.setTargetKey('find__material_types', 'verre', glass)
+ self.set_target_key('find__material_types', 'terre-cuite', ceram)
+ self.set_target_key('find__material_types', 'verre', glass)
impt.importation()
- if not test:
- return
# new finds has now been imported
current_nb = models.BaseFind.objects.count()
self.assertEqual(current_nb, (old_nb + 4))
diff --git a/archaeological_operations/admin.py b/archaeological_operations/admin.py
index d8ce23662..3abf22eae 100644
--- a/archaeological_operations/admin.py
+++ b/archaeological_operations/admin.py
@@ -105,10 +105,16 @@ class ActTypeAdmin(GeneralTypeAdmin):
list_filter = ('intented_to',)
list_display = ['label', 'txt_idx', 'available', 'intented_to']
-
admin.site.register(models.ActType, ActTypeAdmin)
-general_models = [models.RemainType, models.ReportState]
+
+class ReportStateAdmin(GeneralTypeAdmin):
+ list_display = ['label', 'txt_idx', 'available', 'order', 'comment']
+
+admin.site.register(models.ReportState, ReportStateAdmin)
+
+
+general_models = [models.RemainType]
for model in general_models:
admin.site.register(model, GeneralTypeAdmin)
diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py
index d4134693f..040c7c3d8 100644
--- a/archaeological_operations/tests.py
+++ b/archaeological_operations/tests.py
@@ -35,71 +35,44 @@ import models
from archaeological_operations import views
from ishtar_common.models import OrganizationType, Organization, \
- ImporterType, IshtarUser, TargetKey, IshtarSiteProfile, Town
+ ImporterType, IshtarUser, TargetKey, ImporterModel, IshtarSiteProfile, Town
+from archaeological_context_records.models import Unit
from ishtar_common import forms_common
from ishtar_common.tests import WizardTest, WizardTestFormData as FormData, \
create_superuser, create_user
-class ImportOperationTest(TestCase):
- fixtures = [settings.ROOT_PATH +
- '../fixtures/initial_data-auth-fr.json',
- settings.ROOT_PATH +
- '../ishtar_common/fixtures/initial_data-fr.json',
- settings.ROOT_PATH +
- '../ishtar_common/fixtures/test_towns.json',
- settings.ROOT_PATH +
- '../ishtar_common/fixtures/initial_importtypes-fr.json',
- settings.ROOT_PATH +
- '../archaeological_operations/fixtures/initial_data-fr.json']
- test_operations = True
+class ImportTest(object):
+ def setUp(self):
+ self.username, self.password, self.user = create_superuser()
+ self.ishtar_user = IshtarUser.objects.get(pk=self.user.pk)
- def setTargetKey(self, target, key, value):
- tg = TargetKey.objects.get(target__target=target, key=key)
+ def set_target_key(self, target, key, value, imp=None):
+ keys = {'target__target': target, 'key': key}
+ if imp:
+ keys['associated_import'] = imp
+ tg = TargetKey.objects.get(**keys)
tg.value = value
tg.is_set = True
tg.save()
- def setUp(self):
- self.username, self.password, self.user = create_superuser()
- self.ishtar_user = IshtarUser.objects.get(pk=self.user.pk)
-
- def testMCCImportOperation(self, test=True):
- # MCC opérations
- if self.test_operations is False:
- test = False
- first_ope_nb = models.Operation.objects.count()
- MCC_OPERATION = ImporterType.objects.get(name=u"MCC - Opérations")
+ def init_ope_import(self):
+ mcc_operation = ImporterType.objects.get(name=u"MCC - Opérations")
mcc_operation_file = open(
settings.ROOT_PATH +
'../archaeological_operations/tests/MCC-operations-example.csv',
'rb')
file_dict = {'imported_file': SimpleUploadedFile(
mcc_operation_file.name, mcc_operation_file.read())}
- post_dict = {'importer_type': MCC_OPERATION.pk, 'skip_lines': 1,
+ post_dict = {'importer_type': mcc_operation.pk, 'skip_lines': 1,
"encoding": 'utf-8'}
- form = forms_common.NewImportForm(data=post_dict, files=file_dict,
- instance=None)
+ form = forms_common.NewImportForm(data=post_dict, files=file_dict)
form.is_valid()
- if test:
- self.assertTrue(form.is_valid())
- impt = form.save(self.ishtar_user)
- target_key_nb = TargetKey.objects.count()
- impt.initialize()
- # new key have to be set
- if test:
- self.assertTrue(TargetKey.objects.count() > target_key_nb)
-
- # first try to import
- impt.importation()
- current_ope_nb = models.Operation.objects.count()
- # no new operation imported because of a missing connection for
- # operation_type value
- if test:
- self.assertTrue(current_ope_nb == first_ope_nb)
+ return mcc_operation, form
- # doing manualy connections
+ def init_ope_targetkey(self, imp):
+ # doing manually connections
tg = TargetKey.objects.filter(target__target='operation_type'
).order_by('-pk').all()[0]
tg.value = models.OperationType.objects.get(
@@ -107,21 +80,109 @@ class ImportOperationTest(TestCase):
tg.is_set = True
tg.save()
- target = TargetKey.objects.get(key='gallo-romain')
+ target = TargetKey.objects.get(key='gallo-romain',
+ associated_import=imp)
gallo = models.Period.objects.get(txt_idx='gallo-roman')
target.value = gallo.pk
target.is_set = True
target.save()
- target = TargetKey.objects.get(key='age-du-fer')
+ target = TargetKey.objects.get(key='age-du-fer',
+ associated_import=imp)
iron = models.Period.objects.get(txt_idx='iron_age')
target.value = iron.pk
target.is_set = True
target.save()
+ def init_ope(self):
+ importer, form = self.init_ope_import()
+ impt = form.save(self.ishtar_user)
+ impt.initialize()
+ self.init_ope_targetkey(imp=impt)
+ impt.importation()
+
+ def init_parcel_import(self):
+ self.init_ope()
+ mcc_parcel = ImporterType.objects.get(name=u"MCC - Parcelles")
+ mcc_file = open(
+ settings.ROOT_PATH +
+ '../archaeological_operations/tests/MCC-parcelles-example.csv',
+ 'rb')
+ file_dict = {'imported_file': SimpleUploadedFile(mcc_file.name,
+ mcc_file.read())}
+ post_dict = {'importer_type': mcc_parcel.pk, 'skip_lines': 1,
+ "encoding": 'utf-8'}
+ form = forms_common.NewImportForm(data=post_dict, files=file_dict)
+ form.is_valid()
+ return mcc_parcel, form
+
+ def init_parcel(self):
+ importer, form = self.init_parcel_import()
+ impt = form.save(self.ishtar_user)
+ impt.initialize()
+ impt.importation()
+
+ def init_context_record_import(self):
+ self.init_parcel()
+ mcc = ImporterType.objects.get(name=u"MCC - UE")
+ mcc_file = open(
+ settings.ROOT_PATH +
+ '../archaeological_context_records/tests/'
+ 'MCC-context-records-example.csv', 'rb')
+ file_dict = {'imported_file': SimpleUploadedFile(mcc_file.name,
+ mcc_file.read())}
+ post_dict = {'importer_type': mcc.pk, 'skip_lines': 1,
+ "encoding": 'utf-8'}
+ form = forms_common.NewImportForm(data=post_dict, files=file_dict)
+ form.is_valid()
+ return mcc, form
+
+ def init_cr_targetkey(self, imp):
+ hc = Unit.objects.get(txt_idx='not_in_context').pk
+ self.set_target_key('unit', 'hc', hc, imp=imp)
+ self.set_target_key('unit', 'hors-contexte', hc, imp=imp)
+ layer = Unit.objects.get(txt_idx='layer').pk
+ self.set_target_key('unit', 'couche', layer, imp=imp)
+
+ def init_context_record(self):
+ mcc, form = self.init_context_record_import()
+ impt = form.save(self.ishtar_user)
+ impt.initialize()
+ self.init_cr_targetkey(impt)
+ impt.importation()
+
+
+class ImportOperationTest(ImportTest, TestCase):
+ fixtures = [settings.ROOT_PATH +
+ '../fixtures/initial_data-auth-fr.json',
+ settings.ROOT_PATH +
+ '../ishtar_common/fixtures/initial_data-fr.json',
+ settings.ROOT_PATH +
+ '../ishtar_common/fixtures/test_towns.json',
+ settings.ROOT_PATH +
+ '../ishtar_common/fixtures/initial_importtypes-fr.json',
+ settings.ROOT_PATH +
+ '../archaeological_operations/fixtures/initial_data-fr.json']
+
+ def test_mcc_import_operation(self):
+ first_ope_nb = models.Operation.objects.count()
+ importer, form = self.init_ope_import()
+ self.assertTrue(form.is_valid())
+ impt = form.save(self.ishtar_user)
+ target_key_nb = TargetKey.objects.count()
+ impt.initialize()
+ # new key have to be set
+ self.assertTrue(TargetKey.objects.count() > target_key_nb)
+
+ # first try to import
+ impt.importation()
+ current_ope_nb = models.Operation.objects.count()
+ # no new operation imported because of a missing connection for
+ # operation_type value
+ self.assertTrue(current_ope_nb == first_ope_nb)
+ self.init_ope_targetkey(imp=impt)
+
impt.importation()
- if not test:
- return
# a new operation has now been imported
current_ope_nb = models.Operation.objects.count()
self.assertTrue(current_ope_nb == (first_ope_nb + 1))
@@ -131,8 +192,9 @@ class ImportOperationTest(TestCase):
self.assertTrue(last_ope.code_patriarche == 4200)
self.assertTrue(last_ope.operation_type.txt_idx == 'prog_excavation')
self.assertEqual(last_ope.periods.count(), 2)
- periods = last_ope.periods.all()
- self.assertTrue(iron in periods and gallo in periods)
+ periods = [period.txt_idx for period in last_ope.periods.all()]
+ self.assertIn('iron_age', periods)
+ self.assertIn('gallo-roman', periods)
# a second importation will be not possible: no two same patriarche
# code
@@ -141,33 +203,62 @@ class ImportOperationTest(TestCase):
self.assertTrue(last_ope ==
models.Operation.objects.order_by('-pk').all()[0])
- def testMCCImportParcels(self, test=True):
- if self.test_operations is False:
- test = False
- self.testMCCImportOperation(test=False)
+ def test_model_limitation(self):
+ importer, form = self.init_ope_import()
+ importer.created_models.clear()
+ impt = form.save(self.ishtar_user)
+ impt.initialize()
+ self.init_ope_targetkey(imp=impt)
+
+ # no model defined in created_models: normal import
+ init_ope_number = models.Operation.objects.count()
+ impt.importation()
+ current_ope_nb = models.Operation.objects.count()
+ self.assertEqual(current_ope_nb, init_ope_number + 1)
+
+ last_ope = models.Operation.objects.order_by('-pk').all()[0]
+ last_ope.delete()
+
+ importer, form = self.init_ope_import()
+ # add an inadequate model to make created_models non empty
+ importer.created_models.clear()
+ importer.created_models.add(ImporterModel.objects.get(
+ klass='ishtar_common.models.Organization'
+ ))
+ impt = form.save(self.ishtar_user)
+ impt.initialize()
+ self.init_ope_targetkey(imp=impt)
+
+ # no imports
+ impt.importation()
+ current_ope_nb = models.Operation.objects.count()
+ self.assertEqual(current_ope_nb, init_ope_number)
+
+ importer, form = self.init_ope_import()
+ # add operation model to allow creation
+ importer.created_models.clear()
+ importer.created_models.add(ImporterModel.objects.get(
+ klass='archaeological_operations.models.Operation'
+ ))
+ impt = form.save(self.ishtar_user)
+ impt.initialize()
+ self.init_ope_targetkey(imp=impt)
+
+ # import of operations
+ impt.importation()
+ current_ope_nb = models.Operation.objects.count()
+ self.assertEqual(current_ope_nb, init_ope_number + 1)
+
+ def test_mcc_import_parcels(self):
old_nb = models.Parcel.objects.count()
- MCC_PARCEL = ImporterType.objects.get(name=u"MCC - Parcelles")
- mcc_file = open(
- settings.ROOT_PATH +
- '../archaeological_operations/tests/MCC-parcelles-example.csv',
- 'rb')
- file_dict = {'imported_file': SimpleUploadedFile(mcc_file.name,
- mcc_file.read())}
- post_dict = {'importer_type': MCC_PARCEL.pk, 'skip_lines': 1,
- "encoding": 'utf-8'}
- form = forms_common.NewImportForm(data=post_dict, files=file_dict,
- instance=None)
- form.is_valid()
- if test:
- self.assertTrue(form.is_valid())
+ mcc_parcel, form = self.init_parcel_import()
impt = form.save(self.ishtar_user)
impt.initialize()
impt.importation()
- if not test:
- return
# new parcels has now been imported
current_nb = models.Parcel.objects.count()
- self.assertTrue(current_nb == (old_nb + 2))
+ self.assertEqual(current_nb, old_nb + 2)
+
# and well imported
last_parcels = models.Parcel.objects.order_by('-pk').all()[0:2]
external_ids = sorted(['4200-59350-YY55', '4200-75101-XXXX'])
@@ -195,8 +286,6 @@ class ImportOperationTest(TestCase):
self.assertEqual(parcel_count - 2, models.Parcel.objects.count())
def testParseParcels(self):
- if not self.test_operations:
- return
# the database needs to be initialised before importing
from archaeological_operations.import_from_csv import parse_parcels
# default_town = Town.objects.create(numero_insee="12345",
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index 7b671caae..e2ecbf839 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -201,6 +201,7 @@ admin.site.register(models.GlobalVar, GlobalVarAdmin)
class GeneralTypeAdmin(admin.ModelAdmin):
list_display = ['label', 'txt_idx', 'available', 'comment']
+ search_fields = ('label', 'txt_idx', 'comment',)
actions = ['import_generic', export_as_csv_action()]
import_generic = gen_import_generic
@@ -249,6 +250,13 @@ class ImporterColumnAdmin(admin.ModelAdmin):
admin.site.register(models.ImporterColumn, ImporterColumnAdmin)
+class ImporterModelAdmin(admin.ModelAdmin):
+ list_display = ('name', 'klass')
+ model = models.ImporterModel
+
+admin.site.register(models.ImporterModel, ImporterModelAdmin)
+
+
class FormaterTypeAdmin(admin.ModelAdmin):
list_display = ('formater_type', 'options')
admin.site.register(models.FormaterType, FormaterTypeAdmin)
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py
index 49705f0df..a03f4de34 100644
--- a/ishtar_common/data_importer.py
+++ b/ishtar_common/data_importer.py
@@ -29,6 +29,7 @@ import zipfile
from django.conf import settings
from django.contrib.auth.models import User
+from django.core.exceptions import ImproperlyConfigured
from django.core.files import File
from django.db import IntegrityError, DatabaseError, transaction
from django.template.defaultfilters import slugify
@@ -613,6 +614,8 @@ class Importer(object):
OBJECT_CLS = None
IMPORTED_LINE_FIELD = None
UNICITY_KEYS = []
+ # if set only models inside this list can be created
+ MODEL_CREATION_LIMIT = []
EXTRA_DEFAULTS = {}
DEFAULTS = {}
ERRORS = {
@@ -626,10 +629,19 @@ class Importer(object):
'no_data': _(u"No data provided"),
'value_required': _(u"Value is required"),
'not_enough_cols': _(u"At least %d columns must be filled"),
- 'regex_not_match': _(u"The regexp doesn't match.")
+ 'regex_not_match': _(u"The regexp doesn't match."),
+ 'improperly_configured': _(
+ u"Forced creation is set for model {} but this model is not in the "
+ u"list of models allowed to be created."),
+ 'does_not_exist_in_db': _(u"{} with values {} doesn't exist in the "
+ u"database. Create it first or fix your source file."),
}
def _create_models(self, force=False):
+ """
+ Create a db config from a hardcoded import.
+ Not useful anymore?
+ """
from ishtar_common import models
q = models.ImporterType.objects.filter(slug=self.SLUG)
if not force and (not self.SLUG or q.count()):
@@ -640,6 +652,9 @@ class Importer(object):
model_name = self.OBJECT_CLS.__module__ + '.' + \
self.OBJECT_CLS.__name__
+ model_cls, c = models.ImporterModel.object.get_or_create(
+ klass=model_name, default={'name': self.OBJECT_CLS.__name__}
+ )
unicity_keys = ''
if self.UNICITY_KEYS:
@@ -647,7 +662,7 @@ class Importer(object):
importer = models.ImporterType.objects.create(
slug=self.SLUG, name=name, description=self.DESC,
- associated_models=model_name, unicity_keys=unicity_keys)
+ associated_models=model_cls, unicity_keys=unicity_keys)
for default in self.DEFAULTS:
values = self.DEFAULTS[default]
@@ -712,6 +727,28 @@ class Importer(object):
comment=line.comment)
return True
+ def _get_improperly_conf_error(self, model):
+ from ishtar_common.models import ImporterModel
+ cls_name = model.__module__ + "." + model.__name__
+ q = ImporterModel.objects.filter(klass=cls_name)
+ if q.count():
+ cls_name = q.all()[0].name
+ return ImproperlyConfigured(
+ unicode(self.ERRORS['improperly_configured']).format(cls_name))
+
+ def _get_does_not_exist_in_db_error(self, model, data):
+ from ishtar_common.models import ImporterModel
+ cls_name = model.__module__ + "." + model.__name__
+ q = ImporterModel.objects.filter(klass=cls_name)
+ if q.count():
+ cls_name = q.all()[0].name
+ values = u", ".join(
+ [u"{}: {}".format(k, data[k]) for k in data]
+ )
+ raise ImporterError(
+ unicode(self.ERRORS['does_not_exist_in_db']
+ ).format(cls_name, values))
+
def __init__(self, skip_lines=0, reference_header=None,
check_col_num=False, test=False, history_modifier=None,
output='silent', import_instance=None,
@@ -1006,11 +1043,26 @@ class Importer(object):
if k not in formater.through_unicity_keys \
and k != 'defaults':
data['defaults'][k] = data.pop(k)
+ created = False
if '__force_new' in data:
+ if self.MODEL_CREATION_LIMIT and \
+ through_cls not in self.MODEL_CREATION_LIMIT:
+ raise self._get_improperly_conf_error(through_cls)
created = data.pop('__force_new')
t_obj = through_cls.objects.create(**data)
else:
- t_obj, created = through_cls.objects.get_or_create(**data)
+ if not self.MODEL_CREATION_LIMIT or \
+ through_cls in self.MODEL_CREATION_LIMIT:
+ t_obj, created = through_cls.objects.get_or_create(**data)
+ else:
+ get_data = data.copy()
+ if 'defaults' in get_data:
+ get_data.pop('defaults')
+ try:
+ t_obj = through_cls.objects.get(**get_data)
+ except through_cls.DoesNotExist:
+ raise self._get_does_not_exist_in_db_error(
+ through_cls, get_data)
if not created and 'defaults' in data:
for k in data['defaults']:
setattr(t_obj, k, data['defaults'][k])
@@ -1244,6 +1296,9 @@ class Importer(object):
new_created[attribute].append(key)
has_values = bool([1 for k in v if v[k]])
if has_values:
+ if self.MODEL_CREATION_LIMIT and \
+ model not in self.MODEL_CREATION_LIMIT:
+ raise self._get_improperly_conf_error(model)
v = model.objects.create(**v)
else:
continue
@@ -1252,14 +1307,25 @@ class Importer(object):
extra_fields = {}
# "File" type is a temp object and can be different
# for the same filename - it must be treated
- # separatly
+ # separately
for field in model._meta.fields:
k = field.name
- # attr_class est un attribut de FileField
+ # attr_class is a FileField attribute
if hasattr(field, 'attr_class') and k in v:
extra_fields[k] = v.pop(k)
- v, created = model.objects.get_or_create(
- **v)
+ if not self.MODEL_CREATION_LIMIT or \
+ model in self.MODEL_CREATION_LIMIT:
+ v, created = model.objects.get_or_create(
+ **v)
+ else:
+ get_v = v.copy()
+ if 'defaults' in get_v:
+ get_v.pop('defaults')
+ try:
+ v = model.objects.get(**get_v)
+ except model.DoesNotExist:
+ raise self._get_does_not_exist_in_db_error(
+ model, get_v)
changed = False
for k in extra_fields.keys():
if extra_fields[k]:
@@ -1333,6 +1399,7 @@ class Importer(object):
'history_modifier': create_dict.pop('history_modifier')
})
+ created = False
try:
try:
dct = create_dict.copy()
@@ -1345,6 +1412,9 @@ class Importer(object):
return None, created
new_dct = defaults.copy()
new_dct.update(dct)
+ if self.MODEL_CREATION_LIMIT and \
+ cls not in self.MODEL_CREATION_LIMIT:
+ raise self._get_improperly_conf_error(cls)
obj = cls.objects.create(**new_dct)
else:
# manage UNICITY_KEYS - only level 1
@@ -1353,9 +1423,17 @@ class Importer(object):
if k not in self.UNICITY_KEYS \
and k != 'defaults':
defaults[k] = dct.pop(k)
-
- dct['defaults'] = defaults.copy()
- obj, created = cls.objects.get_or_create(**dct)
+ if not self.MODEL_CREATION_LIMIT or \
+ cls in self.MODEL_CREATION_LIMIT:
+ dct['defaults'] = defaults.copy()
+ obj, created = cls.objects.get_or_create(**dct)
+ else:
+ try:
+ obj = cls.objects.get(**dct)
+ dct['defaults'] = defaults.copy()
+ except cls.DoesNotExist:
+ raise self._get_does_not_exist_in_db_error(
+ cls, dct)
if not created and not path and self.UNICITY_KEYS:
changed = False
diff --git a/ishtar_common/fixtures/initial_importtypes-fr.json b/ishtar_common/fixtures/initial_importtypes-fr.json
index f87a529a7..1b155ddf6 100644
--- a/ishtar_common/fixtures/initial_importtypes-fr.json
+++ b/ishtar_common/fixtures/initial_importtypes-fr.json
@@ -1,14 +1,95 @@
[
{
"pk": 2,
+ "model": "ishtar_common.importermodel",
+ "fields": {
+ "name": "Archaeological files",
+ "klass": "archaeological_files.models.File"
+ }
+ },
+ {
+ "pk": 4,
+ "model": "ishtar_common.importermodel",
+ "fields": {
+ "name": "Archaeological site",
+ "klass": "archaeological_operations.models.ArchaeologicalSite"
+ }
+ },
+ {
+ "pk": 3,
+ "model": "ishtar_common.importermodel",
+ "fields": {
+ "name": "Base finds",
+ "klass": "archaeological_finds.models.BaseFind"
+ }
+ },
+ {
+ "pk": 10,
+ "model": "ishtar_common.importermodel",
+ "fields": {
+ "name": "Context record relations",
+ "klass": "archaeological_context_records.models.RecordRelations"
+ }
+ },
+ {
+ "pk": 7,
+ "model": "ishtar_common.importermodel",
+ "fields": {
+ "name": "Context records",
+ "klass": "archaeological_context_records.models.ContextRecord"
+ }
+ },
+ {
+ "pk": 6,
+ "model": "ishtar_common.importermodel",
+ "fields": {
+ "name": "Operation",
+ "klass": "archaeological_operations.models.Operation"
+ }
+ },
+ {
+ "pk": 8,
+ "model": "ishtar_common.importermodel",
+ "fields": {
+ "name": "Operation source",
+ "klass": "archaeological_operations.models.OperationSource"
+ }
+ },
+ {
+ "pk": 1,
+ "model": "ishtar_common.importermodel",
+ "fields": {
+ "name": "Organization",
+ "klass": "ishtar_common.models.Organization"
+ }
+ },
+ {
+ "pk": 9,
+ "model": "ishtar_common.importermodel",
+ "fields": {
+ "name": "Parcels",
+ "klass": "archaeological_operations.models.Parcel"
+ }
+ },
+ {
+ "pk": 5,
+ "model": "ishtar_common.importermodel",
+ "fields": {
+ "name": "Person",
+ "klass": "ishtar_common.models.Person"
+ }
+ },
+ {
+ "pk": 2,
"model": "ishtar_common.importertype",
"fields": {
"description": "",
+ "created_models": [],
"is_template": true,
"unicity_keys": "external_id",
"users": [],
"slug": "mcc-parcelles",
- "associated_models": "archaeological_operations.models.Parcel",
+ "associated_models": 9,
"name": "MCC - Parcelles"
}
},
@@ -17,11 +98,12 @@
"model": "ishtar_common.importertype",
"fields": {
"description": "",
+ "created_models": [],
"is_template": true,
"unicity_keys": "external_id",
"users": [],
"slug": "mcc-operations",
- "associated_models": "archaeological_operations.models.Operation",
+ "associated_models": 6,
"name": "MCC - Op\u00e9rations"
}
},
@@ -30,11 +112,12 @@
"model": "ishtar_common.importertype",
"fields": {
"description": "",
+ "created_models": [],
"is_template": true,
"unicity_keys": "",
"users": [],
"slug": "mcc-documentation",
- "associated_models": "archaeological_operations.models.OperationSource",
+ "associated_models": 8,
"name": "MCC - Documentation"
}
},
@@ -43,11 +126,12 @@
"model": "ishtar_common.importertype",
"fields": {
"description": "",
+ "created_models": [],
"is_template": true,
"unicity_keys": "external_id",
"users": [],
"slug": "mcc-ue",
- "associated_models": "archaeological_context_records.models.ContextRecord",
+ "associated_models": 7,
"name": "MCC - UE"
}
},
@@ -56,11 +140,12 @@
"model": "ishtar_common.importertype",
"fields": {
"description": "",
+ "created_models": [],
"is_template": true,
"unicity_keys": "external_id",
"users": [],
"slug": "mcc-mobilier",
- "associated_models": "archaeological_finds.models.BaseFind",
+ "associated_models": 3,
"name": "MCC - Mobilier"
}
},
@@ -69,11 +154,12 @@
"model": "ishtar_common.importertype",
"fields": {
"description": "Unit\u00e9s d'enregisttrement",
+ "created_models": [],
"is_template": true,
"unicity_keys": "external_id",
"users": [],
"slug": "ishtar_context_record",
- "associated_models": "archaeological_context_records.models.ContextRecord",
+ "associated_models": 7,
"name": "ISHTAR-UE"
}
},
@@ -82,11 +168,12 @@
"model": "ishtar_common.importertype",
"fields": {
"description": "Parcelles de terrain",
+ "created_models": [],
"is_template": true,
"unicity_keys": "external_id",
"users": [],
"slug": "ishtar_parcels",
- "associated_models": "archaeological_operations.models.Parcel",
+ "associated_models": 9,
"name": "ISHTAR-PARCELLES"
}
},
@@ -95,11 +182,12 @@
"model": "ishtar_common.importertype",
"fields": {
"description": "Import complet standard operations",
+ "created_models": [],
"is_template": true,
"unicity_keys": "code_patriarche",
"users": [],
"slug": "ishtar_operations",
- "associated_models": "archaeological_operations.models.Operation",
+ "associated_models": 6,
"name": "ISHTAR-OP\u00c9RATIONS"
}
},
@@ -108,11 +196,12 @@
"model": "ishtar_common.importertype",
"fields": {
"description": "Mobilier",
+ "created_models": [],
"is_template": true,
"unicity_keys": "external_id",
"users": [],
"slug": "ishtar_finds",
- "associated_models": "archaeological_finds.models.BaseFind",
+ "associated_models": 3,
"name": "ISHTAR-MOBILIER"
}
},
diff --git a/ishtar_common/locale/django.pot b/ishtar_common/locale/django.pot
index 458368a35..fbc4b4eac 100644
--- a/ishtar_common/locale/django.pot
+++ b/ishtar_common/locale/django.pot
@@ -6,7 +6,6 @@
# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata
# Valérie-Emma Leroux <emma@iggdrasil.net>, 2017. #zanata
-# Étienne Loks <etienne.loks@iggdrasil.net>, 2017. #zanata
msgid ""
msgstr ""
@@ -22,109 +21,125 @@ msgstr ""
msgid "Related item"
msgstr ""
-#: data_importer.py:182
+#: admin.py:79
+msgid "Export selected as CSV file"
+msgstr ""
+
+#: data_importer.py:183
#, python-format
msgid "\"%(value)s\" is too long. The max length is %(length)d characters."
msgstr ""
-#: data_importer.py:199
+#: data_importer.py:200
#, python-format
msgid "\"%(value)s\" not equal to yes or no"
msgstr ""
-#: data_importer.py:211
+#: data_importer.py:212
#, python-format
msgid "\"%(value)s\" is not a float"
msgstr ""
-#: data_importer.py:224 data_importer.py:238 data_importer.py:482
+#: data_importer.py:225 data_importer.py:239 data_importer.py:483
#, python-format
msgid "\"%(value)s\" is not a valid date"
msgstr ""
-#: data_importer.py:251
+#: data_importer.py:252
#, python-format
msgid "\"%(value)s\" is not an integer"
msgstr ""
-#: data_importer.py:302 data_importer.py:545
+#: data_importer.py:303 data_importer.py:546
#, python-format
msgid "Choice for \"%s\" is not available. Which one is relevant?\n"
msgstr ""
-#: data_importer.py:309
+#: data_importer.py:310
#, python-format
msgid "%d. None of the above - create new"
msgstr ""
-#: data_importer.py:312
+#: data_importer.py:313
#, python-format
msgid "%d. None of the above - skip"
msgstr ""
-#: data_importer.py:508
+#: data_importer.py:509
#, python-format
msgid "\"%(value)s\" is not a valid path for the given archive"
msgstr ""
-#: data_importer.py:620
+#: data_importer.py:623
msgid ""
"The given file is not correct. Check the file format. If you use a CSV file: "
"check that column separator and encoding are similar to the ones used by the "
"reference file."
msgstr ""
-#: data_importer.py:624
+#: data_importer.py:627
#, python-format
msgid "Too many cols (%(user_col)d) when maximum is %(ref_col)d"
msgstr ""
-#: data_importer.py:626
+#: data_importer.py:629
msgid "No data provided"
msgstr ""
-#: data_importer.py:627
+#: data_importer.py:630
msgid "Value is required"
msgstr ""
-#: data_importer.py:628
+#: data_importer.py:631
#, python-format
msgid "At least %d columns must be filled"
msgstr ""
-#: data_importer.py:629
+#: data_importer.py:632
msgid "The regexp doesn't match."
msgstr ""
-#: data_importer.py:1037
+#: data_importer.py:634
+msgid ""
+"Forced creation is set for model {} but this model is not in the list of "
+"models allowed to be created."
+msgstr ""
+
+#: data_importer.py:636
+msgid ""
+"{} with values {} doesn't exist in the database. Create it first or fix your "
+"source file."
+msgstr ""
+
+#: data_importer.py:1089
msgid "Not imported"
msgstr ""
-#: data_importer.py:1444
+#: data_importer.py:1522
msgid "line"
msgstr ""
-#: data_importer.py:1444
+#: data_importer.py:1522
msgid "col"
msgstr ""
-#: data_importer.py:1444
+#: data_importer.py:1522
msgid "error"
msgstr ""
-#: data_importer.py:1450
+#: data_importer.py:1528
msgid "field"
msgstr ""
-#: data_importer.py:1450
+#: data_importer.py:1528
msgid "source"
msgstr ""
-#: data_importer.py:1450
+#: data_importer.py:1528
msgid "result"
msgstr ""
-#: data_importer.py:1466
+#: data_importer.py:1544
#, python-format
msgid "\"%(value)s\" not in %(values)s"
msgstr ""
@@ -157,12 +172,12 @@ msgstr ""
msgid "Add a new item"
msgstr ""
-#: forms.py:262 models.py:1473
+#: forms.py:262 models.py:1475
msgid "Template"
msgstr ""
#: forms_common.py:41 forms_common.py:59 forms_common.py:182
-#: forms_common.py:406 models.py:1539 models.py:2940
+#: forms_common.py:406 models.py:1541 models.py:2950
#: templates/blocks/JQueryAdvancedTown.html:19
#: templates/ishtar/sheet_organization.html:13
msgid "Town"
@@ -178,9 +193,8 @@ msgid ""
"french town Saint-Denis in the Seine-Saint-Denis department.</p>"
msgstr ""
-#: forms_common.py:68 forms_common.py:855 ishtar_menu.py:47 models.py:1712
-#: models.py:2567 models.py:2749 models.py:2810
-#: templates/ishtar/sheet_person.html:4
+#: forms_common.py:68 forms_common.py:855 ishtar_menu.py:47 models.py:2574
+#: models.py:2756 models.py:2818 templates/ishtar/sheet_person.html:4
msgid "Person"
msgstr ""
@@ -191,63 +205,63 @@ msgid ""
msgstr ""
#: forms_common.py:170 forms_common.py:327 forms_common.py:451
-#: ishtar_menu.py:75 models.py:1713 models.py:2450 models.py:2541
+#: ishtar_menu.py:75 models.py:2457 models.py:2548
#: templates/ishtar/sheet_organization.html:4
msgid "Organization"
msgstr ""
#: forms_common.py:173 forms_common.py:210 forms_common.py:322
-#: forms_common.py:376 forms_common.py:446 models.py:1094 models.py:1472
-#: models.py:1758 models.py:1977 models.py:2444 models.py:2553 models.py:2926
-#: templates/ishtar/sheet_organization.html:8
+#: forms_common.py:376 forms_common.py:446 models.py:1096 models.py:1474
+#: models.py:1742 models.py:1758 models.py:1984 models.py:2451 models.py:2560
+#: models.py:2936 templates/ishtar/sheet_organization.html:8
#: templates/ishtar/sheet_organization.html:21
msgid "Name"
msgstr ""
-#: forms_common.py:174 models.py:1694 models.py:2108
+#: forms_common.py:174 models.py:1696 models.py:2115
msgid "Organization type"
msgstr ""
-#: forms_common.py:176 forms_common.py:400 models.py:1534
+#: forms_common.py:176 forms_common.py:400 models.py:1536
#: templates/ishtar/sheet_organization.html:10
msgid "Address"
msgstr ""
-#: forms_common.py:178 forms_common.py:403 models.py:1535
+#: forms_common.py:178 forms_common.py:403 models.py:1537
#: templates/ishtar/sheet_organization.html:11
msgid "Address complement"
msgstr ""
-#: forms_common.py:180 forms_common.py:404 models.py:1537
+#: forms_common.py:180 forms_common.py:404 models.py:1539
#: templates/ishtar/sheet_organization.html:12
msgid "Postal code"
msgstr ""
-#: forms_common.py:183 forms_common.py:407 models.py:1540
+#: forms_common.py:183 forms_common.py:407 models.py:1542
msgid "Country"
msgstr ""
#: forms_common.py:185 forms_common.py:324 forms_common.py:380
-#: forms_common.py:448 forms_common.py:572 models.py:1567
+#: forms_common.py:448 forms_common.py:572 models.py:1569
msgid "Email"
msgstr ""
-#: forms_common.py:186 forms_common.py:383 models.py:1552
+#: forms_common.py:186 forms_common.py:383 models.py:1554
#: templates/ishtar/sheet_organization.html:14
#: templates/ishtar/sheet_person.html:19
#: templates/ishtar/wizard/wizard_person.html:17
msgid "Phone"
msgstr ""
-#: forms_common.py:187 forms_common.py:392 models.py:1564
+#: forms_common.py:187 forms_common.py:392 models.py:1566
#: templates/ishtar/sheet_organization.html:15
#: templates/ishtar/sheet_person.html:37
#: templates/ishtar/wizard/wizard_person.html:35
msgid "Mobile phone"
msgstr ""
-#: forms_common.py:211 forms_common.py:325 forms_common.py:449 models.py:2144
-#: models.py:2446 models.py:2861 templates/sheet_ope.html:85
+#: forms_common.py:211 forms_common.py:325 forms_common.py:449 models.py:2151
+#: models.py:2453 models.py:2871 templates/sheet_ope.html:85
#: templates/sheet_ope.html.py:105 templates/sheet_ope.html:126
#: templates/ishtar/import_list.html:13
#: templates/ishtar/sheet_organization.html:23
@@ -271,7 +285,7 @@ msgstr ""
msgid "Organization to merge"
msgstr ""
-#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2551
+#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2558
#: templates/ishtar/sheet_organization.html:22
msgid "Surname"
msgstr ""
@@ -289,25 +303,25 @@ msgstr ""
msgid "Identity"
msgstr ""
-#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:2109
-#: models.py:2545 models.py:2547 models.py:2858 templates/sheet_ope.html:104
+#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:2116
+#: models.py:2552 models.py:2554 models.py:2868 templates/sheet_ope.html:104
#: templates/ishtar/blocks/window_tables/documents.html:7
msgid "Title"
msgstr ""
-#: forms_common.py:372 models.py:2549
+#: forms_common.py:372 models.py:2556
msgid "Salutation"
msgstr ""
-#: forms_common.py:378 models.py:2555
+#: forms_common.py:378 models.py:2562
msgid "Raw name"
msgstr ""
-#: forms_common.py:381 models.py:1553
+#: forms_common.py:381 models.py:1555
msgid "Phone description"
msgstr ""
-#: forms_common.py:384 models.py:1555 models.py:1557
+#: forms_common.py:384 models.py:1557 models.py:1559
msgid "Phone description 2"
msgstr ""
@@ -315,11 +329,11 @@ msgstr ""
msgid "Phone 2"
msgstr ""
-#: forms_common.py:388 models.py:1561
+#: forms_common.py:388 models.py:1563
msgid "Phone description 3"
msgstr ""
-#: forms_common.py:390 models.py:1559
+#: forms_common.py:390 models.py:1561
msgid "Phone 3"
msgstr ""
@@ -327,23 +341,23 @@ msgstr ""
msgid "Current organization"
msgstr ""
-#: forms_common.py:409 models.py:1542
+#: forms_common.py:409 models.py:1544
msgid "Other address: address"
msgstr ""
-#: forms_common.py:412 models.py:1545
+#: forms_common.py:412 models.py:1547
msgid "Other address: address complement"
msgstr ""
-#: forms_common.py:414 models.py:1546
+#: forms_common.py:414 models.py:1548
msgid "Other address: postal code"
msgstr ""
-#: forms_common.py:416 models.py:1548
+#: forms_common.py:416 models.py:1550
msgid "Other address: town"
msgstr ""
-#: forms_common.py:418 models.py:1550
+#: forms_common.py:418 models.py:1552
msgid "Other address: country"
msgstr ""
@@ -359,7 +373,7 @@ msgstr ""
msgid "Account search"
msgstr ""
-#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2498
+#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2505
msgid "Person type"
msgstr ""
@@ -391,7 +405,7 @@ msgstr ""
msgid "Send the new password by email?"
msgstr ""
-#: forms_common.py:628 forms_common.py:641 models.py:2941
+#: forms_common.py:628 forms_common.py:641 models.py:2951
msgid "Towns"
msgstr ""
@@ -407,7 +421,7 @@ msgstr ""
msgid "Documentation informations"
msgstr ""
-#: forms_common.py:775 forms_common.py:823 models.py:2110 models.py:2835
+#: forms_common.py:775 forms_common.py:823 models.py:2117 models.py:2843
msgid "Source type"
msgstr ""
@@ -419,37 +433,37 @@ msgstr ""
msgid "Internal reference"
msgstr ""
-#: forms_common.py:783 models.py:2872
+#: forms_common.py:783 models.py:2882
msgid "Numerical ressource (web address)"
msgstr ""
-#: forms_common.py:784 models.py:2874
+#: forms_common.py:784 models.py:2884
msgid "Receipt date"
msgstr ""
-#: forms_common.py:786 models.py:2273 models.py:2876
+#: forms_common.py:786 models.py:2280 models.py:2886
msgid "Creation date"
msgstr ""
-#: forms_common.py:789 models.py:2879
+#: forms_common.py:789 models.py:2889
msgid "Receipt date in documentation"
msgstr ""
-#: forms_common.py:791 forms_common.py:827 models.py:376 models.py:687
-#: models.py:2004 models.py:2559 models.py:2886
+#: forms_common.py:791 forms_common.py:827 models.py:377 models.py:689
+#: models.py:2011 models.py:2566 models.py:2896
msgid "Comment"
msgstr ""
-#: forms_common.py:793 forms_common.py:826 models.py:1096 models.py:1762
-#: models.py:1936 models.py:1978 models.py:2885 templates/sheet_ope.html:128
+#: forms_common.py:793 forms_common.py:826 models.py:1098 models.py:1762
+#: models.py:1943 models.py:1985 models.py:2895 templates/sheet_ope.html:128
msgid "Description"
msgstr ""
-#: forms_common.py:796 models.py:2887
+#: forms_common.py:796 models.py:2897
msgid "Additional information"
msgstr ""
-#: forms_common.py:798 forms_common.py:830 models.py:2889
+#: forms_common.py:798 forms_common.py:830 models.py:2899
msgid "Has a duplicate"
msgstr ""
@@ -464,7 +478,7 @@ msgid ""
"p>"
msgstr ""
-#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2815
+#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2823
#: templates/ishtar/wizard/wizard_person_deletion.html:124
msgid "Author"
msgstr ""
@@ -477,7 +491,7 @@ msgstr ""
msgid "Would you like to delete this documentation?"
msgstr ""
-#: forms_common.py:856 models.py:2111 models.py:2803 models.py:2812
+#: forms_common.py:856 models.py:2118 models.py:2810 models.py:2820
msgid "Author type"
msgstr ""
@@ -489,7 +503,7 @@ msgstr ""
msgid "There are identical authors."
msgstr ""
-#: forms_common.py:893 models.py:2816 models.py:2868
+#: forms_common.py:893 models.py:2824 models.py:2878
#: templates/sheet_ope.html:106
#: templates/ishtar/blocks/window_tables/documents.html:9
msgid "Authors"
@@ -507,7 +521,7 @@ msgstr ""
msgid "Deletion"
msgstr ""
-#: ishtar_menu.py:39 models.py:1268 views.py:1548
+#: ishtar_menu.py:39 models.py:1270 views.py:1549
msgid "Global variables"
msgstr ""
@@ -535,278 +549,278 @@ msgstr ""
msgid "Manual merge"
msgstr ""
-#: ishtar_menu.py:109 models.py:2284
+#: ishtar_menu.py:109 models.py:2291
msgid "Imports"
msgstr ""
-#: ishtar_menu.py:112 views.py:1556
+#: ishtar_menu.py:112 views.py:1557
msgid "New import"
msgstr ""
-#: ishtar_menu.py:116 views.py:1570
+#: ishtar_menu.py:116 views.py:1571
msgid "Current imports"
msgstr ""
-#: ishtar_menu.py:120 views.py:1606
+#: ishtar_menu.py:120 views.py:1607
msgid "Old imports"
msgstr ""
-#: models.py:183
+#: models.py:184
msgid "Not a valid item."
msgstr ""
-#: models.py:196
+#: models.py:197
msgid "A selected item is not a valid item."
msgstr ""
-#: models.py:207
+#: models.py:208
msgid "This item already exists."
msgstr ""
-#: models.py:372 models.py:686 models.py:1507 models.py:1519 models.py:1933
+#: models.py:373 models.py:688 models.py:1509 models.py:1521 models.py:1940
msgid "Label"
msgstr ""
-#: models.py:374
+#: models.py:375
msgid "Textual ID"
msgstr ""
-#: models.py:377 models.py:689 models.py:1476
+#: models.py:378 models.py:691 models.py:1478
msgid "Available"
msgstr ""
-#: models.py:713 models.py:2050
+#: models.py:715 models.py:2057
msgid "Key"
msgstr ""
-#: models.py:719
+#: models.py:721
msgid "Specific key to an import"
msgstr ""
-#: models.py:811
+#: models.py:813
msgid "Last editor"
msgstr ""
-#: models.py:814
+#: models.py:816
msgid "Creator"
msgstr ""
-#: models.py:956 models.py:2952 models.py:3008
+#: models.py:958 models.py:2962 models.py:3018
msgid "Order"
msgstr ""
-#: models.py:957
+#: models.py:959
msgid "Symmetrical"
msgstr ""
-#: models.py:958
+#: models.py:960
msgid "Tiny label"
msgstr ""
-#: models.py:972
+#: models.py:974
msgid "Cannot have symmetrical and an inverse_relation"
msgstr ""
-#: models.py:1088
+#: models.py:1090
msgid "Euro"
msgstr ""
-#: models.py:1089
+#: models.py:1091
msgid "US dollar"
msgstr ""
-#: models.py:1095 models.py:1760
+#: models.py:1097 models.py:1760
msgid "Slug"
msgstr ""
-#: models.py:1098
+#: models.py:1100
msgid "CSS color code for base module"
msgstr ""
-#: models.py:1100
+#: models.py:1102
msgid "Files module"
msgstr ""
-#: models.py:1102
+#: models.py:1104
msgid "CSS color code for files module"
msgstr ""
-#: models.py:1104
+#: models.py:1106
msgid "Context records module"
msgstr ""
-#: models.py:1107
+#: models.py:1109
msgid "CSS color code for context record module"
msgstr ""
-#: models.py:1109
+#: models.py:1111
msgid "Finds module"
msgstr ""
-#: models.py:1110
+#: models.py:1112
msgid "Need context records module"
msgstr ""
-#: models.py:1112
+#: models.py:1114
msgid "CSS color code for find module"
msgstr ""
-#: models.py:1115
+#: models.py:1117
msgid "Warehouses module"
msgstr ""
-#: models.py:1116
+#: models.py:1118
msgid "Need finds module"
msgstr ""
-#: models.py:1118
+#: models.py:1120
msgid "CSS code for warehouse module"
msgstr ""
-#: models.py:1120
+#: models.py:1122
msgid "Mapping module"
msgstr ""
-#: models.py:1122
+#: models.py:1124
msgid "CSS code for mapping module"
msgstr ""
-#: models.py:1125
+#: models.py:1127
msgid "Home page"
msgstr ""
-#: models.py:1126
+#: models.py:1128
#, python-brace-format
msgid ""
"Homepage of Ishtar - if not defined a default homepage will appear. Use the "
"markdown syntax. {random_image} can be used to display a random image."
msgstr ""
-#: models.py:1130
+#: models.py:1132
msgid "File external id"
msgstr ""
-#: models.py:1132
+#: models.py:1134
msgid ""
"Formula to manage file external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1137
+#: models.py:1139
msgid "Parcel external id"
msgstr ""
-#: models.py:1140
+#: models.py:1142
msgid ""
"Formula to manage parcel external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1145
+#: models.py:1147
msgid "Context record external id"
msgstr ""
-#: models.py:1147
+#: models.py:1149
msgid ""
"Formula to manage context record external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1152
+#: models.py:1154
msgid "Base find external id"
msgstr ""
-#: models.py:1154
+#: models.py:1156
msgid ""
"Formula to manage base find external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1159
+#: models.py:1161
msgid "Find external id"
msgstr ""
-#: models.py:1161
+#: models.py:1163
msgid ""
"Formula to manage find external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1166
+#: models.py:1168
msgid "Container external id"
msgstr ""
-#: models.py:1168
+#: models.py:1170
msgid ""
"Formula to manage container external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1173
+#: models.py:1175
msgid "Warehouse external id"
msgstr ""
-#: models.py:1175
+#: models.py:1177
msgid ""
"Formula to manage warehouse external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1180
+#: models.py:1182
msgid "Raw name for person"
msgstr ""
-#: models.py:1182
+#: models.py:1184
msgid ""
"Formula to manage person raw_name. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1186
+#: models.py:1188
msgid "Current active"
msgstr ""
-#: models.py:1187
+#: models.py:1189
msgid "Currency"
msgstr ""
-#: models.py:1191
+#: models.py:1193
msgid "Ishtar site profile"
msgstr ""
-#: models.py:1192
+#: models.py:1194
msgid "Ishtar site profiles"
msgstr ""
-#: models.py:1261
+#: models.py:1263
msgid "Variable name"
msgstr ""
-#: models.py:1262
+#: models.py:1264
msgid "Description of the variable"
msgstr ""
-#: models.py:1264 models.py:2051
+#: models.py:1266 models.py:2058
msgid "Value"
msgstr ""
-#: models.py:1267
+#: models.py:1269
msgid "Global variable"
msgstr ""
-#: models.py:1377 models.py:1407
+#: models.py:1379 models.py:1409
msgid "Total"
msgstr ""
-#: models.py:1384 models.py:1508 models.py:1520
+#: models.py:1386 models.py:1510 models.py:1522
#: templates/ishtar/sheet_person.html:22
#: templates/ishtar/dashboards/dashboard_main_detail.html:141
#: templates/ishtar/dashboards/dashboard_main_detail_users.html:26
@@ -814,641 +828,633 @@ msgstr ""
msgid "Number"
msgstr ""
-#: models.py:1471
+#: models.py:1473
msgid "Administrative Act"
msgstr ""
-#: models.py:1475
+#: models.py:1477
msgid "Associated object"
msgstr ""
-#: models.py:1479
+#: models.py:1481
msgid "Document template"
msgstr ""
-#: models.py:1480
+#: models.py:1482
msgid "Document templates"
msgstr ""
-#: models.py:1511 models.py:1521 models.py:2268
+#: models.py:1513 models.py:1523 models.py:2275
msgid "State"
msgstr ""
-#: models.py:1525 templates/blocks/JQueryAdvancedTown.html:12
+#: models.py:1527 templates/blocks/JQueryAdvancedTown.html:12
msgid "Department"
msgstr ""
-#: models.py:1526
+#: models.py:1528
msgid "Departments"
msgstr ""
-#: models.py:1563
+#: models.py:1565
msgid "Raw phone"
msgstr ""
-#: models.py:1569
+#: models.py:1571
msgid "Alternative address is prefered"
msgstr ""
-#: models.py:1608
+#: models.py:1610
msgid "Tel: "
msgstr ""
-#: models.py:1612
+#: models.py:1614
msgid "Mobile: "
msgstr ""
-#: models.py:1616
+#: models.py:1618
msgid "Email: "
msgstr ""
-#: models.py:1621
+#: models.py:1623
msgid "Merge key"
msgstr ""
-#: models.py:1695
+#: models.py:1697
msgid "Organization types"
msgstr ""
-#: models.py:1714 views.py:241
-msgid "Operation"
-msgstr ""
-
-#: models.py:1716
-msgid "Archaeological site"
+#: models.py:1743
+msgid "Class name"
msgstr ""
-#: models.py:1717
-msgid "Parcels"
+#: models.py:1746
+msgid "Importer - Model"
msgstr ""
-#: models.py:1719
-msgid "Operation source"
+#: models.py:1747
+msgid "Importer - Models"
msgstr ""
-#: models.py:1722 views.py:1364 views.py:1414
-msgid "Archaeological files"
-msgstr ""
-
-#: models.py:1724 views.py:1367 views.py:1422
-msgid "Context records"
-msgstr ""
-
-#: models.py:1726
-msgid "Context record relations"
+#: models.py:1764 templates/ishtar/dashboards/dashboard_main.html:25
+msgid "Users"
msgstr ""
-#: models.py:1728
-msgid "Base finds"
+#: models.py:1767
+msgid "Associated model"
msgstr ""
-#: models.py:1764 templates/ishtar/dashboards/dashboard_main.html:25
-msgid "Users"
+#: models.py:1770
+msgid "Models that can accept new items"
msgstr ""
-#: models.py:1766
-msgid "Associated model"
+#: models.py:1771
+msgid "Leave blank for no restrictions"
msgstr ""
-#: models.py:1769
+#: models.py:1773
msgid "Is template"
msgstr ""
-#: models.py:1770
+#: models.py:1774
msgid "Unicity keys (separator \";\")"
msgstr ""
-#: models.py:1774
+#: models.py:1778
msgid "Importer - Type"
msgstr ""
-#: models.py:1775
+#: models.py:1779
msgid "Importer - Types"
msgstr ""
-#: models.py:1865
+#: models.py:1872
msgid "Importer - Default"
msgstr ""
-#: models.py:1866
+#: models.py:1873
msgid "Importer - Defaults"
msgstr ""
-#: models.py:1901
+#: models.py:1908
msgid "Importer - Default value"
msgstr ""
-#: models.py:1902
+#: models.py:1909
msgid "Importer - Default values"
msgstr ""
-#: models.py:1935
+#: models.py:1942
msgid "Column number"
msgstr ""
-#: models.py:1938
+#: models.py:1945
msgid "Required"
msgstr ""
-#: models.py:1941
+#: models.py:1948
msgid "Importer - Column"
msgstr ""
-#: models.py:1942
+#: models.py:1949
msgid "Importer - Columns"
msgstr ""
-#: models.py:1962
+#: models.py:1969
msgid "Field name"
msgstr ""
-#: models.py:1964 models.py:1998
+#: models.py:1971 models.py:2005
msgid "Force creation of new items"
msgstr ""
-#: models.py:1966 models.py:2000
+#: models.py:1973 models.py:2007
msgid "Concatenate with existing"
msgstr ""
-#: models.py:1968 models.py:2002
+#: models.py:1975 models.py:2009
msgid "Concatenate character"
msgstr ""
-#: models.py:1972
+#: models.py:1979
msgid "Importer - Duplicate field"
msgstr ""
-#: models.py:1973
+#: models.py:1980
msgid "Importer - Duplicate fields"
msgstr ""
-#: models.py:1980
+#: models.py:1987
msgid "Regular expression"
msgstr ""
-#: models.py:1983
+#: models.py:1990
msgid "Importer - Regular expression"
msgstr ""
-#: models.py:1984
+#: models.py:1991
msgid "Importer - Regular expressions"
msgstr ""
-#: models.py:2007
+#: models.py:2014
msgid "Importer - Target"
msgstr ""
-#: models.py:2008
+#: models.py:2015
msgid "Importer - Targets"
msgstr ""
-#: models.py:2032 views.py:545
+#: models.py:2039 views.py:545
msgid "True"
msgstr ""
-#: models.py:2033 views.py:547
+#: models.py:2040 views.py:547
msgid "False"
msgstr ""
-#: models.py:2052
+#: models.py:2059
msgid "Is set"
msgstr ""
-#: models.py:2059
+#: models.py:2066
msgid "Importer - Target key"
msgstr ""
-#: models.py:2060
+#: models.py:2067
msgid "Importer - Targets keys"
msgstr ""
-#: models.py:2112 models.py:2851 models.py:2864
+#: models.py:2119 models.py:2874
msgid "Format"
msgstr ""
-#: models.py:2113 models.py:2956
+#: models.py:2120 models.py:2966
msgid "Operation type"
msgstr ""
-#: models.py:2114
+#: models.py:2121
msgid "Period"
msgstr ""
-#: models.py:2115
+#: models.py:2122
msgid "Report state"
msgstr ""
-#: models.py:2116
+#: models.py:2123
msgid "Remain type"
msgstr ""
-#: models.py:2117
+#: models.py:2124
msgid "Unit"
msgstr ""
-#: models.py:2118
+#: models.py:2125
msgid "Activity type"
msgstr ""
-#: models.py:2119
+#: models.py:2126
msgid "Material"
msgstr ""
-#: models.py:2121
+#: models.py:2128
msgid "Conservatory state"
msgstr ""
-#: models.py:2122
+#: models.py:2129
msgid "Container type"
msgstr ""
-#: models.py:2123
+#: models.py:2130
msgid "Preservation type"
msgstr ""
-#: models.py:2124
+#: models.py:2131
msgid "Object type"
msgstr ""
-#: models.py:2125
+#: models.py:2132
msgid "Integrity type"
msgstr ""
-#: models.py:2126
+#: models.py:2133
msgid "Remarkability type"
msgstr ""
-#: models.py:2127
+#: models.py:2134
msgid "Batch type"
msgstr ""
-#: models.py:2129
+#: models.py:2136
msgid "Identification type"
msgstr ""
-#: models.py:2131
+#: models.py:2138
msgid "Context record relation type"
msgstr ""
-#: models.py:2132 models.py:3014
+#: models.py:2139 models.py:3024
msgid "Spatial reference system"
msgstr ""
-#: models.py:2133 models.py:2843
+#: models.py:2140 models.py:2852
msgid "Support type"
msgstr ""
-#: models.py:2134 models.py:2510
+#: models.py:2141 models.py:2517
msgid "Title type"
msgstr ""
-#: models.py:2140
+#: models.py:2147
msgid "Integer"
msgstr ""
-#: models.py:2141
+#: models.py:2148
msgid "Float"
msgstr ""
-#: models.py:2142
+#: models.py:2149
msgid "String"
msgstr ""
-#: models.py:2143 templates/sheet_ope.html:86
+#: models.py:2150 templates/sheet_ope.html:86
msgid "Date"
msgstr ""
-#: models.py:2145 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
+#: models.py:2152 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
#: templates/ishtar/dashboards/dashboard_main_detail.html:126
msgid "Year"
msgstr ""
-#: models.py:2146
+#: models.py:2153
msgid "String to boolean"
msgstr ""
-#: models.py:2147
+#: models.py:2154
msgctxt "filesystem"
msgid "File"
msgstr ""
-#: models.py:2148
+#: models.py:2155
msgid "Unknow type"
msgstr ""
-#: models.py:2164
+#: models.py:2171
msgid "4 digit year. e.g.: \"2015\""
msgstr ""
-#: models.py:2165
+#: models.py:2172
msgid "4 digit year/month/day. e.g.: \"2015/02/04\""
msgstr ""
-#: models.py:2166
+#: models.py:2173
msgid "Day/month/4 digit year. e.g.: \"04/02/2015\""
msgstr ""
-#: models.py:2176
+#: models.py:2183
msgid "Options"
msgstr ""
-#: models.py:2178
+#: models.py:2185
msgid "Split character(s)"
msgstr ""
-#: models.py:2182
+#: models.py:2189
msgid "Importer - Formater type"
msgstr ""
-#: models.py:2183
+#: models.py:2190
msgid "Importer - Formater types"
msgstr ""
-#: models.py:2232 templates/ishtar/dashboards/dashboard_main_detail.html:63
+#: models.py:2239 templates/ishtar/dashboards/dashboard_main_detail.html:63
msgid "Created"
msgstr ""
-#: models.py:2233
+#: models.py:2240
msgid "Analyse in progress"
msgstr ""
-#: models.py:2234
+#: models.py:2241
msgid "Analysed"
msgstr ""
-#: models.py:2235
+#: models.py:2242
msgid "Import pending"
msgstr ""
-#: models.py:2236
+#: models.py:2243
msgid "Import in progress"
msgstr ""
-#: models.py:2237
+#: models.py:2244
msgid "Finished with errors"
msgstr ""
-#: models.py:2238
+#: models.py:2245
msgid "Finished"
msgstr ""
-#: models.py:2239
+#: models.py:2246
msgid "Archived"
msgstr ""
-#: models.py:2252
+#: models.py:2259
msgid "Imported file"
msgstr ""
-#: models.py:2254
+#: models.py:2261
msgid "Associated images (zip file)"
msgstr ""
-#: models.py:2256
+#: models.py:2263
msgid "Encoding"
msgstr ""
-#: models.py:2258
+#: models.py:2265
msgid "Skip lines"
msgstr ""
-#: models.py:2259 templates/ishtar/import_list.html:47
+#: models.py:2266 templates/ishtar/import_list.html:47
msgid "Error file"
msgstr ""
-#: models.py:2262
+#: models.py:2269
msgid "Result file"
msgstr ""
-#: models.py:2265 templates/ishtar/import_list.html:53
+#: models.py:2272 templates/ishtar/import_list.html:53
msgid "Match file"
msgstr ""
-#: models.py:2271
+#: models.py:2278
msgid "Conservative import"
msgstr ""
-#: models.py:2276
+#: models.py:2283
msgid "End date"
msgstr ""
-#: models.py:2278
+#: models.py:2285
msgid "Remaining seconds"
msgstr ""
-#: models.py:2283
+#: models.py:2290
msgid "Import"
msgstr ""
-#: models.py:2300
+#: models.py:2307
msgid "Analyse"
msgstr ""
-#: models.py:2302 models.py:2305
+#: models.py:2309 models.py:2312
msgid "Re-analyse"
msgstr ""
-#: models.py:2303
+#: models.py:2310
msgid "Launch import"
msgstr ""
-#: models.py:2306
+#: models.py:2313
msgid "Re-import"
msgstr ""
-#: models.py:2307
+#: models.py:2314
msgid "Archive"
msgstr ""
-#: models.py:2309
+#: models.py:2316
msgid "Unarchive"
msgstr ""
-#: models.py:2310 widgets.py:130 templates/ishtar/form_delete.html:11
+#: models.py:2317 widgets.py:130 templates/ishtar/form_delete.html:11
msgid "Delete"
msgstr ""
-#: models.py:2451
+#: models.py:2458
msgid "Organizations"
msgstr ""
-#: models.py:2453
+#: models.py:2460
msgid "Can view all Organizations"
msgstr ""
-#: models.py:2454
+#: models.py:2461
msgid "Can view own Organization"
msgstr ""
-#: models.py:2455
+#: models.py:2462
msgid "Can add own Organization"
msgstr ""
-#: models.py:2457
+#: models.py:2464
msgid "Can change own Organization"
msgstr ""
-#: models.py:2459
+#: models.py:2466
msgid "Can delete own Organization"
msgstr ""
-#: models.py:2494
+#: models.py:2501
msgid "Groups"
msgstr ""
-#: models.py:2499
+#: models.py:2506
msgid "Person types"
msgstr ""
-#: models.py:2511
+#: models.py:2518
msgid "Title types"
msgstr ""
-#: models.py:2520
+#: models.py:2527
msgid "Mr"
msgstr ""
-#: models.py:2521
+#: models.py:2528
msgid "Miss"
msgstr ""
-#: models.py:2522
+#: models.py:2529
msgid "Mr and Mrs"
msgstr ""
-#: models.py:2523
+#: models.py:2530
msgid "Mrs"
msgstr ""
-#: models.py:2524
+#: models.py:2531
msgid "Doctor"
msgstr ""
-#: models.py:2557
+#: models.py:2564
msgid "Contact type"
msgstr ""
-#: models.py:2560 models.py:2624
+#: models.py:2567 models.py:2631
msgid "Types"
msgstr ""
-#: models.py:2563
+#: models.py:2570
msgid "Is attached to"
msgstr ""
-#: models.py:2568
+#: models.py:2575
msgid "Persons"
msgstr ""
-#: models.py:2570
+#: models.py:2577
msgid "Can view all Persons"
msgstr ""
-#: models.py:2571
+#: models.py:2578
msgid "Can view own Person"
msgstr ""
-#: models.py:2572
+#: models.py:2579
msgid "Can add own Person"
msgstr ""
-#: models.py:2573
+#: models.py:2580
msgid "Can change own Person"
msgstr ""
-#: models.py:2574
+#: models.py:2581
msgid "Can delete own Person"
msgstr ""
-#: models.py:2752
+#: models.py:2759
msgid "Advanced shortcut menu"
msgstr ""
-#: models.py:2755
+#: models.py:2762
msgid "Ishtar user"
msgstr ""
-#: models.py:2756
+#: models.py:2763
msgid "Ishtar users"
msgstr ""
-#: models.py:2798
+#: models.py:2805
msgid "To modify the password use the form in Auth > User"
msgstr ""
-#: models.py:2804
+#: models.py:2811
msgid "Author types"
msgstr ""
-#: models.py:2836
+#: models.py:2844
msgid "Source types"
msgstr ""
-#: models.py:2844
+#: models.py:2853
msgid "Support types"
msgstr ""
-#: models.py:2852
-msgid "Formats"
+#: models.py:2860
+msgid "Format type"
+msgstr ""
+
+#: models.py:2861
+msgid "Format types"
msgstr ""
-#: models.py:2859
+#: models.py:2869
msgid "External ID"
msgstr ""
-#: models.py:2862
+#: models.py:2872
msgid "Support"
msgstr ""
-#: models.py:2866
+#: models.py:2876
msgid "Scale"
msgstr ""
-#: models.py:2880
+#: models.py:2890
msgid "Item number"
msgstr ""
-#: models.py:2881
+#: models.py:2891
msgid "Ref."
msgstr ""
-#: models.py:2884
+#: models.py:2894
msgid "Internal ref."
msgstr ""
-#: models.py:2927
+#: models.py:2937
msgid "Surface (m2)"
msgstr ""
-#: models.py:2928 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
+#: models.py:2938 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
msgid "Localisation"
msgstr ""
-#: models.py:2953
+#: models.py:2963
msgid "Is preventive"
msgstr ""
-#: models.py:2957
+#: models.py:2967
msgid "Operation types"
msgstr ""
-#: models.py:2986
+#: models.py:2996
msgid "Preventive"
msgstr ""
-#: models.py:2987
+#: models.py:2997
msgid "Research"
msgstr ""
-#: models.py:3010
+#: models.py:3020
msgid "Authority name"
msgstr ""
-#: models.py:3011
+#: models.py:3021
msgid "Authority SRID"
msgstr ""
-#: models.py:3015
+#: models.py:3025
msgid "Spatial reference systems"
msgstr ""
@@ -1496,6 +1502,10 @@ msgstr ""
msgid "Archaeological file"
msgstr ""
+#: views.py:241
+msgid "Operation"
+msgstr ""
+
#: views.py:243
msgid "Context record"
msgstr ""
@@ -1512,48 +1522,56 @@ msgstr ""
msgid "Treatment"
msgstr ""
-#: views.py:1303 views.py:1346
+#: views.py:1304 views.py:1347
msgid "Operation not permitted."
msgstr ""
-#: views.py:1305
+#: views.py:1306
#, python-format
msgid "New %s"
msgstr ""
-#: views.py:1365 views.py:1418
+#: views.py:1365 views.py:1415
+msgid "Archaeological files"
+msgstr ""
+
+#: views.py:1366 views.py:1419
msgid "Operations"
msgstr ""
-#: views.py:1369 views.py:1425
+#: views.py:1368 views.py:1423
+msgid "Context records"
+msgstr ""
+
+#: views.py:1370 views.py:1426
msgid "Finds"
msgstr ""
-#: views.py:1618 templates/ishtar/import_list.html:43
+#: views.py:1619 templates/ishtar/import_list.html:43
msgid "Link unmatched items"
msgstr ""
-#: views.py:1633
+#: views.py:1634
msgid "Delete import"
msgstr ""
-#: views.py:1672
+#: views.py:1673
msgid "Merge persons"
msgstr ""
-#: views.py:1696
+#: views.py:1697
msgid "Select the main person"
msgstr ""
-#: views.py:1705
+#: views.py:1706
msgid "Merge organization"
msgstr ""
-#: views.py:1715
+#: views.py:1716
msgid "Select the main organization"
msgstr ""
-#: views.py:1755 views.py:1771
+#: views.py:1756 views.py:1772
msgid "Corporation manager"
msgstr ""
diff --git a/ishtar_common/migrations/0070_auto__add_importermodel__add_field_importertype_new_associated_models.py b/ishtar_common/migrations/0070_auto__add_importermodel__add_field_importertype_new_associated_models.py
new file mode 100644
index 000000000..b78e71bbf
--- /dev/null
+++ b/ishtar_common/migrations/0070_auto__add_importermodel__add_field_importertype_new_associated_models.py
@@ -0,0 +1,515 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding model 'ImporterModel'
+ db.create_table('ishtar_common_importermodel', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=200)),
+ ('klass', self.gf('django.db.models.fields.CharField')(max_length=200)),
+ ))
+ db.send_create_signal('ishtar_common', ['ImporterModel'])
+
+ # Adding field 'ImporterType.new_associated_models'
+ db.add_column('ishtar_common_importertype', 'new_associated_models',
+ self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='+', null=True, to=orm['ishtar_common.ImporterModel']),
+ keep_default=False)
+
+ # Adding M2M table for field created_models on 'ImporterType'
+ db.create_table('ishtar_common_importertype_created_models', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('importertype', models.ForeignKey(orm['ishtar_common.importertype'], null=False)),
+ ('importermodel', models.ForeignKey(orm['ishtar_common.importermodel'], null=False))
+ ))
+ db.create_unique('ishtar_common_importertype_created_models', ['importertype_id', 'importermodel_id'])
+
+
+ def backwards(self, orm):
+ # Deleting model 'ImporterModel'
+ db.delete_table('ishtar_common_importermodel')
+
+ # Deleting field 'ImporterType.new_associated_models'
+ db.delete_column('ishtar_common_importertype', 'new_associated_models_id')
+
+ # Removing M2M table for field created_models on 'ImporterType'
+ db.delete_table('ishtar_common_importertype_created_models')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'ishtar_common.arrondissement': {
+ 'Meta': {'object_name': 'Arrondissement'},
+ 'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'})
+ },
+ 'ishtar_common.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'author_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.AuthorType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'author'", 'to': "orm['ishtar_common.Person']"})
+ },
+ 'ishtar_common.authortype': {
+ 'Meta': {'ordering': "['label']", 'object_name': 'AuthorType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.canton': {
+ 'Meta': {'object_name': 'Canton'},
+ 'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'})
+ },
+ 'ishtar_common.department': {
+ 'Meta': {'ordering': "['number']", 'object_name': 'Department'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}),
+ 'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.State']", 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.documenttemplate': {
+ 'Meta': {'ordering': "['associated_object_name', 'name']", 'object_name': 'DocumentTemplate'},
+ 'associated_object_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'template': ('django.db.models.fields.files.FileField', [], {'max_length': '100'})
+ },
+ 'ishtar_common.format': {
+ 'Meta': {'object_name': 'Format'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.formatertype': {
+ 'Meta': {'ordering': "('formater_type', 'options')", 'unique_together': "(('formater_type', 'options', 'many_split'),)", 'object_name': 'FormaterType'},
+ 'formater_type': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'many_split': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'options': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.globalvar': {
+ 'Meta': {'ordering': "['slug']", 'object_name': 'GlobalVar'},
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
+ 'value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.historicalorganization': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalOrganization'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'organization_type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.historicalperson': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalPerson'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'attached_to_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'contact_type': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'old_title': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_name': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'surname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'title_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.import': {
+ 'Meta': {'object_name': 'Import'},
+ 'conservative_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+ 'encoding': ('django.db.models.fields.CharField', [], {'default': "'utf-8'", 'max_length': '15'}),
+ 'end_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'error_file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '220'}),
+ 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '220', 'null': 'True', 'blank': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.ImporterType']"}),
+ 'match_file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'seconds_remaining': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'skip_lines': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'state': ('django.db.models.fields.CharField', [], {'default': "'C'", 'max_length': '2'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']"})
+ },
+ 'ishtar_common.importercolumn': {
+ 'Meta': {'ordering': "('importer_type', 'col_number')", 'unique_together': "(('importer_type', 'col_number'),)", 'object_name': 'ImporterColumn'},
+ 'col_number': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'columns'", 'to': "orm['ishtar_common.ImporterType']"}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'regexp_pre_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Regexp']", 'null': 'True', 'blank': 'True'}),
+ 'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'ishtar_common.importerdefault': {
+ 'Meta': {'object_name': 'ImporterDefault'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'defaults'", 'to': "orm['ishtar_common.ImporterType']"}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.importerdefaultvalues': {
+ 'Meta': {'object_name': 'ImporterDefaultValues'},
+ 'default_target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'default_values'", 'to': "orm['ishtar_common.ImporterDefault']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.importerduplicatefield': {
+ 'Meta': {'object_name': 'ImporterDuplicateField'},
+ 'column': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'duplicate_fields'", 'to': "orm['ishtar_common.ImporterColumn']"}),
+ 'concat': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'concat_str': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}),
+ 'field_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'force_new': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'ishtar_common.importermodel': {
+ 'Meta': {'object_name': 'ImporterModel'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'klass': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'})
+ },
+ 'ishtar_common.importertype': {
+ 'Meta': {'object_name': 'ImporterType'},
+ 'associated_models': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'created_models': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.ImporterModel']"}),
+ 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_template': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'new_associated_models': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['ishtar_common.ImporterModel']"}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '100', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
+ 'unicity_keys': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.importtarget': {
+ 'Meta': {'object_name': 'ImportTarget'},
+ 'column': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'targets'", 'to': "orm['ishtar_common.ImporterColumn']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'concat': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'concat_str': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}),
+ 'force_new': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'formater_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.FormaterType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'regexp_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Regexp']", 'null': 'True', 'blank': 'True'}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.ishtarsiteprofile': {
+ 'Meta': {'ordering': "['label']", 'object_name': 'IshtarSiteProfile'},
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'base_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(0, 0, 0, 0)'", 'max_length': '200'}),
+ 'base_find_external_id': ('django.db.models.fields.TextField', [], {'default': "'{context_record__external_id}-{label}'"}),
+ 'container_external_id': ('django.db.models.fields.TextField', [], {'default': "'{responsible__external_id}-{index}'"}),
+ 'context_record': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'context_record_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(210,200,0,0.2)'", 'max_length': '200'}),
+ 'context_record_external_id': ('django.db.models.fields.TextField', [], {'default': "'{parcel__external_id}-{label}'"}),
+ 'currency': ('django.db.models.fields.CharField', [], {'default': "u'\\u20ac'", 'max_length': "'5'"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'file_external_id': ('django.db.models.fields.TextField', [], {'default': "'{year}-{numeric_reference}'"}),
+ 'files': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'files_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(0, 32, 210, 0.1)'", 'max_length': '200'}),
+ 'find': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'find_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(210,0,0,0.15)'", 'max_length': '200'}),
+ 'find_external_id': ('django.db.models.fields.TextField', [], {'default': "'{get_first_base_find__context_record__external_id}-{label}'"}),
+ 'homepage': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.TextField', [], {}),
+ 'mapping': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'mapping_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(72, 236, 0, 0.15)'", 'max_length': '200'}),
+ 'parcel_external_id': ('django.db.models.fields.TextField', [], {'default': "'{associated_file__external_id}{operation__code_patriarche}-{town__numero_insee}-{section}{parcel_number}'"}),
+ 'person_raw_name': ('django.db.models.fields.TextField', [], {'default': "'{name|upper} {surname}'"}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
+ 'warehouse': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'warehouse_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(10,20,200,0.15)'", 'max_length': '200'}),
+ 'warehouse_external_id': ('django.db.models.fields.TextField', [], {'default': "'{name|slug}'"})
+ },
+ 'ishtar_common.ishtaruser': {
+ 'Meta': {'object_name': 'IshtarUser', '_ormbases': ['auth.User']},
+ 'advanced_shortcut_menu': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ishtaruser'", 'unique': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'})
+ },
+ 'ishtar_common.itemkey': {
+ 'Meta': {'object_name': 'ItemKey'},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Import']", 'null': 'True', 'blank': 'True'}),
+ 'key': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {})
+ },
+ 'ishtar_common.operationtype': {
+ 'Meta': {'ordering': "['-preventive', 'order', 'label']", 'object_name': 'OperationType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'preventive': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.organization': {
+ 'Meta': {'object_name': 'Organization'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_organization'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'merge_candidate': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_candidate_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Organization']"}),
+ 'merge_exclusion': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_exclusion_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Organization']"}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'organization_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.OrganizationType']"}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.organizationtype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'OrganizationType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.person': {
+ 'Meta': {'object_name': 'Person'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'attached_to': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'members'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'contact_type': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_person'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'merge_candidate': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_candidate_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'merge_exclusion': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_exclusion_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'old_title': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'person_types': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ishtar_common.PersonType']", 'symmetrical': 'False'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_name': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'surname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.TitleType']", 'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.persontype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'PersonType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.regexp': {
+ 'Meta': {'object_name': 'Regexp'},
+ 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'regexp': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.sourcetype': {
+ 'Meta': {'ordering': "['label']", 'object_name': 'SourceType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.spatialreferencesystem': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'SpatialReferenceSystem'},
+ 'auth_name': ('django.db.models.fields.CharField', [], {'default': "'EPSG'", 'max_length': '256'}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.state': {
+ 'Meta': {'ordering': "['number']", 'object_name': 'State'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'})
+ },
+ 'ishtar_common.supporttype': {
+ 'Meta': {'object_name': 'SupportType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.targetkey': {
+ 'Meta': {'unique_together': "(('target', 'key', 'associated_user', 'associated_import'),)", 'object_name': 'TargetKey'},
+ 'associated_import': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Import']", 'null': 'True', 'blank': 'True'}),
+ 'associated_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_set': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'key': ('django.db.models.fields.TextField', [], {}),
+ 'target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'keys'", 'to': "orm['ishtar_common.ImportTarget']"}),
+ 'value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.titletype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'TitleType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.town': {
+ 'Meta': {'ordering': "['numero_insee']", 'object_name': 'Town'},
+ 'canton': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Canton']", 'null': 'True', 'blank': 'True'}),
+ 'center': ('django.contrib.gis.db.models.fields.PointField', [], {'srid': '27572', 'null': 'True', 'blank': 'True'}),
+ 'departement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_town'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'numero_insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '6'}),
+ 'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ }
+ }
+
+ complete_apps = ['ishtar_common'] \ No newline at end of file
diff --git a/ishtar_common/migrations/0071_migrate_importermodels.py b/ishtar_common/migrations/0071_migrate_importermodels.py
new file mode 100644
index 000000000..cc9b6f449
--- /dev/null
+++ b/ishtar_common/migrations/0071_migrate_importermodels.py
@@ -0,0 +1,520 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+def get_importer_models():
+ MODELS = [
+ ('ishtar_common.models.Person', u"Person"),
+ ('ishtar_common.models.Organization', u"Organization"),
+ ('archaeological_operations.models.Operation', u"Operation"),
+ ('archaeological_operations.models.ArchaeologicalSite',
+ u"Archaeological site"),
+ ('archaeological_operations.models.Parcel', u"Parcels"),
+ ('archaeological_operations.models.OperationSource',
+ u"Operation source"),
+ ]
+ MODELS = [('archaeological_files.models.File',
+ u"Archaeological files")] + MODELS
+ MODELS = [('archaeological_context_records.models.ContextRecord',
+ u"Context records"),
+ ('archaeological_context_records.models.RecordRelations',
+ u"Context record relations")] + MODELS
+ MODELS = [('archaeological_finds.models.BaseFind',
+ u"Base finds"), ] + MODELS
+ return MODELS
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ models = dict(get_importer_models())
+ for klass in models.keys():
+ obj, c = orm['ishtar_common.importermodel'].objects.get_or_create(
+ name=models[klass], klass=klass
+ )
+ models[klass] = obj
+
+ for imp in orm['ishtar_common.importertype'].objects.all():
+ if imp.associated_models not in models:
+ raise NotImplemented("{} is missing in models types")
+ imp.new_associated_models = models[imp.associated_models]
+ imp.save()
+
+ def backwards(self, orm):
+ pass
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'ishtar_common.arrondissement': {
+ 'Meta': {'object_name': 'Arrondissement'},
+ 'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'})
+ },
+ 'ishtar_common.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'author_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.AuthorType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'author'", 'to': "orm['ishtar_common.Person']"})
+ },
+ 'ishtar_common.authortype': {
+ 'Meta': {'ordering': "['label']", 'object_name': 'AuthorType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.canton': {
+ 'Meta': {'object_name': 'Canton'},
+ 'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'})
+ },
+ 'ishtar_common.department': {
+ 'Meta': {'ordering': "['number']", 'object_name': 'Department'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}),
+ 'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.State']", 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.documenttemplate': {
+ 'Meta': {'ordering': "['associated_object_name', 'name']", 'object_name': 'DocumentTemplate'},
+ 'associated_object_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'template': ('django.db.models.fields.files.FileField', [], {'max_length': '100'})
+ },
+ 'ishtar_common.format': {
+ 'Meta': {'object_name': 'Format'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.formatertype': {
+ 'Meta': {'ordering': "('formater_type', 'options')", 'unique_together': "(('formater_type', 'options', 'many_split'),)", 'object_name': 'FormaterType'},
+ 'formater_type': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'many_split': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'options': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.globalvar': {
+ 'Meta': {'ordering': "['slug']", 'object_name': 'GlobalVar'},
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
+ 'value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.historicalorganization': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalOrganization'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'organization_type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.historicalperson': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalPerson'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'attached_to_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'contact_type': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'old_title': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_name': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'surname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'title_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.import': {
+ 'Meta': {'object_name': 'Import'},
+ 'conservative_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+ 'encoding': ('django.db.models.fields.CharField', [], {'default': "'utf-8'", 'max_length': '15'}),
+ 'end_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'error_file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '220'}),
+ 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '220', 'null': 'True', 'blank': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.ImporterType']"}),
+ 'match_file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'seconds_remaining': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'skip_lines': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'state': ('django.db.models.fields.CharField', [], {'default': "'C'", 'max_length': '2'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']"})
+ },
+ 'ishtar_common.importercolumn': {
+ 'Meta': {'ordering': "('importer_type', 'col_number')", 'unique_together': "(('importer_type', 'col_number'),)", 'object_name': 'ImporterColumn'},
+ 'col_number': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'columns'", 'to': "orm['ishtar_common.ImporterType']"}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'regexp_pre_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Regexp']", 'null': 'True', 'blank': 'True'}),
+ 'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'ishtar_common.importerdefault': {
+ 'Meta': {'object_name': 'ImporterDefault'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'defaults'", 'to': "orm['ishtar_common.ImporterType']"}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.importerdefaultvalues': {
+ 'Meta': {'object_name': 'ImporterDefaultValues'},
+ 'default_target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'default_values'", 'to': "orm['ishtar_common.ImporterDefault']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.importerduplicatefield': {
+ 'Meta': {'object_name': 'ImporterDuplicateField'},
+ 'column': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'duplicate_fields'", 'to': "orm['ishtar_common.ImporterColumn']"}),
+ 'concat': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'concat_str': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}),
+ 'field_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'force_new': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'ishtar_common.importermodel': {
+ 'Meta': {'object_name': 'ImporterModel'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'klass': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'})
+ },
+ 'ishtar_common.importertype': {
+ 'Meta': {'object_name': 'ImporterType'},
+ 'associated_models': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'created_models': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.ImporterModel']"}),
+ 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_template': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'new_associated_models': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['ishtar_common.ImporterModel']"}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '100', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
+ 'unicity_keys': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.importtarget': {
+ 'Meta': {'object_name': 'ImportTarget'},
+ 'column': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'targets'", 'to': "orm['ishtar_common.ImporterColumn']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'concat': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'concat_str': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}),
+ 'force_new': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'formater_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.FormaterType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'regexp_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Regexp']", 'null': 'True', 'blank': 'True'}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.ishtarsiteprofile': {
+ 'Meta': {'ordering': "['label']", 'object_name': 'IshtarSiteProfile'},
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'base_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(0, 0, 0, 0)'", 'max_length': '200'}),
+ 'base_find_external_id': ('django.db.models.fields.TextField', [], {'default': "'{context_record__external_id}-{label}'"}),
+ 'container_external_id': ('django.db.models.fields.TextField', [], {'default': "'{responsible__external_id}-{index}'"}),
+ 'context_record': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'context_record_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(210,200,0,0.2)'", 'max_length': '200'}),
+ 'context_record_external_id': ('django.db.models.fields.TextField', [], {'default': "'{parcel__external_id}-{label}'"}),
+ 'currency': ('django.db.models.fields.CharField', [], {'default': "u'\\u20ac'", 'max_length': "'5'"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'file_external_id': ('django.db.models.fields.TextField', [], {'default': "'{year}-{numeric_reference}'"}),
+ 'files': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'files_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(0, 32, 210, 0.1)'", 'max_length': '200'}),
+ 'find': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'find_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(210,0,0,0.15)'", 'max_length': '200'}),
+ 'find_external_id': ('django.db.models.fields.TextField', [], {'default': "'{get_first_base_find__context_record__external_id}-{label}'"}),
+ 'homepage': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.TextField', [], {}),
+ 'mapping': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'mapping_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(72, 236, 0, 0.15)'", 'max_length': '200'}),
+ 'parcel_external_id': ('django.db.models.fields.TextField', [], {'default': "'{associated_file__external_id}{operation__code_patriarche}-{town__numero_insee}-{section}{parcel_number}'"}),
+ 'person_raw_name': ('django.db.models.fields.TextField', [], {'default': "'{name|upper} {surname}'"}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
+ 'warehouse': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'warehouse_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(10,20,200,0.15)'", 'max_length': '200'}),
+ 'warehouse_external_id': ('django.db.models.fields.TextField', [], {'default': "'{name|slug}'"})
+ },
+ 'ishtar_common.ishtaruser': {
+ 'Meta': {'object_name': 'IshtarUser', '_ormbases': ['auth.User']},
+ 'advanced_shortcut_menu': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ishtaruser'", 'unique': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'})
+ },
+ 'ishtar_common.itemkey': {
+ 'Meta': {'object_name': 'ItemKey'},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Import']", 'null': 'True', 'blank': 'True'}),
+ 'key': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {})
+ },
+ 'ishtar_common.operationtype': {
+ 'Meta': {'ordering': "['-preventive', 'order', 'label']", 'object_name': 'OperationType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'preventive': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.organization': {
+ 'Meta': {'object_name': 'Organization'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_organization'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'merge_candidate': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_candidate_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Organization']"}),
+ 'merge_exclusion': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_exclusion_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Organization']"}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'organization_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.OrganizationType']"}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.organizationtype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'OrganizationType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.person': {
+ 'Meta': {'object_name': 'Person'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'attached_to': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'members'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'contact_type': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_person'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'merge_candidate': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_candidate_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'merge_exclusion': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_exclusion_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'old_title': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'person_types': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ishtar_common.PersonType']", 'symmetrical': 'False'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_name': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'surname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.TitleType']", 'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.persontype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'PersonType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.regexp': {
+ 'Meta': {'object_name': 'Regexp'},
+ 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'regexp': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.sourcetype': {
+ 'Meta': {'ordering': "['label']", 'object_name': 'SourceType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.spatialreferencesystem': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'SpatialReferenceSystem'},
+ 'auth_name': ('django.db.models.fields.CharField', [], {'default': "'EPSG'", 'max_length': '256'}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.state': {
+ 'Meta': {'ordering': "['number']", 'object_name': 'State'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'})
+ },
+ 'ishtar_common.supporttype': {
+ 'Meta': {'object_name': 'SupportType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.targetkey': {
+ 'Meta': {'unique_together': "(('target', 'key', 'associated_user', 'associated_import'),)", 'object_name': 'TargetKey'},
+ 'associated_import': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Import']", 'null': 'True', 'blank': 'True'}),
+ 'associated_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_set': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'key': ('django.db.models.fields.TextField', [], {}),
+ 'target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'keys'", 'to': "orm['ishtar_common.ImportTarget']"}),
+ 'value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.titletype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'TitleType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.town': {
+ 'Meta': {'ordering': "['numero_insee']", 'object_name': 'Town'},
+ 'canton': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Canton']", 'null': 'True', 'blank': 'True'}),
+ 'center': ('django.contrib.gis.db.models.fields.PointField', [], {'srid': '27572', 'null': 'True', 'blank': 'True'}),
+ 'departement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_town'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'numero_insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '6'}),
+ 'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ }
+ }
+
+ complete_apps = ['ishtar_common'] \ No newline at end of file
diff --git a/ishtar_common/migrations/0072_auto__del_field_importertype_new_associated_models__chg_field_importer.py b/ishtar_common/migrations/0072_auto__del_field_importertype_new_associated_models__chg_field_importer.py
new file mode 100644
index 000000000..9d1c9f55c
--- /dev/null
+++ b/ishtar_common/migrations/0072_auto__del_field_importertype_new_associated_models__chg_field_importer.py
@@ -0,0 +1,489 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ db.delete_column('ishtar_common_importertype', 'associated_models')
+ db.rename_column('ishtar_common_importertype',
+ 'new_associated_models_id', 'associated_models_id')
+
+ def backwards(self, orm):
+ # User chose to not deal with backwards NULL issues for 'ImporterType.associated_models'
+ raise RuntimeError("Cannot reverse this migration. 'ImporterType.associated_models' and its values cannot be restored.")
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'ishtar_common.arrondissement': {
+ 'Meta': {'object_name': 'Arrondissement'},
+ 'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'})
+ },
+ 'ishtar_common.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'author_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.AuthorType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'author'", 'to': "orm['ishtar_common.Person']"})
+ },
+ 'ishtar_common.authortype': {
+ 'Meta': {'ordering': "['label']", 'object_name': 'AuthorType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.canton': {
+ 'Meta': {'object_name': 'Canton'},
+ 'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'})
+ },
+ 'ishtar_common.department': {
+ 'Meta': {'ordering': "['number']", 'object_name': 'Department'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}),
+ 'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.State']", 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.documenttemplate': {
+ 'Meta': {'ordering': "['associated_object_name', 'name']", 'object_name': 'DocumentTemplate'},
+ 'associated_object_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'template': ('django.db.models.fields.files.FileField', [], {'max_length': '100'})
+ },
+ 'ishtar_common.format': {
+ 'Meta': {'object_name': 'Format'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.formatertype': {
+ 'Meta': {'ordering': "('formater_type', 'options')", 'unique_together': "(('formater_type', 'options', 'many_split'),)", 'object_name': 'FormaterType'},
+ 'formater_type': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'many_split': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'options': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.globalvar': {
+ 'Meta': {'ordering': "['slug']", 'object_name': 'GlobalVar'},
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
+ 'value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.historicalorganization': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalOrganization'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'organization_type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.historicalperson': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalPerson'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'attached_to_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'contact_type': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'old_title': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_name': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'surname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'title_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.import': {
+ 'Meta': {'object_name': 'Import'},
+ 'conservative_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+ 'encoding': ('django.db.models.fields.CharField', [], {'default': "'utf-8'", 'max_length': '15'}),
+ 'end_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'error_file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '220'}),
+ 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '220', 'null': 'True', 'blank': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.ImporterType']"}),
+ 'match_file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'seconds_remaining': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'skip_lines': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'state': ('django.db.models.fields.CharField', [], {'default': "'C'", 'max_length': '2'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']"})
+ },
+ 'ishtar_common.importercolumn': {
+ 'Meta': {'ordering': "('importer_type', 'col_number')", 'unique_together': "(('importer_type', 'col_number'),)", 'object_name': 'ImporterColumn'},
+ 'col_number': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'columns'", 'to': "orm['ishtar_common.ImporterType']"}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'regexp_pre_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Regexp']", 'null': 'True', 'blank': 'True'}),
+ 'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'ishtar_common.importerdefault': {
+ 'Meta': {'object_name': 'ImporterDefault'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'defaults'", 'to': "orm['ishtar_common.ImporterType']"}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.importerdefaultvalues': {
+ 'Meta': {'object_name': 'ImporterDefaultValues'},
+ 'default_target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'default_values'", 'to': "orm['ishtar_common.ImporterDefault']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.importerduplicatefield': {
+ 'Meta': {'object_name': 'ImporterDuplicateField'},
+ 'column': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'duplicate_fields'", 'to': "orm['ishtar_common.ImporterColumn']"}),
+ 'concat': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'concat_str': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}),
+ 'field_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'force_new': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'ishtar_common.importermodel': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'ImporterModel'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'klass': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'})
+ },
+ 'ishtar_common.importertype': {
+ 'Meta': {'object_name': 'ImporterType'},
+ 'associated_models': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['ishtar_common.ImporterModel']"}),
+ 'created_models': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.ImporterModel']"}),
+ 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_template': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '100', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
+ 'unicity_keys': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.importtarget': {
+ 'Meta': {'object_name': 'ImportTarget'},
+ 'column': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'targets'", 'to': "orm['ishtar_common.ImporterColumn']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'concat': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'concat_str': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}),
+ 'force_new': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'formater_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.FormaterType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'regexp_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Regexp']", 'null': 'True', 'blank': 'True'}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.ishtarsiteprofile': {
+ 'Meta': {'ordering': "['label']", 'object_name': 'IshtarSiteProfile'},
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'base_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(0, 0, 0, 0)'", 'max_length': '200'}),
+ 'base_find_external_id': ('django.db.models.fields.TextField', [], {'default': "'{context_record__external_id}-{label}'"}),
+ 'container_external_id': ('django.db.models.fields.TextField', [], {'default': "'{responsible__external_id}-{index}'"}),
+ 'context_record': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'context_record_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(210,200,0,0.2)'", 'max_length': '200'}),
+ 'context_record_external_id': ('django.db.models.fields.TextField', [], {'default': "'{parcel__external_id}-{label}'"}),
+ 'currency': ('django.db.models.fields.CharField', [], {'default': "u'\\u20ac'", 'max_length': "'5'"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'file_external_id': ('django.db.models.fields.TextField', [], {'default': "'{year}-{numeric_reference}'"}),
+ 'files': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'files_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(0, 32, 210, 0.1)'", 'max_length': '200'}),
+ 'find': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'find_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(210,0,0,0.15)'", 'max_length': '200'}),
+ 'find_external_id': ('django.db.models.fields.TextField', [], {'default': "'{get_first_base_find__context_record__external_id}-{label}'"}),
+ 'homepage': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.TextField', [], {}),
+ 'mapping': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'mapping_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(72, 236, 0, 0.15)'", 'max_length': '200'}),
+ 'parcel_external_id': ('django.db.models.fields.TextField', [], {'default': "'{associated_file__external_id}{operation__code_patriarche}-{town__numero_insee}-{section}{parcel_number}'"}),
+ 'person_raw_name': ('django.db.models.fields.TextField', [], {'default': "'{name|upper} {surname}'"}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
+ 'warehouse': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'warehouse_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(10,20,200,0.15)'", 'max_length': '200'}),
+ 'warehouse_external_id': ('django.db.models.fields.TextField', [], {'default': "'{name|slug}'"})
+ },
+ 'ishtar_common.ishtaruser': {
+ 'Meta': {'object_name': 'IshtarUser', '_ormbases': ['auth.User']},
+ 'advanced_shortcut_menu': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ishtaruser'", 'unique': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'})
+ },
+ 'ishtar_common.itemkey': {
+ 'Meta': {'object_name': 'ItemKey'},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Import']", 'null': 'True', 'blank': 'True'}),
+ 'key': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {})
+ },
+ 'ishtar_common.operationtype': {
+ 'Meta': {'ordering': "['-preventive', 'order', 'label']", 'object_name': 'OperationType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'preventive': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.organization': {
+ 'Meta': {'object_name': 'Organization'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_organization'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'merge_candidate': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_candidate_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Organization']"}),
+ 'merge_exclusion': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_exclusion_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Organization']"}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'organization_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.OrganizationType']"}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.organizationtype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'OrganizationType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.person': {
+ 'Meta': {'object_name': 'Person'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'attached_to': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'members'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'contact_type': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_person'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'merge_candidate': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_candidate_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'merge_exclusion': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_exclusion_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'old_title': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'person_types': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ishtar_common.PersonType']", 'symmetrical': 'False'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_name': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'surname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.TitleType']", 'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.persontype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'PersonType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.regexp': {
+ 'Meta': {'object_name': 'Regexp'},
+ 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'regexp': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.sourcetype': {
+ 'Meta': {'ordering': "['label']", 'object_name': 'SourceType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.spatialreferencesystem': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'SpatialReferenceSystem'},
+ 'auth_name': ('django.db.models.fields.CharField', [], {'default': "'EPSG'", 'max_length': '256'}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.state': {
+ 'Meta': {'ordering': "['number']", 'object_name': 'State'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'})
+ },
+ 'ishtar_common.supporttype': {
+ 'Meta': {'object_name': 'SupportType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.targetkey': {
+ 'Meta': {'unique_together': "(('target', 'key', 'associated_user', 'associated_import'),)", 'object_name': 'TargetKey'},
+ 'associated_import': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Import']", 'null': 'True', 'blank': 'True'}),
+ 'associated_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_set': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'key': ('django.db.models.fields.TextField', [], {}),
+ 'target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'keys'", 'to': "orm['ishtar_common.ImportTarget']"}),
+ 'value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.titletype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'TitleType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.town': {
+ 'Meta': {'ordering': "['numero_insee']", 'object_name': 'Town'},
+ 'canton': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Canton']", 'null': 'True', 'blank': 'True'}),
+ 'center': ('django.contrib.gis.db.models.fields.PointField', [], {'srid': '27572', 'null': 'True', 'blank': 'True'}),
+ 'departement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_town'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'numero_insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '6'}),
+ 'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ }
+ }
+
+ complete_apps = ['ishtar_common'] \ No newline at end of file
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 15c8fe5da..c9903525d 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -35,7 +35,8 @@ import zipfile
from django.conf import settings
from django.core.cache import cache
-from django.core.exceptions import ObjectDoesNotExist, ValidationError
+from django.core.exceptions import ObjectDoesNotExist, ValidationError, \
+ SuspiciousOperation
from django.core.files import File
from django.core.files.uploadedfile import SimpleUploadedFile
from django.core.validators import validate_slug
@@ -665,8 +666,9 @@ class GeneralType(Cached, models.Model):
def get_keys(self):
keys = [self.txt_idx]
content_type = ContentType.objects.get_for_model(self.__class__)
- for ik in ItemKey.objects.filter(content_type=content_type,
- object_id=self.pk).all():
+ for ik in ItemKey.objects.filter(
+ content_type=content_type, object_id=self.pk).exclude(
+ key=self.txt_idx).all():
keys.append(ik.key)
return keys
@@ -1707,28 +1709,6 @@ IMPORTER_CLASSES.update({
'archaeological_files.data_importer.FileImporterSraPdL'})
-def get_importer_models():
- MODELS = [
- ('ishtar_common.models.Person', _(u"Person")),
- ('ishtar_common.models.Organization', _(u"Organization")),
- ('archaeological_operations.models.Operation', _(u"Operation")),
- ('archaeological_operations.models.ArchaeologicalSite',
- _(u"Archaeological site")),
- ('archaeological_operations.models.Parcel', _(u"Parcels")),
- ('archaeological_operations.models.OperationSource',
- _(u"Operation source")),
- ]
- MODELS = [('archaeological_files.models.File',
- _(u"Archaeological files"))] + MODELS
- MODELS = [('archaeological_context_records.models.ContextRecord',
- _(u"Context records")),
- ('archaeological_context_records.models.RecordRelations',
- _(u"Context record relations"))] + MODELS
- MODELS = [('archaeological_finds.models.BaseFind',
- _(u"Base finds")), ] + MODELS
- return MODELS
-
-
def get_model_fields(model):
"""
Return a dict of fields from model
@@ -1744,13 +1724,33 @@ def get_model_fields(model):
def import_class(full_path_classname):
+ """
+ Return the model class from the full path
+ TODO: add a white list for more security
+ """
mods = full_path_classname.split('.')
if len(mods) == 1:
mods = ['ishtar_common', 'models', mods[0]]
+ elif 'models' not in mods:
+ raise SuspiciousOperation(
+ u"Try to import a non model from a string")
module = import_module('.'.join(mods[:-1]))
return getattr(module, mods[-1])
+class ImporterModel(models.Model):
+ name = models.CharField(_(u"Name"), max_length=200)
+ klass = models.CharField(_(u"Class name"), max_length=200)
+
+ class Meta:
+ verbose_name = _(u"Importer - Model")
+ verbose_name_plural = _(u"Importer - Models")
+ ordering = ('name',)
+
+ def __unicode__(self):
+ return self.name
+
+
class ImporterType(models.Model):
"""
Description of a table to be mapped with ishtar database
@@ -1763,9 +1763,13 @@ class ImporterType(models.Model):
max_length=500)
users = models.ManyToManyField('IshtarUser', verbose_name=_(u"Users"),
blank=True, null=True)
- associated_models = models.CharField(_(u"Associated model"),
- max_length=200,
- choices=get_importer_models())
+ associated_models = models.ForeignKey(
+ ImporterModel, verbose_name=_(u"Associated model"),
+ related_name='+', blank=True, null=True)
+ created_models = models.ManyToManyField(
+ ImporterModel, verbose_name=_(u"Models that can accept new items"),
+ blank=True, null=True, help_text=_(u"Leave blank for no restrictions"),
+ related_name='+')
is_template = models.BooleanField(_(u"Is template"), default=False)
unicity_keys = models.CharField(_(u"Unicity keys (separator \";\")"),
blank=True, null=True, max_length=500)
@@ -1781,7 +1785,7 @@ class ImporterType(models.Model):
if self.slug and self.slug in IMPORTER_CLASSES:
cls = import_class(IMPORTER_CLASSES[self.slug])
return cls
- OBJECT_CLS = import_class(self.associated_models)
+ OBJECT_CLS = import_class(self.associated_models.klass)
DEFAULTS = dict([(default.keys, default.values)
for default in self.defaults.all()])
LINE_FORMAT = []
@@ -1824,9 +1828,13 @@ class ImporterType(models.Model):
UNICITY_KEYS = []
if self.unicity_keys:
UNICITY_KEYS = [un.strip() for un in self.unicity_keys.split(';')]
+ MODEL_CREATION_LIMIT = []
+ for modls in self.created_models.all():
+ MODEL_CREATION_LIMIT.append(import_class(modls.klass))
args = {'OBJECT_CLS': OBJECT_CLS, 'DESC': self.description,
'DEFAULTS': DEFAULTS, 'LINE_FORMAT': LINE_FORMAT,
- 'UNICITY_KEYS': UNICITY_KEYS}
+ 'UNICITY_KEYS': UNICITY_KEYS,
+ 'MODEL_CREATION_LIMIT': MODEL_CREATION_LIMIT}
name = str(''.join(
x for x in slugify(self.name).replace('-', ' ').title()
if not x.isspace()))
@@ -1836,7 +1844,6 @@ class ImporterType(models.Model):
def get_associated_model(parent_model, keys):
model = None
- OBJECT_CLS = None
if isinstance(parent_model, unicode) or \
isinstance(parent_model, str):
OBJECT_CLS = import_class(parent_model)
@@ -1874,7 +1881,7 @@ class ImporterDefault(models.Model):
@property
def associated_model(self):
- return get_associated_model(self.importer_type.associated_models,
+ return get_associated_model(self.importer_type.associated_models.klass,
self.keys)
@property
@@ -2014,7 +2021,7 @@ class ImportTarget(models.Model):
def associated_model(self):
try:
return get_associated_model(
- self.column.importer_type.associated_models,
+ self.column.importer_type.associated_models.klass,
self.target.split('__'))
except KeyError:
return
@@ -2221,7 +2228,10 @@ class FormaterType(models.Model):
pass
return UnicodeFormater(**kwargs)
elif self.formater_type == 'DateFormater':
- return DateFormater(self.options, **kwargs)
+ date_formats = self.options
+ if self.many_split:
+ date_formats = self.options.split(kwargs.pop('many_split'))
+ return DateFormater(date_formats, **kwargs)
elif self.formater_type == 'StrToBoolean':
return StrToBoolean(**kwargs)
elif self.formater_type == 'UnknowType':
diff --git a/ishtar_common/static/media/style.css b/ishtar_common/static/media/style.css
index 5ff9e9895..06c80c194 100644
--- a/ishtar_common/static/media/style.css
+++ b/ishtar_common/static/media/style.css
@@ -382,6 +382,14 @@ div#header{
background-repeat:no-repeat;
}
+.confirm-message{
+ background-color: rgb(170, 170, 170);
+ margin: 0px;
+ color: rgb(255, 255, 255);
+ padding: 2px;
+ font-weight: bold;
+}
+
div#validation-bar p{
margin:0;
}
diff --git a/ishtar_common/templates/ishtar/wizard/confirm_wizard.html b/ishtar_common/templates/ishtar/wizard/confirm_wizard.html
index 1fbaadcd1..565256552 100644
--- a/ishtar_common/templates/ishtar/wizard/confirm_wizard.html
+++ b/ishtar_common/templates/ishtar/wizard/confirm_wizard.html
@@ -37,10 +37,17 @@
</table>
{% endif %}
{% block "extra_informations" %}{% endblock %}
-<div id='validation-bar' class='big'>
- <p>{%if confirm_end_msg %}{{confirm_end_msg|safe}}{%else%}{% trans "Would you like to save them?" %}{%endif%}</p>
- <input type="submit" value="{% trans "Validate" %}"/>
-</div>
+
+ {% block "footer" %}
+ <div id="footer">
+ {% block "validation_bar" %}
+ <p class="confirm-message">{%if confirm_end_msg %}{{confirm_end_msg|safe}}{%else%}{% trans "Would you like to save them?" %}{%endif%}</p>
+ {% include 'ishtar/wizard/validation_bar.html' %}
+ {% endblock %}
+ {% include 'ishtar/blocks/footer.html' %}
+ </div>
+ {% endblock %}
+
</div>
</form>
{% endblock %}
diff --git a/ishtar_common/templates/ishtar/wizard/default_wizard.html b/ishtar_common/templates/ishtar/wizard/default_wizard.html
index e77484e61..204feeebe 100644
--- a/ishtar_common/templates/ishtar/wizard/default_wizard.html
+++ b/ishtar_common/templates/ishtar/wizard/default_wizard.html
@@ -46,12 +46,12 @@
{{ previous_fields|safe }}
{% block "footer" %}
<div id="footer">
-{% block "validation_bar" %}
-{% include 'ishtar/wizard/validation_bar.html' %}
-{% endblock %}
-{% include 'ishtar/blocks/footer.html' %}
-{% endblock %}
+ {% block "validation_bar" %}
+ {% include 'ishtar/wizard/validation_bar.html' %}
+ {% endblock %}
+ {% include 'ishtar/blocks/footer.html' %}
</div>
+{% endblock %}
</div>
</form>
{% endblock %}
diff --git a/ishtar_common/templates/ishtar/wizard/parcels_wizard.html b/ishtar_common/templates/ishtar/wizard/parcels_wizard.html
index e417b5e4d..28ec962f4 100644
--- a/ishtar_common/templates/ishtar/wizard/parcels_wizard.html
+++ b/ishtar_common/templates/ishtar/wizard/parcels_wizard.html
@@ -24,9 +24,14 @@
<p><button name="formset_modify" value="{{wizard.steps.current}}">{% trans "Add/Modify" %}</button></p>
<input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
{{ previous_fields|safe }}
-{% block "validation_bar" %}
-{% include 'ishtar/wizard/validation_bar.html' %}
-{% endblock %}
+ {% block "footer" %}
+ <div id="footer">
+ {% block "validation_bar" %}
+ {% include 'ishtar/wizard/validation_bar.html' %}
+ {% endblock %}
+ {% include 'ishtar/blocks/footer.html' %}
+ </div>
+ {% endblock %}
</div>
</form>
{% endblock %}
diff --git a/ishtar_common/templates/ishtar/wizard/relations_wizard.html b/ishtar_common/templates/ishtar/wizard/relations_wizard.html
index 9ca592ca8..3f12bcd60 100644
--- a/ishtar_common/templates/ishtar/wizard/relations_wizard.html
+++ b/ishtar_common/templates/ishtar/wizard/relations_wizard.html
@@ -23,9 +23,14 @@
<p><button name="formset_modify" value="{{wizard.steps.current}}">{% trans "Add/Modify" %}</button></p>
<input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
{{ previous_fields|safe }}
-{% block "validation_bar" %}
-{% include 'ishtar/wizard/validation_bar.html' %}
-{% endblock %}
+ {% block "footer" %}
+ <div id="footer">
+ {% block "validation_bar" %}
+ {% include 'ishtar/wizard/validation_bar.html' %}
+ {% endblock %}
+ {% include 'ishtar/blocks/footer.html' %}
+ </div>
+ {% endblock %}
</div>
</form>
{% endblock %}
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py
index 0082624d7..a3fa62ce7 100644
--- a/ishtar_common/tests.py
+++ b/ishtar_common/tests.py
@@ -27,6 +27,7 @@ from django.contrib.contenttypes.models import ContentType
from django.core.cache import cache
from django.core.exceptions import ValidationError
from django.core.files.base import File as DjangoFile
+from django.core.files.uploadedfile import SimpleUploadedFile
from django.core.management import call_command
from django.core.urlresolvers import reverse
from django.template.defaultfilters import slugify
@@ -35,6 +36,7 @@ from django.test.client import Client
from django.test.simple import DjangoTestSuiteRunner
from ishtar_common import models
+from ishtar_common import forms_common
from ishtar_common.utils import post_save_point
"""
@@ -271,10 +273,12 @@ class AdminGenTypeTest(TestCase):
'../ishtar_common/fixtures/initial_importtypes-fr.json',
settings.ROOT_PATH +
'../archaeological_operations/fixtures/initial_data-fr.json']
- models = [models.OrganizationType, models.PersonType, models.TitleType,
- models.AuthorType, models.SourceType, models.OperationType,
- models.SpatialReferenceSystem]
- # models.Format, models.SupportType -- need fixtures
+ gen_models = [
+ models.OrganizationType, models.PersonType, models.TitleType,
+ models.AuthorType, models.SourceType, models.OperationType,
+ models.SpatialReferenceSystem, models.Format, models.SupportType]
+ models_with_data = gen_models + [models.ImporterModel]
+ models = models_with_data
module_name = 'ishtar_common'
def setUp(self):
@@ -294,14 +298,15 @@ class AdminGenTypeTest(TestCase):
self.assertEqual(
response.status_code, 200,
msg="Can not access admin list for {}.".format(model))
- url = base_url + "{}/".format(model.objects.all()[0].pk)
- response = self.client.get(url)
- self.assertEqual(
- response.status_code, 200,
- msg="Can not access admin detail for {}.".format(model))
+ if model in self.models_with_data:
+ url = base_url + "{}/".format(model.objects.all()[0].pk)
+ response = self.client.get(url)
+ self.assertEqual(
+ response.status_code, 200,
+ msg="Can not access admin detail for {}.".format(model))
def test_csv_export(self):
- for model in self.models:
+ for model in self.gen_models:
url = '/admin/{}/{}/'.format(self.module_name,
model.__name__.lower())
response = self.client.post(url, {'action': 'export_as_csv'})
@@ -311,7 +316,7 @@ class AdminGenTypeTest(TestCase):
def test_str(self):
# test __str__
- for model in self.models:
+ for model in self.models_with_data:
self.assertTrue(str(model.objects.all()[0]))
@@ -768,8 +773,10 @@ class ImportTest(TestCase):
# create an import, fields are not relevant...
create_user()
+ imp_model = models.ImporterModel.objects.create(
+ klass='ishtar_common.models.Person', name='Person')
importer_type = models.ImporterType.objects.create(
- associated_models='ishtar_common.models.Person')
+ associated_models=imp_model)
mcc_operation_file = DjangoFile(file(
settings.ROOT_PATH +
'../archaeological_operations/tests/MCC-operations-example.csv',
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 467401b8f..c9eb9fec8 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -73,7 +73,7 @@ from ishtar_common.models import HistoryError, PRIVATE_FIELDS, \
import models
-CSV_OPTIONS = {'delimiter': ';', 'quotechar': '"', 'quoting': csv.QUOTE_ALL}
+CSV_OPTIONS = {'delimiter': ',', 'quotechar': '"', 'quoting': csv.QUOTE_ALL}
ENCODING = settings.ENCODING or 'utf-8'
logger = logging.getLogger(__name__)
@@ -993,7 +993,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
new_vals.append(u"{}{}{}".format(
vals[idx], u' - ', format_val(v)))
my_vals = new_vals[:]
- data.append(" ; ".join(my_vals) or u"")
+ data.append(u" & ".join(my_vals) or u"")
datas.append(data)
if manual_sort_key:
# +1 because the id is added as a first col
@@ -1068,7 +1068,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
col_names = []
for field_name in table_cols:
if type(field_name) in (list, tuple):
- field_name = " ; ".join(field_name)
+ field_name = u" & ".join(field_name)
if hasattr(model, 'EXTRA_FULL_FIELDS_LABELS') and\
field_name in model.EXTRA_FULL_FIELDS_LABELS:
field = model.EXTRA_FULL_FIELDS_LABELS[field_name]
diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py
index 020eca5af..597fb2764 100644
--- a/ishtar_common/widgets.py
+++ b/ishtar_common/widgets.py
@@ -657,7 +657,7 @@ class JQueryJqGrid(forms.RadioSelect):
self.associated_model.__module__,
self.associated_model.__name__)
for imp in models.ImporterType.objects.filter(
- slug__isnull=False, associated_models=model_name,
+ slug__isnull=False, associated_models__klass=model_name,
is_template=True).all():
dct['extra_sources'].append((
imp.slug, imp.name,
diff --git a/translations/de/ishtar_common.po b/translations/de/ishtar_common.po
index 6aae6aaa7..ca174763b 100644
--- a/translations/de/ishtar_common.po
+++ b/translations/de/ishtar_common.po
@@ -23,109 +23,125 @@ msgstr ""
msgid "Related item"
msgstr ""
-#: data_importer.py:182
+#: admin.py:79
+msgid "Export selected as CSV file"
+msgstr ""
+
+#: data_importer.py:183
#, python-format
msgid "\"%(value)s\" is too long. The max length is %(length)d characters."
msgstr ""
-#: data_importer.py:199
+#: data_importer.py:200
#, python-format
msgid "\"%(value)s\" not equal to yes or no"
msgstr ""
-#: data_importer.py:211
+#: data_importer.py:212
#, python-format
msgid "\"%(value)s\" is not a float"
msgstr ""
-#: data_importer.py:224 data_importer.py:238 data_importer.py:482
+#: data_importer.py:225 data_importer.py:239 data_importer.py:483
#, python-format
msgid "\"%(value)s\" is not a valid date"
msgstr ""
-#: data_importer.py:251
+#: data_importer.py:252
#, python-format
msgid "\"%(value)s\" is not an integer"
msgstr ""
-#: data_importer.py:302 data_importer.py:545
+#: data_importer.py:303 data_importer.py:546
#, python-format
msgid "Choice for \"%s\" is not available. Which one is relevant?\n"
msgstr ""
-#: data_importer.py:309
+#: data_importer.py:310
#, python-format
msgid "%d. None of the above - create new"
msgstr ""
-#: data_importer.py:312
+#: data_importer.py:313
#, python-format
msgid "%d. None of the above - skip"
msgstr ""
-#: data_importer.py:508
+#: data_importer.py:509
#, python-format
msgid "\"%(value)s\" is not a valid path for the given archive"
msgstr ""
-#: data_importer.py:620
+#: data_importer.py:623
msgid ""
"The given file is not correct. Check the file format. If you use a CSV file: "
"check that column separator and encoding are similar to the ones used by the "
"reference file."
msgstr ""
-#: data_importer.py:624
+#: data_importer.py:627
#, python-format
msgid "Too many cols (%(user_col)d) when maximum is %(ref_col)d"
msgstr ""
-#: data_importer.py:626
+#: data_importer.py:629
msgid "No data provided"
msgstr ""
-#: data_importer.py:627
+#: data_importer.py:630
msgid "Value is required"
msgstr ""
-#: data_importer.py:628
+#: data_importer.py:631
#, python-format
msgid "At least %d columns must be filled"
msgstr ""
-#: data_importer.py:629
+#: data_importer.py:632
msgid "The regexp doesn't match."
msgstr ""
-#: data_importer.py:1037
+#: data_importer.py:634
+msgid ""
+"Forced creation is set for model {} but this model is not in the list of "
+"models allowed to be created."
+msgstr ""
+
+#: data_importer.py:636
+msgid ""
+"{} with values {} doesn't exist in the database. Create it first or fix your "
+"source file."
+msgstr ""
+
+#: data_importer.py:1089
msgid "Not imported"
msgstr ""
-#: data_importer.py:1444
+#: data_importer.py:1522
msgid "line"
msgstr ""
-#: data_importer.py:1444
+#: data_importer.py:1522
msgid "col"
msgstr ""
-#: data_importer.py:1444
+#: data_importer.py:1522
msgid "error"
msgstr ""
-#: data_importer.py:1450
+#: data_importer.py:1528
msgid "field"
msgstr ""
-#: data_importer.py:1450
+#: data_importer.py:1528
msgid "source"
msgstr ""
-#: data_importer.py:1450
+#: data_importer.py:1528
msgid "result"
msgstr ""
-#: data_importer.py:1466
+#: data_importer.py:1544
#, python-format
msgid "\"%(value)s\" not in %(values)s"
msgstr ""
@@ -158,12 +174,12 @@ msgstr ""
msgid "Add a new item"
msgstr ""
-#: forms.py:262 models.py:1473
+#: forms.py:262 models.py:1475
msgid "Template"
msgstr ""
#: forms_common.py:41 forms_common.py:59 forms_common.py:182
-#: forms_common.py:406 models.py:1539 models.py:2940
+#: forms_common.py:406 models.py:1541 models.py:2950
#: templates/blocks/JQueryAdvancedTown.html:19
#: templates/ishtar/sheet_organization.html:13
msgid "Town"
@@ -179,9 +195,8 @@ msgid ""
"french town Saint-Denis in the Seine-Saint-Denis department.</p>"
msgstr ""
-#: forms_common.py:68 forms_common.py:855 ishtar_menu.py:47 models.py:1712
-#: models.py:2567 models.py:2749 models.py:2810
-#: templates/ishtar/sheet_person.html:4
+#: forms_common.py:68 forms_common.py:855 ishtar_menu.py:47 models.py:2574
+#: models.py:2756 models.py:2818 templates/ishtar/sheet_person.html:4
msgid "Person"
msgstr ""
@@ -192,63 +207,63 @@ msgid ""
msgstr ""
#: forms_common.py:170 forms_common.py:327 forms_common.py:451
-#: ishtar_menu.py:75 models.py:1713 models.py:2450 models.py:2541
+#: ishtar_menu.py:75 models.py:2457 models.py:2548
#: templates/ishtar/sheet_organization.html:4
msgid "Organization"
msgstr ""
#: forms_common.py:173 forms_common.py:210 forms_common.py:322
-#: forms_common.py:376 forms_common.py:446 models.py:1094 models.py:1472
-#: models.py:1758 models.py:1977 models.py:2444 models.py:2553 models.py:2926
-#: templates/ishtar/sheet_organization.html:8
+#: forms_common.py:376 forms_common.py:446 models.py:1096 models.py:1474
+#: models.py:1742 models.py:1758 models.py:1984 models.py:2451 models.py:2560
+#: models.py:2936 templates/ishtar/sheet_organization.html:8
#: templates/ishtar/sheet_organization.html:21
msgid "Name"
msgstr ""
-#: forms_common.py:174 models.py:1694 models.py:2108
+#: forms_common.py:174 models.py:1696 models.py:2115
msgid "Organization type"
msgstr ""
-#: forms_common.py:176 forms_common.py:400 models.py:1534
+#: forms_common.py:176 forms_common.py:400 models.py:1536
#: templates/ishtar/sheet_organization.html:10
msgid "Address"
msgstr ""
-#: forms_common.py:178 forms_common.py:403 models.py:1535
+#: forms_common.py:178 forms_common.py:403 models.py:1537
#: templates/ishtar/sheet_organization.html:11
msgid "Address complement"
msgstr ""
-#: forms_common.py:180 forms_common.py:404 models.py:1537
+#: forms_common.py:180 forms_common.py:404 models.py:1539
#: templates/ishtar/sheet_organization.html:12
msgid "Postal code"
msgstr ""
-#: forms_common.py:183 forms_common.py:407 models.py:1540
+#: forms_common.py:183 forms_common.py:407 models.py:1542
msgid "Country"
msgstr ""
#: forms_common.py:185 forms_common.py:324 forms_common.py:380
-#: forms_common.py:448 forms_common.py:572 models.py:1567
+#: forms_common.py:448 forms_common.py:572 models.py:1569
msgid "Email"
msgstr ""
-#: forms_common.py:186 forms_common.py:383 models.py:1552
+#: forms_common.py:186 forms_common.py:383 models.py:1554
#: templates/ishtar/sheet_organization.html:14
#: templates/ishtar/sheet_person.html:19
#: templates/ishtar/wizard/wizard_person.html:17
msgid "Phone"
msgstr ""
-#: forms_common.py:187 forms_common.py:392 models.py:1564
+#: forms_common.py:187 forms_common.py:392 models.py:1566
#: templates/ishtar/sheet_organization.html:15
#: templates/ishtar/sheet_person.html:37
#: templates/ishtar/wizard/wizard_person.html:35
msgid "Mobile phone"
msgstr ""
-#: forms_common.py:211 forms_common.py:325 forms_common.py:449 models.py:2144
-#: models.py:2446 models.py:2861 templates/sheet_ope.html:85
+#: forms_common.py:211 forms_common.py:325 forms_common.py:449 models.py:2151
+#: models.py:2453 models.py:2871 templates/sheet_ope.html:85
#: templates/sheet_ope.html.py:105 templates/sheet_ope.html:126
#: templates/ishtar/import_list.html:13
#: templates/ishtar/sheet_organization.html:23
@@ -272,7 +287,7 @@ msgstr ""
msgid "Organization to merge"
msgstr ""
-#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2551
+#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2558
#: templates/ishtar/sheet_organization.html:22
msgid "Surname"
msgstr ""
@@ -290,25 +305,25 @@ msgstr ""
msgid "Identity"
msgstr ""
-#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:2109
-#: models.py:2545 models.py:2547 models.py:2858 templates/sheet_ope.html:104
+#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:2116
+#: models.py:2552 models.py:2554 models.py:2868 templates/sheet_ope.html:104
#: templates/ishtar/blocks/window_tables/documents.html:7
msgid "Title"
msgstr ""
-#: forms_common.py:372 models.py:2549
+#: forms_common.py:372 models.py:2556
msgid "Salutation"
msgstr ""
-#: forms_common.py:378 models.py:2555
+#: forms_common.py:378 models.py:2562
msgid "Raw name"
msgstr ""
-#: forms_common.py:381 models.py:1553
+#: forms_common.py:381 models.py:1555
msgid "Phone description"
msgstr ""
-#: forms_common.py:384 models.py:1555 models.py:1557
+#: forms_common.py:384 models.py:1557 models.py:1559
msgid "Phone description 2"
msgstr ""
@@ -316,11 +331,11 @@ msgstr ""
msgid "Phone 2"
msgstr ""
-#: forms_common.py:388 models.py:1561
+#: forms_common.py:388 models.py:1563
msgid "Phone description 3"
msgstr ""
-#: forms_common.py:390 models.py:1559
+#: forms_common.py:390 models.py:1561
msgid "Phone 3"
msgstr ""
@@ -328,23 +343,23 @@ msgstr ""
msgid "Current organization"
msgstr ""
-#: forms_common.py:409 models.py:1542
+#: forms_common.py:409 models.py:1544
msgid "Other address: address"
msgstr ""
-#: forms_common.py:412 models.py:1545
+#: forms_common.py:412 models.py:1547
msgid "Other address: address complement"
msgstr ""
-#: forms_common.py:414 models.py:1546
+#: forms_common.py:414 models.py:1548
msgid "Other address: postal code"
msgstr ""
-#: forms_common.py:416 models.py:1548
+#: forms_common.py:416 models.py:1550
msgid "Other address: town"
msgstr ""
-#: forms_common.py:418 models.py:1550
+#: forms_common.py:418 models.py:1552
msgid "Other address: country"
msgstr ""
@@ -360,7 +375,7 @@ msgstr ""
msgid "Account search"
msgstr ""
-#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2498
+#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2505
msgid "Person type"
msgstr ""
@@ -392,7 +407,7 @@ msgstr ""
msgid "Send the new password by email?"
msgstr ""
-#: forms_common.py:628 forms_common.py:641 models.py:2941
+#: forms_common.py:628 forms_common.py:641 models.py:2951
msgid "Towns"
msgstr ""
@@ -408,7 +423,7 @@ msgstr ""
msgid "Documentation informations"
msgstr ""
-#: forms_common.py:775 forms_common.py:823 models.py:2110 models.py:2835
+#: forms_common.py:775 forms_common.py:823 models.py:2117 models.py:2843
msgid "Source type"
msgstr ""
@@ -420,37 +435,37 @@ msgstr ""
msgid "Internal reference"
msgstr ""
-#: forms_common.py:783 models.py:2872
+#: forms_common.py:783 models.py:2882
msgid "Numerical ressource (web address)"
msgstr ""
-#: forms_common.py:784 models.py:2874
+#: forms_common.py:784 models.py:2884
msgid "Receipt date"
msgstr ""
-#: forms_common.py:786 models.py:2273 models.py:2876
+#: forms_common.py:786 models.py:2280 models.py:2886
msgid "Creation date"
msgstr ""
-#: forms_common.py:789 models.py:2879
+#: forms_common.py:789 models.py:2889
msgid "Receipt date in documentation"
msgstr ""
-#: forms_common.py:791 forms_common.py:827 models.py:376 models.py:687
-#: models.py:2004 models.py:2559 models.py:2886
+#: forms_common.py:791 forms_common.py:827 models.py:377 models.py:689
+#: models.py:2011 models.py:2566 models.py:2896
msgid "Comment"
msgstr ""
-#: forms_common.py:793 forms_common.py:826 models.py:1096 models.py:1762
-#: models.py:1936 models.py:1978 models.py:2885 templates/sheet_ope.html:128
+#: forms_common.py:793 forms_common.py:826 models.py:1098 models.py:1762
+#: models.py:1943 models.py:1985 models.py:2895 templates/sheet_ope.html:128
msgid "Description"
msgstr ""
-#: forms_common.py:796 models.py:2887
+#: forms_common.py:796 models.py:2897
msgid "Additional information"
msgstr ""
-#: forms_common.py:798 forms_common.py:830 models.py:2889
+#: forms_common.py:798 forms_common.py:830 models.py:2899
msgid "Has a duplicate"
msgstr ""
@@ -465,7 +480,7 @@ msgid ""
"p>"
msgstr ""
-#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2815
+#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2823
#: templates/ishtar/wizard/wizard_person_deletion.html:124
msgid "Author"
msgstr ""
@@ -478,7 +493,7 @@ msgstr ""
msgid "Would you like to delete this documentation?"
msgstr ""
-#: forms_common.py:856 models.py:2111 models.py:2803 models.py:2812
+#: forms_common.py:856 models.py:2118 models.py:2810 models.py:2820
msgid "Author type"
msgstr ""
@@ -490,7 +505,7 @@ msgstr ""
msgid "There are identical authors."
msgstr ""
-#: forms_common.py:893 models.py:2816 models.py:2868
+#: forms_common.py:893 models.py:2824 models.py:2878
#: templates/sheet_ope.html:106
#: templates/ishtar/blocks/window_tables/documents.html:9
msgid "Authors"
@@ -508,7 +523,7 @@ msgstr ""
msgid "Deletion"
msgstr ""
-#: ishtar_menu.py:39 models.py:1268 views.py:1548
+#: ishtar_menu.py:39 models.py:1270 views.py:1549
msgid "Global variables"
msgstr ""
@@ -536,278 +551,278 @@ msgstr ""
msgid "Manual merge"
msgstr ""
-#: ishtar_menu.py:109 models.py:2284
+#: ishtar_menu.py:109 models.py:2291
msgid "Imports"
msgstr ""
-#: ishtar_menu.py:112 views.py:1556
+#: ishtar_menu.py:112 views.py:1557
msgid "New import"
msgstr ""
-#: ishtar_menu.py:116 views.py:1570
+#: ishtar_menu.py:116 views.py:1571
msgid "Current imports"
msgstr ""
-#: ishtar_menu.py:120 views.py:1606
+#: ishtar_menu.py:120 views.py:1607
msgid "Old imports"
msgstr ""
-#: models.py:183
+#: models.py:184
msgid "Not a valid item."
msgstr ""
-#: models.py:196
+#: models.py:197
msgid "A selected item is not a valid item."
msgstr ""
-#: models.py:207
+#: models.py:208
msgid "This item already exists."
msgstr ""
-#: models.py:372 models.py:686 models.py:1507 models.py:1519 models.py:1933
+#: models.py:373 models.py:688 models.py:1509 models.py:1521 models.py:1940
msgid "Label"
msgstr ""
-#: models.py:374
+#: models.py:375
msgid "Textual ID"
msgstr ""
-#: models.py:377 models.py:689 models.py:1476
+#: models.py:378 models.py:691 models.py:1478
msgid "Available"
msgstr ""
-#: models.py:713 models.py:2050
+#: models.py:715 models.py:2057
msgid "Key"
msgstr ""
-#: models.py:719
+#: models.py:721
msgid "Specific key to an import"
msgstr ""
-#: models.py:811
+#: models.py:813
msgid "Last editor"
msgstr ""
-#: models.py:814
+#: models.py:816
msgid "Creator"
msgstr ""
-#: models.py:956 models.py:2952 models.py:3008
+#: models.py:958 models.py:2962 models.py:3018
msgid "Order"
msgstr ""
-#: models.py:957
+#: models.py:959
msgid "Symmetrical"
msgstr ""
-#: models.py:958
+#: models.py:960
msgid "Tiny label"
msgstr ""
-#: models.py:972
+#: models.py:974
msgid "Cannot have symmetrical and an inverse_relation"
msgstr ""
-#: models.py:1088
+#: models.py:1090
msgid "Euro"
msgstr ""
-#: models.py:1089
+#: models.py:1091
msgid "US dollar"
msgstr ""
-#: models.py:1095 models.py:1760
+#: models.py:1097 models.py:1760
msgid "Slug"
msgstr ""
-#: models.py:1098
+#: models.py:1100
msgid "CSS color code for base module"
msgstr ""
-#: models.py:1100
+#: models.py:1102
msgid "Files module"
msgstr ""
-#: models.py:1102
+#: models.py:1104
msgid "CSS color code for files module"
msgstr ""
-#: models.py:1104
+#: models.py:1106
msgid "Context records module"
msgstr ""
-#: models.py:1107
+#: models.py:1109
msgid "CSS color code for context record module"
msgstr ""
-#: models.py:1109
+#: models.py:1111
msgid "Finds module"
msgstr ""
-#: models.py:1110
+#: models.py:1112
msgid "Need context records module"
msgstr ""
-#: models.py:1112
+#: models.py:1114
msgid "CSS color code for find module"
msgstr ""
-#: models.py:1115
+#: models.py:1117
msgid "Warehouses module"
msgstr ""
-#: models.py:1116
+#: models.py:1118
msgid "Need finds module"
msgstr ""
-#: models.py:1118
+#: models.py:1120
msgid "CSS code for warehouse module"
msgstr ""
-#: models.py:1120
+#: models.py:1122
msgid "Mapping module"
msgstr ""
-#: models.py:1122
+#: models.py:1124
msgid "CSS code for mapping module"
msgstr ""
-#: models.py:1125
+#: models.py:1127
msgid "Home page"
msgstr ""
-#: models.py:1126
+#: models.py:1128
#, python-brace-format
msgid ""
"Homepage of Ishtar - if not defined a default homepage will appear. Use the "
"markdown syntax. {random_image} can be used to display a random image."
msgstr ""
-#: models.py:1130
+#: models.py:1132
msgid "File external id"
msgstr ""
-#: models.py:1132
+#: models.py:1134
msgid ""
"Formula to manage file external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1137
+#: models.py:1139
msgid "Parcel external id"
msgstr ""
-#: models.py:1140
+#: models.py:1142
msgid ""
"Formula to manage parcel external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1145
+#: models.py:1147
msgid "Context record external id"
msgstr ""
-#: models.py:1147
+#: models.py:1149
msgid ""
"Formula to manage context record external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1152
+#: models.py:1154
msgid "Base find external id"
msgstr ""
-#: models.py:1154
+#: models.py:1156
msgid ""
"Formula to manage base find external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1159
+#: models.py:1161
msgid "Find external id"
msgstr ""
-#: models.py:1161
+#: models.py:1163
msgid ""
"Formula to manage find external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1166
+#: models.py:1168
msgid "Container external id"
msgstr ""
-#: models.py:1168
+#: models.py:1170
msgid ""
"Formula to manage container external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1173
+#: models.py:1175
msgid "Warehouse external id"
msgstr ""
-#: models.py:1175
+#: models.py:1177
msgid ""
"Formula to manage warehouse external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1180
+#: models.py:1182
msgid "Raw name for person"
msgstr ""
-#: models.py:1182
+#: models.py:1184
msgid ""
"Formula to manage person raw_name. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1186
+#: models.py:1188
msgid "Current active"
msgstr ""
-#: models.py:1187
+#: models.py:1189
msgid "Currency"
msgstr ""
-#: models.py:1191
+#: models.py:1193
msgid "Ishtar site profile"
msgstr ""
-#: models.py:1192
+#: models.py:1194
msgid "Ishtar site profiles"
msgstr ""
-#: models.py:1261
+#: models.py:1263
msgid "Variable name"
msgstr ""
-#: models.py:1262
+#: models.py:1264
msgid "Description of the variable"
msgstr ""
-#: models.py:1264 models.py:2051
+#: models.py:1266 models.py:2058
msgid "Value"
msgstr ""
-#: models.py:1267
+#: models.py:1269
msgid "Global variable"
msgstr ""
-#: models.py:1377 models.py:1407
+#: models.py:1379 models.py:1409
msgid "Total"
msgstr ""
-#: models.py:1384 models.py:1508 models.py:1520
+#: models.py:1386 models.py:1510 models.py:1522
#: templates/ishtar/sheet_person.html:22
#: templates/ishtar/dashboards/dashboard_main_detail.html:141
#: templates/ishtar/dashboards/dashboard_main_detail_users.html:26
@@ -815,641 +830,633 @@ msgstr ""
msgid "Number"
msgstr ""
-#: models.py:1471
+#: models.py:1473
msgid "Administrative Act"
msgstr ""
-#: models.py:1475
+#: models.py:1477
msgid "Associated object"
msgstr ""
-#: models.py:1479
+#: models.py:1481
msgid "Document template"
msgstr ""
-#: models.py:1480
+#: models.py:1482
msgid "Document templates"
msgstr ""
-#: models.py:1511 models.py:1521 models.py:2268
+#: models.py:1513 models.py:1523 models.py:2275
msgid "State"
msgstr ""
-#: models.py:1525 templates/blocks/JQueryAdvancedTown.html:12
+#: models.py:1527 templates/blocks/JQueryAdvancedTown.html:12
msgid "Department"
msgstr ""
-#: models.py:1526
+#: models.py:1528
msgid "Departments"
msgstr ""
-#: models.py:1563
+#: models.py:1565
msgid "Raw phone"
msgstr ""
-#: models.py:1569
+#: models.py:1571
msgid "Alternative address is prefered"
msgstr ""
-#: models.py:1608
+#: models.py:1610
msgid "Tel: "
msgstr ""
-#: models.py:1612
+#: models.py:1614
msgid "Mobile: "
msgstr ""
-#: models.py:1616
+#: models.py:1618
msgid "Email: "
msgstr ""
-#: models.py:1621
+#: models.py:1623
msgid "Merge key"
msgstr ""
-#: models.py:1695
+#: models.py:1697
msgid "Organization types"
msgstr ""
-#: models.py:1714 views.py:241
-msgid "Operation"
-msgstr ""
-
-#: models.py:1716
-msgid "Archaeological site"
+#: models.py:1743
+msgid "Class name"
msgstr ""
-#: models.py:1717
-msgid "Parcels"
+#: models.py:1746
+msgid "Importer - Model"
msgstr ""
-#: models.py:1719
-msgid "Operation source"
+#: models.py:1747
+msgid "Importer - Models"
msgstr ""
-#: models.py:1722 views.py:1364 views.py:1414
-msgid "Archaeological files"
-msgstr ""
-
-#: models.py:1724 views.py:1367 views.py:1422
-msgid "Context records"
-msgstr ""
-
-#: models.py:1726
-msgid "Context record relations"
+#: models.py:1764 templates/ishtar/dashboards/dashboard_main.html:25
+msgid "Users"
msgstr ""
-#: models.py:1728
-msgid "Base finds"
+#: models.py:1767
+msgid "Associated model"
msgstr ""
-#: models.py:1764 templates/ishtar/dashboards/dashboard_main.html:25
-msgid "Users"
+#: models.py:1770
+msgid "Models that can accept new items"
msgstr ""
-#: models.py:1766
-msgid "Associated model"
+#: models.py:1771
+msgid "Leave blank for no restrictions"
msgstr ""
-#: models.py:1769
+#: models.py:1773
msgid "Is template"
msgstr ""
-#: models.py:1770
+#: models.py:1774
msgid "Unicity keys (separator \";\")"
msgstr ""
-#: models.py:1774
+#: models.py:1778
msgid "Importer - Type"
msgstr ""
-#: models.py:1775
+#: models.py:1779
msgid "Importer - Types"
msgstr ""
-#: models.py:1865
+#: models.py:1872
msgid "Importer - Default"
msgstr ""
-#: models.py:1866
+#: models.py:1873
msgid "Importer - Defaults"
msgstr ""
-#: models.py:1901
+#: models.py:1908
msgid "Importer - Default value"
msgstr ""
-#: models.py:1902
+#: models.py:1909
msgid "Importer - Default values"
msgstr ""
-#: models.py:1935
+#: models.py:1942
msgid "Column number"
msgstr ""
-#: models.py:1938
+#: models.py:1945
msgid "Required"
msgstr ""
-#: models.py:1941
+#: models.py:1948
msgid "Importer - Column"
msgstr ""
-#: models.py:1942
+#: models.py:1949
msgid "Importer - Columns"
msgstr ""
-#: models.py:1962
+#: models.py:1969
msgid "Field name"
msgstr ""
-#: models.py:1964 models.py:1998
+#: models.py:1971 models.py:2005
msgid "Force creation of new items"
msgstr ""
-#: models.py:1966 models.py:2000
+#: models.py:1973 models.py:2007
msgid "Concatenate with existing"
msgstr ""
-#: models.py:1968 models.py:2002
+#: models.py:1975 models.py:2009
msgid "Concatenate character"
msgstr ""
-#: models.py:1972
+#: models.py:1979
msgid "Importer - Duplicate field"
msgstr ""
-#: models.py:1973
+#: models.py:1980
msgid "Importer - Duplicate fields"
msgstr ""
-#: models.py:1980
+#: models.py:1987
msgid "Regular expression"
msgstr ""
-#: models.py:1983
+#: models.py:1990
msgid "Importer - Regular expression"
msgstr ""
-#: models.py:1984
+#: models.py:1991
msgid "Importer - Regular expressions"
msgstr ""
-#: models.py:2007
+#: models.py:2014
msgid "Importer - Target"
msgstr ""
-#: models.py:2008
+#: models.py:2015
msgid "Importer - Targets"
msgstr ""
-#: models.py:2032 views.py:545
+#: models.py:2039 views.py:545
msgid "True"
msgstr ""
-#: models.py:2033 views.py:547
+#: models.py:2040 views.py:547
msgid "False"
msgstr ""
-#: models.py:2052
+#: models.py:2059
msgid "Is set"
msgstr ""
-#: models.py:2059
+#: models.py:2066
msgid "Importer - Target key"
msgstr ""
-#: models.py:2060
+#: models.py:2067
msgid "Importer - Targets keys"
msgstr ""
-#: models.py:2112 models.py:2851 models.py:2864
+#: models.py:2119 models.py:2874
msgid "Format"
msgstr ""
-#: models.py:2113 models.py:2956
+#: models.py:2120 models.py:2966
msgid "Operation type"
msgstr ""
-#: models.py:2114
+#: models.py:2121
msgid "Period"
msgstr ""
-#: models.py:2115
+#: models.py:2122
msgid "Report state"
msgstr ""
-#: models.py:2116
+#: models.py:2123
msgid "Remain type"
msgstr ""
-#: models.py:2117
+#: models.py:2124
msgid "Unit"
msgstr ""
-#: models.py:2118
+#: models.py:2125
msgid "Activity type"
msgstr ""
-#: models.py:2119
+#: models.py:2126
msgid "Material"
msgstr ""
-#: models.py:2121
+#: models.py:2128
msgid "Conservatory state"
msgstr ""
-#: models.py:2122
+#: models.py:2129
msgid "Container type"
msgstr ""
-#: models.py:2123
+#: models.py:2130
msgid "Preservation type"
msgstr ""
-#: models.py:2124
+#: models.py:2131
msgid "Object type"
msgstr ""
-#: models.py:2125
+#: models.py:2132
msgid "Integrity type"
msgstr ""
-#: models.py:2126
+#: models.py:2133
msgid "Remarkability type"
msgstr ""
-#: models.py:2127
+#: models.py:2134
msgid "Batch type"
msgstr ""
-#: models.py:2129
+#: models.py:2136
msgid "Identification type"
msgstr ""
-#: models.py:2131
+#: models.py:2138
msgid "Context record relation type"
msgstr ""
-#: models.py:2132 models.py:3014
+#: models.py:2139 models.py:3024
msgid "Spatial reference system"
msgstr ""
-#: models.py:2133 models.py:2843
+#: models.py:2140 models.py:2852
msgid "Support type"
msgstr ""
-#: models.py:2134 models.py:2510
+#: models.py:2141 models.py:2517
msgid "Title type"
msgstr ""
-#: models.py:2140
+#: models.py:2147
msgid "Integer"
msgstr ""
-#: models.py:2141
+#: models.py:2148
msgid "Float"
msgstr ""
-#: models.py:2142
+#: models.py:2149
msgid "String"
msgstr ""
-#: models.py:2143 templates/sheet_ope.html:86
+#: models.py:2150 templates/sheet_ope.html:86
msgid "Date"
msgstr ""
-#: models.py:2145 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
+#: models.py:2152 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
#: templates/ishtar/dashboards/dashboard_main_detail.html:126
msgid "Year"
msgstr ""
-#: models.py:2146
+#: models.py:2153
msgid "String to boolean"
msgstr ""
-#: models.py:2147
+#: models.py:2154
msgctxt "filesystem"
msgid "File"
msgstr ""
-#: models.py:2148
+#: models.py:2155
msgid "Unknow type"
msgstr ""
-#: models.py:2164
+#: models.py:2171
msgid "4 digit year. e.g.: \"2015\""
msgstr ""
-#: models.py:2165
+#: models.py:2172
msgid "4 digit year/month/day. e.g.: \"2015/02/04\""
msgstr ""
-#: models.py:2166
+#: models.py:2173
msgid "Day/month/4 digit year. e.g.: \"04/02/2015\""
msgstr ""
-#: models.py:2176
+#: models.py:2183
msgid "Options"
msgstr ""
-#: models.py:2178
+#: models.py:2185
msgid "Split character(s)"
msgstr ""
-#: models.py:2182
+#: models.py:2189
msgid "Importer - Formater type"
msgstr ""
-#: models.py:2183
+#: models.py:2190
msgid "Importer - Formater types"
msgstr ""
-#: models.py:2232 templates/ishtar/dashboards/dashboard_main_detail.html:63
+#: models.py:2239 templates/ishtar/dashboards/dashboard_main_detail.html:63
msgid "Created"
msgstr ""
-#: models.py:2233
+#: models.py:2240
msgid "Analyse in progress"
msgstr ""
-#: models.py:2234
+#: models.py:2241
msgid "Analysed"
msgstr ""
-#: models.py:2235
+#: models.py:2242
msgid "Import pending"
msgstr ""
-#: models.py:2236
+#: models.py:2243
msgid "Import in progress"
msgstr ""
-#: models.py:2237
+#: models.py:2244
msgid "Finished with errors"
msgstr ""
-#: models.py:2238
+#: models.py:2245
msgid "Finished"
msgstr ""
-#: models.py:2239
+#: models.py:2246
msgid "Archived"
msgstr ""
-#: models.py:2252
+#: models.py:2259
msgid "Imported file"
msgstr ""
-#: models.py:2254
+#: models.py:2261
msgid "Associated images (zip file)"
msgstr ""
-#: models.py:2256
+#: models.py:2263
msgid "Encoding"
msgstr ""
-#: models.py:2258
+#: models.py:2265
msgid "Skip lines"
msgstr ""
-#: models.py:2259 templates/ishtar/import_list.html:47
+#: models.py:2266 templates/ishtar/import_list.html:47
msgid "Error file"
msgstr ""
-#: models.py:2262
+#: models.py:2269
msgid "Result file"
msgstr ""
-#: models.py:2265 templates/ishtar/import_list.html:53
+#: models.py:2272 templates/ishtar/import_list.html:53
msgid "Match file"
msgstr ""
-#: models.py:2271
+#: models.py:2278
msgid "Conservative import"
msgstr ""
-#: models.py:2276
+#: models.py:2283
msgid "End date"
msgstr ""
-#: models.py:2278
+#: models.py:2285
msgid "Remaining seconds"
msgstr ""
-#: models.py:2283
+#: models.py:2290
msgid "Import"
msgstr ""
-#: models.py:2300
+#: models.py:2307
msgid "Analyse"
msgstr ""
-#: models.py:2302 models.py:2305
+#: models.py:2309 models.py:2312
msgid "Re-analyse"
msgstr ""
-#: models.py:2303
+#: models.py:2310
msgid "Launch import"
msgstr ""
-#: models.py:2306
+#: models.py:2313
msgid "Re-import"
msgstr ""
-#: models.py:2307
+#: models.py:2314
msgid "Archive"
msgstr ""
-#: models.py:2309
+#: models.py:2316
msgid "Unarchive"
msgstr ""
-#: models.py:2310 widgets.py:130 templates/ishtar/form_delete.html:11
+#: models.py:2317 widgets.py:130 templates/ishtar/form_delete.html:11
msgid "Delete"
msgstr ""
-#: models.py:2451
+#: models.py:2458
msgid "Organizations"
msgstr ""
-#: models.py:2453
+#: models.py:2460
msgid "Can view all Organizations"
msgstr ""
-#: models.py:2454
+#: models.py:2461
msgid "Can view own Organization"
msgstr ""
-#: models.py:2455
+#: models.py:2462
msgid "Can add own Organization"
msgstr ""
-#: models.py:2457
+#: models.py:2464
msgid "Can change own Organization"
msgstr ""
-#: models.py:2459
+#: models.py:2466
msgid "Can delete own Organization"
msgstr ""
-#: models.py:2494
+#: models.py:2501
msgid "Groups"
msgstr ""
-#: models.py:2499
+#: models.py:2506
msgid "Person types"
msgstr ""
-#: models.py:2511
+#: models.py:2518
msgid "Title types"
msgstr ""
-#: models.py:2520
+#: models.py:2527
msgid "Mr"
msgstr ""
-#: models.py:2521
+#: models.py:2528
msgid "Miss"
msgstr ""
-#: models.py:2522
+#: models.py:2529
msgid "Mr and Mrs"
msgstr ""
-#: models.py:2523
+#: models.py:2530
msgid "Mrs"
msgstr ""
-#: models.py:2524
+#: models.py:2531
msgid "Doctor"
msgstr ""
-#: models.py:2557
+#: models.py:2564
msgid "Contact type"
msgstr ""
-#: models.py:2560 models.py:2624
+#: models.py:2567 models.py:2631
msgid "Types"
msgstr ""
-#: models.py:2563
+#: models.py:2570
msgid "Is attached to"
msgstr ""
-#: models.py:2568
+#: models.py:2575
msgid "Persons"
msgstr ""
-#: models.py:2570
+#: models.py:2577
msgid "Can view all Persons"
msgstr ""
-#: models.py:2571
+#: models.py:2578
msgid "Can view own Person"
msgstr ""
-#: models.py:2572
+#: models.py:2579
msgid "Can add own Person"
msgstr ""
-#: models.py:2573
+#: models.py:2580
msgid "Can change own Person"
msgstr ""
-#: models.py:2574
+#: models.py:2581
msgid "Can delete own Person"
msgstr ""
-#: models.py:2752
+#: models.py:2759
msgid "Advanced shortcut menu"
msgstr ""
-#: models.py:2755
+#: models.py:2762
msgid "Ishtar user"
msgstr ""
-#: models.py:2756
+#: models.py:2763
msgid "Ishtar users"
msgstr ""
-#: models.py:2798
+#: models.py:2805
msgid "To modify the password use the form in Auth > User"
msgstr ""
-#: models.py:2804
+#: models.py:2811
msgid "Author types"
msgstr ""
-#: models.py:2836
+#: models.py:2844
msgid "Source types"
msgstr ""
-#: models.py:2844
+#: models.py:2853
msgid "Support types"
msgstr ""
-#: models.py:2852
-msgid "Formats"
+#: models.py:2860
+msgid "Format type"
+msgstr ""
+
+#: models.py:2861
+msgid "Format types"
msgstr ""
-#: models.py:2859
+#: models.py:2869
msgid "External ID"
msgstr ""
-#: models.py:2862
+#: models.py:2872
msgid "Support"
msgstr ""
-#: models.py:2866
+#: models.py:2876
msgid "Scale"
msgstr ""
-#: models.py:2880
+#: models.py:2890
msgid "Item number"
msgstr ""
-#: models.py:2881
+#: models.py:2891
msgid "Ref."
msgstr ""
-#: models.py:2884
+#: models.py:2894
msgid "Internal ref."
msgstr ""
-#: models.py:2927
+#: models.py:2937
msgid "Surface (m2)"
msgstr ""
-#: models.py:2928 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
+#: models.py:2938 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
msgid "Localisation"
msgstr ""
-#: models.py:2953
+#: models.py:2963
msgid "Is preventive"
msgstr ""
-#: models.py:2957
+#: models.py:2967
msgid "Operation types"
msgstr ""
-#: models.py:2986
+#: models.py:2996
msgid "Preventive"
msgstr ""
-#: models.py:2987
+#: models.py:2997
msgid "Research"
msgstr ""
-#: models.py:3010
+#: models.py:3020
msgid "Authority name"
msgstr ""
-#: models.py:3011
+#: models.py:3021
msgid "Authority SRID"
msgstr ""
-#: models.py:3015
+#: models.py:3025
msgid "Spatial reference systems"
msgstr ""
@@ -1497,6 +1504,10 @@ msgstr ""
msgid "Archaeological file"
msgstr ""
+#: views.py:241
+msgid "Operation"
+msgstr ""
+
#: views.py:243
msgid "Context record"
msgstr ""
@@ -1513,48 +1524,56 @@ msgstr ""
msgid "Treatment"
msgstr ""
-#: views.py:1303 views.py:1346
+#: views.py:1304 views.py:1347
msgid "Operation not permitted."
msgstr ""
-#: views.py:1305
+#: views.py:1306
#, python-format
msgid "New %s"
msgstr ""
-#: views.py:1365 views.py:1418
+#: views.py:1365 views.py:1415
+msgid "Archaeological files"
+msgstr ""
+
+#: views.py:1366 views.py:1419
msgid "Operations"
msgstr ""
-#: views.py:1369 views.py:1425
+#: views.py:1368 views.py:1423
+msgid "Context records"
+msgstr ""
+
+#: views.py:1370 views.py:1426
msgid "Finds"
msgstr ""
-#: views.py:1618 templates/ishtar/import_list.html:43
+#: views.py:1619 templates/ishtar/import_list.html:43
msgid "Link unmatched items"
msgstr ""
-#: views.py:1633
+#: views.py:1634
msgid "Delete import"
msgstr ""
-#: views.py:1672
+#: views.py:1673
msgid "Merge persons"
msgstr ""
-#: views.py:1696
+#: views.py:1697
msgid "Select the main person"
msgstr ""
-#: views.py:1705
+#: views.py:1706
msgid "Merge organization"
msgstr ""
-#: views.py:1715
+#: views.py:1716
msgid "Select the main organization"
msgstr ""
-#: views.py:1755 views.py:1771
+#: views.py:1756 views.py:1772
msgid "Corporation manager"
msgstr ""
diff --git a/translations/fr/archaeological_context_records.po b/translations/fr/archaeological_context_records.po
index 633a55cec..f25806fc8 100644
--- a/translations/fr/archaeological_context_records.po
+++ b/translations/fr/archaeological_context_records.po
@@ -9,8 +9,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2017-02-02 10:17-0500\n"
-"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n"
+"PO-Revision-Date: 2017-02-05 05:22-0500\n"
+"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
@@ -264,12 +264,12 @@ msgid "Dating types"
msgstr "Types de datation"
#: models.py:47
-msgid "Dating quality"
-msgstr "Qualité de datation"
+msgid "Dating quality type"
+msgstr "Type de qualité de datation"
#: models.py:48
-msgid "Dating qualities"
-msgstr "Qualités de datation"
+msgid "Dating quality types"
+msgstr "Types de qualité de datation"
#: models.py:62
msgid "Precise dating"
@@ -364,24 +364,24 @@ msgid ""
"\"Terminus Ante Quem\" the context record can't have been created after this "
"date"
msgstr ""
-"« Terminus Ante Quem » l'Unité d'Enregistrement ne peut avoir été créée "
-"après cette date"
+"« Terminus Ante Quem ». L'Unité d'Enregistrement ne peut avoir été créée "
+"après cette date."
#: models.py:209
msgid "Estimation of a \"Terminus Ante Quem\""
-msgstr "Estimation d'un « Terminus Ante Quem »"
+msgstr "Estimation d'un « Terminus Ante Quem »."
#: models.py:212
msgid ""
"\"Terminus Post Quem\" the context record can't have been created before "
"this date"
msgstr ""
-"« Terminus Post Quem » l'Unité d'Enregistrement ne peut avoir été créée "
-"avant cette date"
+"« Terminus Post Quem ». L'Unité d'Enregistrement ne peut avoir été créée "
+"avant cette date."
#: models.py:216
msgid "Estimation of a \"Terminus Post Quem\""
-msgstr "Estimation d'un « Terminus Post Quem »"
+msgstr "Estimation d'un « Terminus Post Quem »."
#: models.py:224
msgid "Point"
@@ -554,7 +554,7 @@ msgstr "Dossier actif"
#: templates/ishtar/sheet_contextrecord.html:76
msgid "Closed operation"
-msgstr "Opération fermée"
+msgstr "Opération close"
#: templates/ishtar/sheet_contextrecord.html:78
msgid "Closing date:"
diff --git a/translations/fr/archaeological_files.po b/translations/fr/archaeological_files.po
index 61dcf1376..17b2d6784 100644
--- a/translations/fr/archaeological_files.po
+++ b/translations/fr/archaeological_files.po
@@ -11,7 +11,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2017-02-02 10:01-0500\n"
+"PO-Revision-Date: 2017-02-05 05:21-0500\n"
"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n"
"Language-Team: \n"
"Language: fr\n"
@@ -410,7 +410,7 @@ msgstr "Peut supprimer son propre Dossier"
#: models.py:230
msgid "Can close File"
-msgstr "Peut fermer un Dossier"
+msgstr "Peut clore un Dossier"
#: models.py:236
msgid "FILE"
@@ -494,7 +494,7 @@ msgstr "Dossier actif"
#: templates/ishtar/sheet_file.html:37
msgid "Closed file"
-msgstr "Dossier fermé"
+msgstr "Dossier clos"
#: templates/ishtar/sheet_file.html:39
msgid "Closing date:"
diff --git a/translations/fr/archaeological_finds.po b/translations/fr/archaeological_finds.po
index 88e73087a..609ad25c3 100644
--- a/translations/fr/archaeological_finds.po
+++ b/translations/fr/archaeological_finds.po
@@ -9,8 +9,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2017-02-02 09:58-0500\n"
-"Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n"
+"PO-Revision-Date: 2017-02-05 05:22-0500\n"
+"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n"
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
@@ -1274,7 +1274,7 @@ msgstr "Documentation associée au mobilier"
#: templates/ishtar/sheet_treatment.html:20
msgctxt "Treatment"
msgid "Closed"
-msgstr "Clôturé"
+msgstr "Close"
#: templates/ishtar/sheet_treatment.html:22
msgctxt "Treatment"
@@ -1292,7 +1292,7 @@ msgstr "Opérations associées"
#: templates/ishtar/sheet_treatmentfile.html:16
msgctxt "Treatment request"
msgid "Closed"
-msgstr "Clôturée"
+msgstr "Close"
#: templates/ishtar/sheet_treatmentfile.html:18
msgctxt "Treatment request"
diff --git a/translations/fr/archaeological_operations.po b/translations/fr/archaeological_operations.po
index df903a8ec..cdb8dd3be 100644
--- a/translations/fr/archaeological_operations.po
+++ b/translations/fr/archaeological_operations.po
@@ -11,8 +11,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2017-02-02 10:02-0500\n"
-"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
+"PO-Revision-Date: 2017-02-06 09:32-0500\n"
+"Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n"
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
@@ -701,7 +701,7 @@ msgstr "Année - Index"
#: models.py:234
msgid "Associated file (label)"
-msgstr "Fichier associé (nom)"
+msgstr "Dossier associé (nom)"
#: models.py:235
msgid "Operator name"
@@ -713,7 +713,7 @@ msgstr "Responsable scientifique (nom complet)"
#: models.py:237
msgid "Associated file (external ID)"
-msgstr "Fichier associé (identifiant externe)"
+msgstr "Dossier associé (identifiant externe)"
#: models.py:238
msgid "Scientist (title)"
@@ -812,7 +812,7 @@ msgstr "Peut supprimer sa propre Opération"
#: models.py:377
msgid "Can close Operation"
-msgstr "Peut fermer une Opération"
+msgstr "Peut clore une Opération"
#: models.py:406
msgid "OPE"
@@ -1146,7 +1146,7 @@ msgstr "Dossier actif"
#: templates/ishtar/sheet_operation.html:35
msgid "Closed operation"
-msgstr "Opération fermée"
+msgstr "Opération close"
#: templates/ishtar/sheet_operation.html:36
msgid "Closing date:"
diff --git a/translations/fr/archaeological_warehouse.po b/translations/fr/archaeological_warehouse.po
index 7071aec57..e7bdbe6f6 100644
--- a/translations/fr/archaeological_warehouse.po
+++ b/translations/fr/archaeological_warehouse.po
@@ -9,8 +9,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2017-02-02 10:17-0500\n"
-"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n"
+"PO-Revision-Date: 2017-02-04 08:26-0500\n"
+"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
@@ -176,7 +176,7 @@ msgstr "Contenants"
#: models.py:37
msgid "Warehouse types"
-msgstr "Types de dépôts"
+msgstr "Types de dépôt"
#: models.py:56 models.py:186
msgid "External ID"
diff --git a/translations/fr/ishtar_common.po b/translations/fr/ishtar_common.po
index a5cd454fd..ef36de26d 100644
--- a/translations/fr/ishtar_common.po
+++ b/translations/fr/ishtar_common.po
@@ -11,8 +11,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2017-02-03 04:25-0500\n"
-"Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n"
+"PO-Revision-Date: 2017-02-06 09:49-0500\n"
+"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n"
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
@@ -30,54 +30,58 @@ msgstr "courriel"
msgid "Related item"
msgstr "Élément associé"
-#: data_importer.py:182
+#: admin.py:79
+msgid "Export selected as CSV file"
+msgstr "Exporter la sélection en fichier CSV"
+
+#: data_importer.py:183
#, python-format
msgid "\"%(value)s\" is too long. The max length is %(length)d characters."
msgstr ""
"\"%(value)s\" est trop long. La longueur maximum est de %(length)d "
"caractères."
-#: data_importer.py:199
+#: data_importer.py:200
#, python-format
msgid "\"%(value)s\" not equal to yes or no"
msgstr "\"%(value)s\" diffère de oui ou non"
-#: data_importer.py:211
+#: data_importer.py:212
#, python-format
msgid "\"%(value)s\" is not a float"
msgstr "\"%(value)s\" n'est pas un nombre à virgule"
-#: data_importer.py:224 data_importer.py:238 data_importer.py:482
+#: data_importer.py:225 data_importer.py:239 data_importer.py:483
#, python-format
msgid "\"%(value)s\" is not a valid date"
msgstr "\"%(value)s\" n'est pas une date valide"
-#: data_importer.py:251
+#: data_importer.py:252
#, python-format
msgid "\"%(value)s\" is not an integer"
msgstr "\"%(value)s\" n'est pas un entier"
-#: data_importer.py:302 data_importer.py:545
+#: data_importer.py:303 data_importer.py:546
#, python-format
msgid "Choice for \"%s\" is not available. Which one is relevant?\n"
msgstr "Le choix pour \"%s\" n'est pas disponible. Lequel est pertinent ?\n"
-#: data_importer.py:309
+#: data_importer.py:310
#, python-format
msgid "%d. None of the above - create new"
msgstr "%d. Aucun de ceux-là - créer un nouveau"
-#: data_importer.py:312
+#: data_importer.py:313
#, python-format
msgid "%d. None of the above - skip"
msgstr "%d. Aucun de ceux-là - passer"
-#: data_importer.py:508
+#: data_importer.py:509
#, python-format
msgid "\"%(value)s\" is not a valid path for the given archive"
msgstr "\"%(value)s\" n'est pas un chemin valide pour cette archive"
-#: data_importer.py:620
+#: data_importer.py:623
msgid ""
"The given file is not correct. Check the file format. If you use a CSV file: "
"check that column separator and encoding are similar to the ones used by the "
@@ -87,57 +91,73 @@ msgstr ""
"utilisez un fichier CSV : vérifiez que le séparateur de colonnes et "
"l'encodage sont similaires à ceux du fichier de référence."
-#: data_importer.py:624
+#: data_importer.py:627
#, python-format
msgid "Too many cols (%(user_col)d) when maximum is %(ref_col)d"
msgstr "Trop de colonnes (%(user_col)d). Le maximum est %(ref_col)d"
-#: data_importer.py:626
+#: data_importer.py:629
msgid "No data provided"
msgstr "Aucune donnée fournie"
-#: data_importer.py:627
+#: data_importer.py:630
msgid "Value is required"
msgstr "Valeur requise"
-#: data_importer.py:628
+#: data_importer.py:631
#, python-format
msgid "At least %d columns must be filled"
msgstr "Au moins %d colonnes doivent être remplies"
-#: data_importer.py:629
+#: data_importer.py:632
msgid "The regexp doesn't match."
msgstr "L'expression régulière ne fonctionne pas."
-#: data_importer.py:1037
+#: data_importer.py:634
+msgid ""
+"Forced creation is set for model {} but this model is not in the list of "
+"models allowed to be created."
+msgstr ""
+"La création forcée est possible pour le modèle {} mais ce modèle ne fait pas "
+"partie de la liste des créations de modèle autorisées."
+
+#: data_importer.py:636
+msgid ""
+"{} with values {} doesn't exist in the database. Create it first or fix your "
+"source file."
+msgstr ""
+"L'élément {} avec les valeurs {} n'existe pas dans la base de données. Créez-"
+"le d'abord ou corrigez votre fichier source."
+
+#: data_importer.py:1089
msgid "Not imported"
msgstr "Non importé"
-#: data_importer.py:1444
+#: data_importer.py:1522
msgid "line"
msgstr "ligne"
-#: data_importer.py:1444
+#: data_importer.py:1522
msgid "col"
msgstr "colonne"
-#: data_importer.py:1444
+#: data_importer.py:1522
msgid "error"
msgstr "erreur"
-#: data_importer.py:1450
+#: data_importer.py:1528
msgid "field"
msgstr "champ"
-#: data_importer.py:1450
+#: data_importer.py:1528
msgid "source"
msgstr "source"
-#: data_importer.py:1450
+#: data_importer.py:1528
msgid "result"
msgstr "résultat"
-#: data_importer.py:1466
+#: data_importer.py:1544
#, python-format
msgid "\"%(value)s\" not in %(values)s"
msgstr "\"%(value)s\" n'est pas dans %(values)s"
@@ -170,12 +190,12 @@ msgstr "Vous devez sélectionner un élément."
msgid "Add a new item"
msgstr "Ajouter un nouvel élément"
-#: forms.py:262 models.py:1473
+#: forms.py:262 models.py:1475
msgid "Template"
msgstr "Patron"
#: forms_common.py:41 forms_common.py:59 forms_common.py:182
-#: forms_common.py:406 models.py:1539 models.py:2940
+#: forms_common.py:406 models.py:1541 models.py:2950
#: templates/blocks/JQueryAdvancedTown.html:19
#: templates/ishtar/sheet_organization.html:13
msgid "Town"
@@ -198,9 +218,8 @@ msgstr ""
"<p class='example'>Par exemple tapez « saint denis 93 » pour obtenir la "
"commune Saint-Denis dans le département français de Seine-Saint-Denis.</p>"
-#: forms_common.py:68 forms_common.py:855 ishtar_menu.py:47 models.py:1712
-#: models.py:2567 models.py:2749 models.py:2810
-#: templates/ishtar/sheet_person.html:4
+#: forms_common.py:68 forms_common.py:855 ishtar_menu.py:47 models.py:2574
+#: models.py:2756 models.py:2818 templates/ishtar/sheet_person.html:4
msgid "Person"
msgstr "Personne"
@@ -213,63 +232,63 @@ msgstr ""
"pas possible."
#: forms_common.py:170 forms_common.py:327 forms_common.py:451
-#: ishtar_menu.py:75 models.py:1713 models.py:2450 models.py:2541
+#: ishtar_menu.py:75 models.py:2457 models.py:2548
#: templates/ishtar/sheet_organization.html:4
msgid "Organization"
msgstr "Organisation"
#: forms_common.py:173 forms_common.py:210 forms_common.py:322
-#: forms_common.py:376 forms_common.py:446 models.py:1094 models.py:1472
-#: models.py:1758 models.py:1977 models.py:2444 models.py:2553 models.py:2926
-#: templates/ishtar/sheet_organization.html:8
+#: forms_common.py:376 forms_common.py:446 models.py:1096 models.py:1474
+#: models.py:1742 models.py:1758 models.py:1984 models.py:2451 models.py:2560
+#: models.py:2936 templates/ishtar/sheet_organization.html:8
#: templates/ishtar/sheet_organization.html:21
msgid "Name"
msgstr "Nom"
-#: forms_common.py:174 models.py:1694 models.py:2108
+#: forms_common.py:174 models.py:1696 models.py:2115
msgid "Organization type"
msgstr "Type d'organisation"
-#: forms_common.py:176 forms_common.py:400 models.py:1534
+#: forms_common.py:176 forms_common.py:400 models.py:1536
#: templates/ishtar/sheet_organization.html:10
msgid "Address"
msgstr "Adresse"
-#: forms_common.py:178 forms_common.py:403 models.py:1535
+#: forms_common.py:178 forms_common.py:403 models.py:1537
#: templates/ishtar/sheet_organization.html:11
msgid "Address complement"
msgstr "Complément d'adresse"
-#: forms_common.py:180 forms_common.py:404 models.py:1537
+#: forms_common.py:180 forms_common.py:404 models.py:1539
#: templates/ishtar/sheet_organization.html:12
msgid "Postal code"
msgstr "Code postal"
-#: forms_common.py:183 forms_common.py:407 models.py:1540
+#: forms_common.py:183 forms_common.py:407 models.py:1542
msgid "Country"
msgstr "Pays"
#: forms_common.py:185 forms_common.py:324 forms_common.py:380
-#: forms_common.py:448 forms_common.py:572 models.py:1567
+#: forms_common.py:448 forms_common.py:572 models.py:1569
msgid "Email"
msgstr "Courriel"
-#: forms_common.py:186 forms_common.py:383 models.py:1552
+#: forms_common.py:186 forms_common.py:383 models.py:1554
#: templates/ishtar/sheet_organization.html:14
#: templates/ishtar/sheet_person.html:19
#: templates/ishtar/wizard/wizard_person.html:17
msgid "Phone"
msgstr "Téléphone"
-#: forms_common.py:187 forms_common.py:392 models.py:1564
+#: forms_common.py:187 forms_common.py:392 models.py:1566
#: templates/ishtar/sheet_organization.html:15
#: templates/ishtar/sheet_person.html:37
#: templates/ishtar/wizard/wizard_person.html:35
msgid "Mobile phone"
msgstr "Téléphone portable"
-#: forms_common.py:211 forms_common.py:325 forms_common.py:449 models.py:2144
-#: models.py:2446 models.py:2861 templates/sheet_ope.html:85
+#: forms_common.py:211 forms_common.py:325 forms_common.py:449 models.py:2151
+#: models.py:2453 models.py:2871 templates/sheet_ope.html:85
#: templates/sheet_ope.html.py:105 templates/sheet_ope.html:126
#: templates/ishtar/import_list.html:13
#: templates/ishtar/sheet_organization.html:23
@@ -293,7 +312,7 @@ msgstr "Fusionner tous les éléments dans"
msgid "Organization to merge"
msgstr "Organisation à fusionner"
-#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2551
+#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2558
#: templates/ishtar/sheet_organization.html:22
msgid "Surname"
msgstr "Prénom"
@@ -311,25 +330,25 @@ msgstr "Personne à fusionner"
msgid "Identity"
msgstr "Identité"
-#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:2109
-#: models.py:2545 models.py:2547 models.py:2858 templates/sheet_ope.html:104
+#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:2116
+#: models.py:2552 models.py:2554 models.py:2868 templates/sheet_ope.html:104
#: templates/ishtar/blocks/window_tables/documents.html:7
msgid "Title"
msgstr "Titre"
-#: forms_common.py:372 models.py:2549
+#: forms_common.py:372 models.py:2556
msgid "Salutation"
msgstr "Formule d'appel"
-#: forms_common.py:378 models.py:2555
+#: forms_common.py:378 models.py:2562
msgid "Raw name"
msgstr "Nom brut"
-#: forms_common.py:381 models.py:1553
+#: forms_common.py:381 models.py:1555
msgid "Phone description"
msgstr "Type de téléphone"
-#: forms_common.py:384 models.py:1555 models.py:1557
+#: forms_common.py:384 models.py:1557 models.py:1559
msgid "Phone description 2"
msgstr "Type de téléphone 2"
@@ -337,11 +356,11 @@ msgstr "Type de téléphone 2"
msgid "Phone 2"
msgstr "Téléphone 2"
-#: forms_common.py:388 models.py:1561
+#: forms_common.py:388 models.py:1563
msgid "Phone description 3"
msgstr "Type de téléphone 3"
-#: forms_common.py:390 models.py:1559
+#: forms_common.py:390 models.py:1561
msgid "Phone 3"
msgstr "Téléphone 3"
@@ -349,23 +368,23 @@ msgstr "Téléphone 3"
msgid "Current organization"
msgstr "Organisation actuelle"
-#: forms_common.py:409 models.py:1542
+#: forms_common.py:409 models.py:1544
msgid "Other address: address"
msgstr "Autre adresse : adresse"
-#: forms_common.py:412 models.py:1545
+#: forms_common.py:412 models.py:1547
msgid "Other address: address complement"
msgstr "Autre adresse : complément d'adresse"
-#: forms_common.py:414 models.py:1546
+#: forms_common.py:414 models.py:1548
msgid "Other address: postal code"
msgstr "Autre adresse : code postal"
-#: forms_common.py:416 models.py:1548
+#: forms_common.py:416 models.py:1550
msgid "Other address: town"
msgstr "Autre adresse : ville"
-#: forms_common.py:418 models.py:1550
+#: forms_common.py:418 models.py:1552
msgid "Other address: country"
msgstr "Autre adresse : pays"
@@ -381,7 +400,7 @@ msgstr "Nom d'utilisateur"
msgid "Account search"
msgstr "Rechercher un compte"
-#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2498
+#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2505
msgid "Person type"
msgstr "Type de personne"
@@ -413,7 +432,7 @@ msgstr "Ce nom d'utilisateur existe déjà."
msgid "Send the new password by email?"
msgstr "Envoyer le nouveau mot de passe par courriel ?"
-#: forms_common.py:628 forms_common.py:641 models.py:2941
+#: forms_common.py:628 forms_common.py:641 models.py:2951
msgid "Towns"
msgstr "Communes"
@@ -429,7 +448,7 @@ msgstr "Seul un choix peut être coché."
msgid "Documentation informations"
msgstr "Information sur le document"
-#: forms_common.py:775 forms_common.py:823 models.py:2110 models.py:2835
+#: forms_common.py:775 forms_common.py:823 models.py:2117 models.py:2843
msgid "Source type"
msgstr "Type de document"
@@ -441,37 +460,37 @@ msgstr "Référence"
msgid "Internal reference"
msgstr "Référence interne"
-#: forms_common.py:783 models.py:2872
+#: forms_common.py:783 models.py:2882
msgid "Numerical ressource (web address)"
msgstr "Ressource numérique (adresse web)"
-#: forms_common.py:784 models.py:2874
+#: forms_common.py:784 models.py:2884
msgid "Receipt date"
msgstr "Date de réception"
-#: forms_common.py:786 models.py:2273 models.py:2876
+#: forms_common.py:786 models.py:2280 models.py:2886
msgid "Creation date"
msgstr "Date de création"
-#: forms_common.py:789 models.py:2879
+#: forms_common.py:789 models.py:2889
msgid "Receipt date in documentation"
msgstr "Date de réception en documentation"
-#: forms_common.py:791 forms_common.py:827 models.py:376 models.py:687
-#: models.py:2004 models.py:2559 models.py:2886
+#: forms_common.py:791 forms_common.py:827 models.py:377 models.py:689
+#: models.py:2011 models.py:2566 models.py:2896
msgid "Comment"
msgstr "Commentaire"
-#: forms_common.py:793 forms_common.py:826 models.py:1096 models.py:1762
-#: models.py:1936 models.py:1978 models.py:2885 templates/sheet_ope.html:128
+#: forms_common.py:793 forms_common.py:826 models.py:1098 models.py:1762
+#: models.py:1943 models.py:1985 models.py:2895 templates/sheet_ope.html:128
msgid "Description"
msgstr "Description"
-#: forms_common.py:796 models.py:2887
+#: forms_common.py:796 models.py:2897
msgid "Additional information"
-msgstr "Informations supplémentaires"
+msgstr "Information supplémentaire"
-#: forms_common.py:798 forms_common.py:830 models.py:2889
+#: forms_common.py:798 forms_common.py:830 models.py:2899
msgid "Has a duplicate"
msgstr "Existe en doublon"
@@ -488,20 +507,20 @@ msgstr ""
"<p>Les images trop grandes sont retaillées en : %(width)dx%(height)d (le "
"ratio est conservé).</p>"
-#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2815
+#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2823
#: templates/ishtar/wizard/wizard_person_deletion.html:124
msgid "Author"
msgstr "Auteur"
#: forms_common.py:829
msgid "Additional informations"
-msgstr "Informations complémentaires"
+msgstr "Informations supplémentaires"
#: forms_common.py:840
msgid "Would you like to delete this documentation?"
msgstr "Voulez-vous supprimer ce document ?"
-#: forms_common.py:856 models.py:2111 models.py:2803 models.py:2812
+#: forms_common.py:856 models.py:2118 models.py:2810 models.py:2820
msgid "Author type"
msgstr "Type d'auteur"
@@ -513,7 +532,7 @@ msgstr "Sélection d'auteur"
msgid "There are identical authors."
msgstr "Il y a des auteurs identiques."
-#: forms_common.py:893 models.py:2816 models.py:2868
+#: forms_common.py:893 models.py:2824 models.py:2878
#: templates/sheet_ope.html:106
#: templates/ishtar/blocks/window_tables/documents.html:9
msgid "Authors"
@@ -531,7 +550,7 @@ msgstr "Ajout/modification"
msgid "Deletion"
msgstr "Suppression"
-#: ishtar_menu.py:39 models.py:1268 views.py:1548
+#: ishtar_menu.py:39 models.py:1270 views.py:1549
msgid "Global variables"
msgstr "Variables globales"
@@ -559,147 +578,147 @@ msgstr "Fusion automatique"
msgid "Manual merge"
msgstr "Fusion manuelle"
-#: ishtar_menu.py:109 models.py:2284
+#: ishtar_menu.py:109 models.py:2291
msgid "Imports"
msgstr "Imports"
-#: ishtar_menu.py:112 views.py:1556
+#: ishtar_menu.py:112 views.py:1557
msgid "New import"
msgstr "Nouvel import"
-#: ishtar_menu.py:116 views.py:1570
+#: ishtar_menu.py:116 views.py:1571
msgid "Current imports"
msgstr "Imports en cours"
-#: ishtar_menu.py:120 views.py:1606
+#: ishtar_menu.py:120 views.py:1607
msgid "Old imports"
msgstr "Anciens imports"
-#: models.py:183
+#: models.py:184
msgid "Not a valid item."
msgstr "Élément invalide."
-#: models.py:196
+#: models.py:197
msgid "A selected item is not a valid item."
msgstr "Un élément sélectionné n'est pas valide."
-#: models.py:207
+#: models.py:208
msgid "This item already exists."
msgstr "Cet élément existe déjà."
-#: models.py:372 models.py:686 models.py:1507 models.py:1519 models.py:1933
+#: models.py:373 models.py:688 models.py:1509 models.py:1521 models.py:1940
msgid "Label"
msgstr "Libellé"
-#: models.py:374
+#: models.py:375
msgid "Textual ID"
msgstr "Identifiant textuel"
-#: models.py:377 models.py:689 models.py:1476
+#: models.py:378 models.py:691 models.py:1478
msgid "Available"
msgstr "Disponible"
-#: models.py:713 models.py:2050
+#: models.py:715 models.py:2057
msgid "Key"
msgstr "Clé"
-#: models.py:719
+#: models.py:721
msgid "Specific key to an import"
msgstr "Clé spécifique à un import"
-#: models.py:811
+#: models.py:813
msgid "Last editor"
msgstr "Dernier éditeur"
-#: models.py:814
+#: models.py:816
msgid "Creator"
msgstr "Créateur"
-#: models.py:956 models.py:2952 models.py:3008
+#: models.py:958 models.py:2962 models.py:3018
msgid "Order"
msgstr "Ordre"
-#: models.py:957
+#: models.py:959
msgid "Symmetrical"
msgstr "Symétrique"
-#: models.py:958
+#: models.py:960
msgid "Tiny label"
msgstr "Libellé court"
-#: models.py:972
+#: models.py:974
msgid "Cannot have symmetrical and an inverse_relation"
msgstr "Ne peut pas être symétrique et avoir une relation inverse"
-#: models.py:1088
+#: models.py:1090
msgid "Euro"
msgstr "Euro"
-#: models.py:1089
+#: models.py:1091
msgid "US dollar"
msgstr "Dollar US"
-#: models.py:1095 models.py:1760
+#: models.py:1097 models.py:1760
msgid "Slug"
msgstr "Identifiant texte"
-#: models.py:1098
+#: models.py:1100
msgid "CSS color code for base module"
msgstr "Code couleur CSS pour le tronc commun"
-#: models.py:1100
+#: models.py:1102
msgid "Files module"
msgstr "Module Dossiers"
-#: models.py:1102
+#: models.py:1104
msgid "CSS color code for files module"
msgstr "Code couleur CSS pour le module Dossier"
-#: models.py:1104
+#: models.py:1106
msgid "Context records module"
msgstr "Module Unités d'Enregistrement"
-#: models.py:1107
+#: models.py:1109
msgid "CSS color code for context record module"
msgstr "Code couleur CSS pour le module Unité d'Enregistrement"
-#: models.py:1109
+#: models.py:1111
msgid "Finds module"
msgstr "Module Mobilier"
-#: models.py:1110
+#: models.py:1112
msgid "Need context records module"
msgstr "Nécessite le module Unités d'Enregistrement"
-#: models.py:1112
+#: models.py:1114
msgid "CSS color code for find module"
msgstr "Code couleur CSS pour le module Mobilier"
-#: models.py:1115
+#: models.py:1117
msgid "Warehouses module"
msgstr "Module Dépôts"
-#: models.py:1116
+#: models.py:1118
msgid "Need finds module"
msgstr "Nécessite le module mobilier"
-#: models.py:1118
+#: models.py:1120
msgid "CSS code for warehouse module"
msgstr "Code couleur CSS pour le module Dépôt"
-#: models.py:1120
+#: models.py:1122
msgid "Mapping module"
msgstr "Module cartographique"
-#: models.py:1122
+#: models.py:1124
msgid "CSS code for mapping module"
msgstr "Code couleur CSS pour le module cartographique"
-#: models.py:1125
+#: models.py:1127
msgid "Home page"
msgstr "Page d'accueil"
-#: models.py:1126
+#: models.py:1128
#, python-brace-format
msgid ""
"Homepage of Ishtar - if not defined a default homepage will appear. Use the "
@@ -709,11 +728,11 @@ msgstr ""
"défaut apparaît. Utiliser la syntaxe Markdown. {random_image} peut être "
"utilisé pour afficher une image au hasard."
-#: models.py:1130
+#: models.py:1132
msgid "File external id"
msgstr "Identifiant externe de fichier"
-#: models.py:1132
+#: models.py:1134
msgid ""
"Formula to manage file external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
@@ -723,11 +742,11 @@ msgstr ""
"précaution. Une formule incorrecte peut rendre l'application inutilisable et "
"l'import de données externes peut alors être destructif."
-#: models.py:1137
+#: models.py:1139
msgid "Parcel external id"
msgstr "Identifiant externe de parcelle"
-#: models.py:1140
+#: models.py:1142
msgid ""
"Formula to manage parcel external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
@@ -737,11 +756,11 @@ msgstr ""
"précaution. Une formule incorrecte peut rendre l'application inutilisable et "
"l'import de données externes peut alors être destructif."
-#: models.py:1145
+#: models.py:1147
msgid "Context record external id"
msgstr "Identifiant externe d'unité d'enregistrement"
-#: models.py:1147
+#: models.py:1149
msgid ""
"Formula to manage context record external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
@@ -751,11 +770,11 @@ msgstr ""
"manipuler avec précaution. Une formule incorrecte peut rendre l'application "
"inutilisable et l'import de données externes peut alors être destructif."
-#: models.py:1152
+#: models.py:1154
msgid "Base find external id"
msgstr "Identifiant externe de mobilier de base"
-#: models.py:1154
+#: models.py:1156
msgid ""
"Formula to manage base find external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
@@ -765,11 +784,11 @@ msgstr ""
"manipuler avec précaution. Une formule incorrecte peut rendre l'application "
"inutilisable et l'import de données externes peut alors être destructif."
-#: models.py:1159
+#: models.py:1161
msgid "Find external id"
msgstr "Identifiant externe de mobilier"
-#: models.py:1161
+#: models.py:1163
msgid ""
"Formula to manage find external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
@@ -779,11 +798,11 @@ msgstr ""
"précaution. Une formule incorrecte peut rendre l'application inutilisable et "
"l'import de données externes peut alors être destructif."
-#: models.py:1166
+#: models.py:1168
msgid "Container external id"
msgstr "ID externe du contenant"
-#: models.py:1168
+#: models.py:1170
msgid ""
"Formula to manage container external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
@@ -793,11 +812,11 @@ msgstr ""
"précaution. Une formule incorrecte peut rendre l'application inutilisable et "
"l'import de données externes peut alors être destructif."
-#: models.py:1173
+#: models.py:1175
msgid "Warehouse external id"
msgstr "ID externe du dépôt"
-#: models.py:1175
+#: models.py:1177
msgid ""
"Formula to manage warehouse external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
@@ -807,11 +826,11 @@ msgstr ""
"précaution. Une formule incorrecte peut rendre l'application inutilisable et "
"l'import de données externes peut alors être destructif."
-#: models.py:1180
+#: models.py:1182
msgid "Raw name for person"
msgstr "Nom brut pour une personne"
-#: models.py:1182
+#: models.py:1184
msgid ""
"Formula to manage person raw_name. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
@@ -821,43 +840,43 @@ msgstr ""
"Une formule incorrecte peut rendre l'application inutilisable et l'import de "
"données externes peut alors être destructif."
-#: models.py:1186
+#: models.py:1188
msgid "Current active"
msgstr "Actuellement utilisé"
-#: models.py:1187
+#: models.py:1189
msgid "Currency"
msgstr "Devise"
-#: models.py:1191
+#: models.py:1193
msgid "Ishtar site profile"
msgstr "Profil d'instance Ishtar"
-#: models.py:1192
+#: models.py:1194
msgid "Ishtar site profiles"
msgstr "Profils d'instance Ishtar"
-#: models.py:1261
+#: models.py:1263
msgid "Variable name"
msgstr "Nom de la variable"
-#: models.py:1262
+#: models.py:1264
msgid "Description of the variable"
msgstr "Description de la variable"
-#: models.py:1264 models.py:2051
+#: models.py:1266 models.py:2058
msgid "Value"
msgstr "Valeur"
-#: models.py:1267
+#: models.py:1269
msgid "Global variable"
msgstr "Variable globale"
-#: models.py:1377 models.py:1407
+#: models.py:1379 models.py:1409
msgid "Total"
msgstr "Total"
-#: models.py:1384 models.py:1508 models.py:1520
+#: models.py:1386 models.py:1510 models.py:1522
#: templates/ishtar/sheet_person.html:22
#: templates/ishtar/dashboards/dashboard_main_detail.html:141
#: templates/ishtar/dashboards/dashboard_main_detail_users.html:26
@@ -865,643 +884,635 @@ msgstr "Total"
msgid "Number"
msgstr "Nombre"
-#: models.py:1471
+#: models.py:1473
msgid "Administrative Act"
msgstr "Acte administratif"
-#: models.py:1475
+#: models.py:1477
msgid "Associated object"
msgstr "Objet associé"
-#: models.py:1479
+#: models.py:1481
msgid "Document template"
msgstr "Patron de document"
-#: models.py:1480
+#: models.py:1482
msgid "Document templates"
msgstr "Patrons de document"
-#: models.py:1511 models.py:1521 models.py:2268
+#: models.py:1513 models.py:1523 models.py:2275
msgid "State"
msgstr "État"
-#: models.py:1525 templates/blocks/JQueryAdvancedTown.html:12
+#: models.py:1527 templates/blocks/JQueryAdvancedTown.html:12
msgid "Department"
msgstr "Département"
-#: models.py:1526
+#: models.py:1528
msgid "Departments"
msgstr "Départements"
-#: models.py:1563
+#: models.py:1565
msgid "Raw phone"
msgstr "Téléphone brut"
-#: models.py:1569
+#: models.py:1571
msgid "Alternative address is prefered"
msgstr "L'adresse alternative est préférée"
-#: models.py:1608
+#: models.py:1610
msgid "Tel: "
msgstr "Tél :"
-#: models.py:1612
+#: models.py:1614
msgid "Mobile: "
msgstr "Mobile :"
-#: models.py:1616
+#: models.py:1618
msgid "Email: "
msgstr "Courriel :"
-#: models.py:1621
+#: models.py:1623
msgid "Merge key"
msgstr "Clé de fusion"
-#: models.py:1695
+#: models.py:1697
msgid "Organization types"
msgstr "Types d'organisation"
-#: models.py:1714 views.py:241
-msgid "Operation"
-msgstr "Opération"
-
-#: models.py:1716
-msgid "Archaeological site"
-msgstr "Entité Archéologique"
-
-#: models.py:1717
-msgid "Parcels"
-msgstr "Parcelles"
-
-#: models.py:1719
-msgid "Operation source"
-msgstr "Documentation de l'opération"
-
-#: models.py:1722 views.py:1364 views.py:1414
-msgid "Archaeological files"
-msgstr "Dossiers"
-
-#: models.py:1724 views.py:1367 views.py:1422
-msgid "Context records"
-msgstr "Unités d'Enregistrement"
+#: models.py:1743
+msgid "Class name"
+msgstr "Nom de la classe"
-#: models.py:1726
-msgid "Context record relations"
-msgstr "Relations entre Unités d'Enregistrement"
+#: models.py:1746
+msgid "Importer - Model"
+msgstr "Importeur - Modèle"
-#: models.py:1728
-msgid "Base finds"
-msgstr "Mobilier de base"
+#: models.py:1747
+msgid "Importer - Models"
+msgstr "Importeur - Modèles"
#: models.py:1764 templates/ishtar/dashboards/dashboard_main.html:25
msgid "Users"
msgstr "Utilisateurs"
-#: models.py:1766
+#: models.py:1767
msgid "Associated model"
msgstr "Modèle associé"
-#: models.py:1769
+#: models.py:1770
+msgid "Models that can accept new items"
+msgstr "Modèles qui peuvent accepter de nouveaux éléments"
+
+#: models.py:1771
+msgid "Leave blank for no restrictions"
+msgstr "Laissez vide pour aucune restriction"
+
+#: models.py:1773
msgid "Is template"
msgstr "Est un patron"
-#: models.py:1770
+#: models.py:1774
msgid "Unicity keys (separator \";\")"
msgstr "Clés d'unicité (séparateur « ; »)"
-#: models.py:1774
+#: models.py:1778
msgid "Importer - Type"
msgstr "Importeur - Type"
-#: models.py:1775
+#: models.py:1779
msgid "Importer - Types"
msgstr "Importeur - Types"
-#: models.py:1865
+#: models.py:1872
msgid "Importer - Default"
msgstr "Importeur - Par défaut"
-#: models.py:1866
+#: models.py:1873
msgid "Importer - Defaults"
msgstr "Importeur - Par défaut"
-#: models.py:1901
+#: models.py:1908
msgid "Importer - Default value"
msgstr "Importeur - Valeur par défaut"
-#: models.py:1902
+#: models.py:1909
msgid "Importer - Default values"
msgstr "Importeur - Valeurs par défaut"
-#: models.py:1935
+#: models.py:1942
msgid "Column number"
msgstr "Numéro de colonne"
-#: models.py:1938
+#: models.py:1945
msgid "Required"
msgstr "Requis"
-#: models.py:1941
+#: models.py:1948
msgid "Importer - Column"
msgstr "Importeur - Colonne"
-#: models.py:1942
+#: models.py:1949
msgid "Importer - Columns"
msgstr "Importeur - Colonnes"
-#: models.py:1962
+#: models.py:1969
msgid "Field name"
msgstr "Nom du champ"
-#: models.py:1964 models.py:1998
+#: models.py:1971 models.py:2005
msgid "Force creation of new items"
msgstr "Forcer la création de nouveaux éléments"
-#: models.py:1966 models.py:2000
+#: models.py:1973 models.py:2007
msgid "Concatenate with existing"
msgstr "Concaténer avec l'existant"
-#: models.py:1968 models.py:2002
+#: models.py:1975 models.py:2009
msgid "Concatenate character"
msgstr "Caractère de concaténation"
-#: models.py:1972
+#: models.py:1979
msgid "Importer - Duplicate field"
msgstr "Importeur - Champ dupliqué"
-#: models.py:1973
+#: models.py:1980
msgid "Importer - Duplicate fields"
msgstr "Importeur - Champs dupliqués"
-#: models.py:1980
+#: models.py:1987
msgid "Regular expression"
msgstr "Expression régulière"
-#: models.py:1983
+#: models.py:1990
msgid "Importer - Regular expression"
msgstr "Importeur - Expression régulière"
-#: models.py:1984
+#: models.py:1991
msgid "Importer - Regular expressions"
msgstr "Importeur - Expressions régulières"
-#: models.py:2007
+#: models.py:2014
msgid "Importer - Target"
msgstr "Importeur - Cible"
-#: models.py:2008
+#: models.py:2015
msgid "Importer - Targets"
msgstr "Importeur - Cibles"
-#: models.py:2032 views.py:545
+#: models.py:2039 views.py:545
msgid "True"
msgstr "Oui"
-#: models.py:2033 views.py:547
+#: models.py:2040 views.py:547
msgid "False"
msgstr "Non"
-#: models.py:2052
+#: models.py:2059
msgid "Is set"
msgstr "Est défini"
-#: models.py:2059
+#: models.py:2066
msgid "Importer - Target key"
msgstr "Importeur - Clé de rapprochement"
-#: models.py:2060
+#: models.py:2067
msgid "Importer - Targets keys"
msgstr "Importeur - Clés de rapprochement"
-#: models.py:2112 models.py:2851 models.py:2864
+#: models.py:2119 models.py:2874
msgid "Format"
msgstr "Format"
-#: models.py:2113 models.py:2956
+#: models.py:2120 models.py:2966
msgid "Operation type"
msgstr "Type d'opération"
-#: models.py:2114
+#: models.py:2121
msgid "Period"
msgstr "Périodes"
-#: models.py:2115
+#: models.py:2122
msgid "Report state"
msgstr "État de rapport"
-#: models.py:2116
+#: models.py:2123
msgid "Remain type"
msgstr "Type de vestige"
-#: models.py:2117
+#: models.py:2124
msgid "Unit"
msgstr "Unité"
-#: models.py:2118
+#: models.py:2125
msgid "Activity type"
msgstr "Type d'activité"
-#: models.py:2119
+#: models.py:2126
msgid "Material"
msgstr "Matériau"
-#: models.py:2121
+#: models.py:2128
msgid "Conservatory state"
msgstr "État de conservation"
-#: models.py:2122
+#: models.py:2129
msgid "Container type"
msgstr "Type de contenant"
-#: models.py:2123
+#: models.py:2130
msgid "Preservation type"
msgstr "Type de conservation"
-#: models.py:2124
+#: models.py:2131
msgid "Object type"
msgstr "Type d'objet"
-#: models.py:2125
+#: models.py:2132
msgid "Integrity type"
msgstr "Type d'intégrité"
-#: models.py:2126
+#: models.py:2133
msgid "Remarkability type"
msgstr "Type de remarquabilité"
-#: models.py:2127
+#: models.py:2134
msgid "Batch type"
msgstr "Type de lot"
-#: models.py:2129
+#: models.py:2136
msgid "Identification type"
msgstr "Type d'identification"
-#: models.py:2131
+#: models.py:2138
msgid "Context record relation type"
msgstr "Type de relations entre Unités d'Enregistrement"
-#: models.py:2132 models.py:3014
+#: models.py:2139 models.py:3024
msgid "Spatial reference system"
msgstr "Système de référence spatiale"
-#: models.py:2133 models.py:2843
+#: models.py:2140 models.py:2852
msgid "Support type"
msgstr "Type de support"
-#: models.py:2134 models.py:2510
+#: models.py:2141 models.py:2517
msgid "Title type"
msgstr "Type de titre"
-#: models.py:2140
+#: models.py:2147
msgid "Integer"
msgstr "Entier"
-#: models.py:2141
+#: models.py:2148
msgid "Float"
msgstr "Nombre à virgule"
-#: models.py:2142
+#: models.py:2149
msgid "String"
msgstr "Chaîne de caractères"
-#: models.py:2143 templates/sheet_ope.html:86
+#: models.py:2150 templates/sheet_ope.html:86
msgid "Date"
msgstr "Date"
-#: models.py:2145 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
+#: models.py:2152 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
#: templates/ishtar/dashboards/dashboard_main_detail.html:126
msgid "Year"
msgstr "Année"
-#: models.py:2146
+#: models.py:2153
msgid "String to boolean"
msgstr "Chaîne de caractères vers booléen"
-#: models.py:2147
+#: models.py:2154
msgctxt "filesystem"
msgid "File"
msgstr "Fichier"
-#: models.py:2148
+#: models.py:2155
msgid "Unknow type"
msgstr "Type inconnu"
-#: models.py:2164
+#: models.py:2171
msgid "4 digit year. e.g.: \"2015\""
msgstr "Année sur 4 chiffres. Exemple : « 2015 »"
-#: models.py:2165
+#: models.py:2172
msgid "4 digit year/month/day. e.g.: \"2015/02/04\""
msgstr "Année sur 4 chiffres/mois/jour. Exemple : « 2015/02/04 »"
-#: models.py:2166
+#: models.py:2173
msgid "Day/month/4 digit year. e.g.: \"04/02/2015\""
msgstr "Jour/mois/année sur 4 chiffres. Exemple : « 04/02/2015 »"
-#: models.py:2176
+#: models.py:2183
msgid "Options"
msgstr "Options"
-#: models.py:2178
+#: models.py:2185
msgid "Split character(s)"
msgstr "Caractère(s) de séparation"
-#: models.py:2182
+#: models.py:2189
msgid "Importer - Formater type"
msgstr "Importeur - Type de mise en forme"
-#: models.py:2183
+#: models.py:2190
msgid "Importer - Formater types"
msgstr "Importeur - Types de mise en forme"
-#: models.py:2232 templates/ishtar/dashboards/dashboard_main_detail.html:63
+#: models.py:2239 templates/ishtar/dashboards/dashboard_main_detail.html:63
msgid "Created"
msgstr "Créé"
-#: models.py:2233
+#: models.py:2240
msgid "Analyse in progress"
msgstr "Analyse en cours"
-#: models.py:2234
+#: models.py:2241
msgid "Analysed"
msgstr "Analysé"
-#: models.py:2235
+#: models.py:2242
msgid "Import pending"
msgstr "Import en attente"
-#: models.py:2236
+#: models.py:2243
msgid "Import in progress"
msgstr "Import en cours"
-#: models.py:2237
+#: models.py:2244
msgid "Finished with errors"
msgstr "Terminé avec des erreurs"
-#: models.py:2238
+#: models.py:2245
msgid "Finished"
msgstr "Terminé"
-#: models.py:2239
+#: models.py:2246
msgid "Archived"
msgstr "Archivé"
-#: models.py:2252
+#: models.py:2259
msgid "Imported file"
msgstr "Fichier importé"
-#: models.py:2254
+#: models.py:2261
msgid "Associated images (zip file)"
msgstr "Images associées (fichier zip)"
-#: models.py:2256
+#: models.py:2263
msgid "Encoding"
msgstr "Codage"
-#: models.py:2258
+#: models.py:2265
msgid "Skip lines"
msgstr "Nombre de lignes d'entête"
-#: models.py:2259 templates/ishtar/import_list.html:47
+#: models.py:2266 templates/ishtar/import_list.html:47
msgid "Error file"
msgstr "Fichier erreur"
-#: models.py:2262
+#: models.py:2269
msgid "Result file"
msgstr "Fichier résultant"
-#: models.py:2265 templates/ishtar/import_list.html:53
+#: models.py:2272 templates/ishtar/import_list.html:53
msgid "Match file"
msgstr "Fichier de correspondance"
-#: models.py:2271
+#: models.py:2278
msgid "Conservative import"
msgstr "Import conservateur"
-#: models.py:2276
+#: models.py:2283
msgid "End date"
msgstr "Date de fin"
-#: models.py:2278
+#: models.py:2285
msgid "Remaining seconds"
msgstr "Secondes restantes"
-#: models.py:2283
+#: models.py:2290
msgid "Import"
msgstr "Import"
-#: models.py:2300
+#: models.py:2307
msgid "Analyse"
msgstr "Analyser"
-#: models.py:2302 models.py:2305
+#: models.py:2309 models.py:2312
msgid "Re-analyse"
msgstr "Analyser de nouveau "
-#: models.py:2303
+#: models.py:2310
msgid "Launch import"
msgstr "Lancer l'import"
-#: models.py:2306
+#: models.py:2313
msgid "Re-import"
msgstr "Ré-importer"
-#: models.py:2307
+#: models.py:2314
msgid "Archive"
msgstr "Archiver"
-#: models.py:2309
+#: models.py:2316
msgid "Unarchive"
msgstr "Désarchiver"
-#: models.py:2310 widgets.py:130 templates/ishtar/form_delete.html:11
+#: models.py:2317 widgets.py:130 templates/ishtar/form_delete.html:11
msgid "Delete"
msgstr "Supprimer"
-#: models.py:2451
+#: models.py:2458
msgid "Organizations"
msgstr "Organisations"
-#: models.py:2453
+#: models.py:2460
msgid "Can view all Organizations"
msgstr "Peut voir toutes les Organisations"
-#: models.py:2454
+#: models.py:2461
msgid "Can view own Organization"
msgstr "Peut voir sa propre Organisation"
-#: models.py:2455
+#: models.py:2462
msgid "Can add own Organization"
msgstr "Peut ajouter sa propre Organisation"
-#: models.py:2457
+#: models.py:2464
msgid "Can change own Organization"
msgstr "Peut modifier sa propre Organisation"
-#: models.py:2459
+#: models.py:2466
msgid "Can delete own Organization"
msgstr "Peut supprimer sa propre Organisation"
-#: models.py:2494
+#: models.py:2501
msgid "Groups"
msgstr "Groupes"
-#: models.py:2499
+#: models.py:2506
msgid "Person types"
msgstr "Types de personne"
-#: models.py:2511
+#: models.py:2518
msgid "Title types"
msgstr "Types de titre"
-#: models.py:2520
+#: models.py:2527
msgid "Mr"
msgstr "M."
-#: models.py:2521
+#: models.py:2528
msgid "Miss"
msgstr "Mlle"
-#: models.py:2522
+#: models.py:2529
msgid "Mr and Mrs"
msgstr "M. et Mme"
-#: models.py:2523
+#: models.py:2530
msgid "Mrs"
msgstr "Mme"
-#: models.py:2524
+#: models.py:2531
msgid "Doctor"
msgstr "Dr."
-#: models.py:2557
+#: models.py:2564
msgid "Contact type"
msgstr "Type de contact"
-#: models.py:2560 models.py:2624
+#: models.py:2567 models.py:2631
msgid "Types"
msgstr "Types"
-#: models.py:2563
+#: models.py:2570
msgid "Is attached to"
msgstr "Est rattaché à"
-#: models.py:2568
+#: models.py:2575
msgid "Persons"
msgstr "Personnes"
-#: models.py:2570
+#: models.py:2577
msgid "Can view all Persons"
msgstr "Peut voir toutes les Personnes"
-#: models.py:2571
+#: models.py:2578
msgid "Can view own Person"
msgstr "Peut voir sa propre Personne"
-#: models.py:2572
+#: models.py:2579
msgid "Can add own Person"
msgstr "Peut ajouter sa propre Personne"
-#: models.py:2573
+#: models.py:2580
msgid "Can change own Person"
msgstr "Peut modifier sa propre Personne"
-#: models.py:2574
+#: models.py:2581
msgid "Can delete own Person"
msgstr "Peut supprimer sa propre Personne"
-#: models.py:2752
+#: models.py:2759
msgid "Advanced shortcut menu"
msgstr "Menu de raccourci (avancé)"
-#: models.py:2755
+#: models.py:2762
msgid "Ishtar user"
msgstr "Utilisateur d'Ishtar"
-#: models.py:2756
+#: models.py:2763
msgid "Ishtar users"
msgstr "Utilisateurs d'Ishtar"
-#: models.py:2798
+#: models.py:2805
msgid "To modify the password use the form in Auth > User"
msgstr ""
"Pour modifier le mot de passe, utilisez le formulaire dans Authentification "
"> Utilisateurs"
-#: models.py:2804
+#: models.py:2811
msgid "Author types"
msgstr "Types d'auteur"
-#: models.py:2836
+#: models.py:2844
msgid "Source types"
msgstr "Types de document"
-#: models.py:2844
+#: models.py:2853
msgid "Support types"
msgstr "Types de support"
-#: models.py:2852
-msgid "Formats"
-msgstr "Formats"
+#: models.py:2860
+msgid "Format type"
+msgstr "Type de format"
+
+#: models.py:2861
+msgid "Format types"
+msgstr "Types de format"
-#: models.py:2859
+#: models.py:2869
msgid "External ID"
msgstr "Identifiant externe"
-#: models.py:2862
+#: models.py:2872
msgid "Support"
msgstr "Support"
-#: models.py:2866
+#: models.py:2876
msgid "Scale"
msgstr "Échelle"
-#: models.py:2880
+#: models.py:2890
msgid "Item number"
msgstr "Numéro d'élément"
-#: models.py:2881
+#: models.py:2891
msgid "Ref."
msgstr "Réf."
-#: models.py:2884
+#: models.py:2894
msgid "Internal ref."
msgstr "Réf. interne"
-#: models.py:2927
+#: models.py:2937
msgid "Surface (m2)"
msgstr "Surface (m2)"
-#: models.py:2928 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
+#: models.py:2938 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
msgid "Localisation"
msgstr "Localisation"
-#: models.py:2953
+#: models.py:2963
msgid "Is preventive"
msgstr "Est du préventif"
-#: models.py:2957
+#: models.py:2967
msgid "Operation types"
msgstr "Types d'opération"
-#: models.py:2986
+#: models.py:2996
msgid "Preventive"
msgstr "Préventif"
-#: models.py:2987
+#: models.py:2997
msgid "Research"
msgstr "Programmé"
-#: models.py:3010
+#: models.py:3020
msgid "Authority name"
msgstr "Registre"
-#: models.py:3011
+#: models.py:3021
msgid "Authority SRID"
msgstr "SRID"
-#: models.py:3015
+#: models.py:3025
msgid "Spatial reference systems"
msgstr "Systèmes de référence spatiale"
@@ -1549,6 +1560,10 @@ msgstr "Supprimer un compte"
msgid "Archaeological file"
msgstr "Dossier"
+#: views.py:241
+msgid "Operation"
+msgstr "Opération"
+
#: views.py:243
msgid "Context record"
msgstr "Unité d'Enregistrement"
@@ -1565,48 +1580,56 @@ msgstr "Demande de traitement"
msgid "Treatment"
msgstr "Traitement"
-#: views.py:1303 views.py:1346
+#: views.py:1304 views.py:1347
msgid "Operation not permitted."
msgstr "Opération non permise."
-#: views.py:1305
+#: views.py:1306
#, python-format
msgid "New %s"
msgstr "Nouveau %s"
-#: views.py:1365 views.py:1418
+#: views.py:1365 views.py:1415
+msgid "Archaeological files"
+msgstr "Dossiers"
+
+#: views.py:1366 views.py:1419
msgid "Operations"
msgstr "Opérations"
-#: views.py:1369 views.py:1425
+#: views.py:1368 views.py:1423
+msgid "Context records"
+msgstr "Unités d'Enregistrement"
+
+#: views.py:1370 views.py:1426
msgid "Finds"
msgstr "Mobilier"
-#: views.py:1618 templates/ishtar/import_list.html:43
+#: views.py:1619 templates/ishtar/import_list.html:43
msgid "Link unmatched items"
msgstr "Associer les éléments non rapprochés"
-#: views.py:1633
+#: views.py:1634
msgid "Delete import"
msgstr "Supprimer un import"
-#: views.py:1672
+#: views.py:1673
msgid "Merge persons"
msgstr "Fusionner des personnes"
-#: views.py:1696
+#: views.py:1697
msgid "Select the main person"
msgstr "Choisir la personne principale"
-#: views.py:1705
+#: views.py:1706
msgid "Merge organization"
msgstr "Fusionner des organisations"
-#: views.py:1715
+#: views.py:1716
msgid "Select the main organization"
msgstr "Sélectionner l'organisation principale"
-#: views.py:1755 views.py:1771
+#: views.py:1756 views.py:1772
msgid "Corporation manager"
msgstr "Représentant de la personne morale"
@@ -1793,7 +1816,7 @@ msgstr "Dossier actif"
#: templates/sheet_ope.html:21
msgid "Closed operation"
-msgstr "Opération fermée"
+msgstr "Opération close"
#: templates/sheet_ope.html:22
msgid "Closing date:"
diff --git a/version.py b/version.py
index 9bde12a00..f635dd125 100644
--- a/version.py
+++ b/version.py
@@ -1,4 +1,4 @@
-VERSION = (0, 99, 10)
+VERSION = (0, 99, 11)
def get_version():