diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/admin.py | 8 | ||||
| -rw-r--r-- | ishtar_common/data_importer.py | 98 | ||||
| -rw-r--r-- | ishtar_common/fixtures/initial_importtypes-fr.json | 107 | ||||
| -rw-r--r-- | ishtar_common/locale/django.pot | 664 | ||||
| -rw-r--r-- | ishtar_common/migrations/0023_auto__add_importermodel__add_field_importertype_new_associated_models.py | 515 | ||||
| -rw-r--r-- | ishtar_common/migrations/0024_migrate_importermodels.py | 520 | ||||
| -rw-r--r-- | ishtar_common/migrations/0025_auto__del_field_importertype_new_associated_models__chg_field_importer.py | 489 | ||||
| -rw-r--r-- | ishtar_common/models.py | 78 | ||||
| -rw-r--r-- | ishtar_common/static/media/style.css | 8 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/wizard/confirm_wizard.html | 15 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/wizard/default_wizard.html | 10 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/wizard/parcels_wizard.html | 11 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/wizard/relations_wizard.html | 11 | ||||
| -rw-r--r-- | ishtar_common/tests.py | 31 | ||||
| -rw-r--r-- | ishtar_common/views.py | 6 | ||||
| -rw-r--r-- | ishtar_common/widgets.py | 2 | 
16 files changed, 2166 insertions, 407 deletions
| 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/0023_auto__add_importermodel__add_field_importertype_new_associated_models.py b/ishtar_common/migrations/0023_auto__add_importermodel__add_field_importertype_new_associated_models.py new file mode 100644 index 000000000..b78e71bbf --- /dev/null +++ b/ishtar_common/migrations/0023_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/0024_migrate_importermodels.py b/ishtar_common/migrations/0024_migrate_importermodels.py new file mode 100644 index 000000000..cc9b6f449 --- /dev/null +++ b/ishtar_common/migrations/0024_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/0025_auto__del_field_importertype_new_associated_models__chg_field_importer.py b/ishtar_common/migrations/0025_auto__del_field_importertype_new_associated_models__chg_field_importer.py new file mode 100644 index 000000000..9d1c9f55c --- /dev/null +++ b/ishtar_common/migrations/0025_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, | 
