]> git.parisson.com Git - telemeta_mcm.git/commitdiff
Update code
authorThomas Fillon <thomas@parisson.com>
Fri, 21 Jul 2017 15:13:05 +0000 (17:13 +0200)
committerThomas Fillon <thomas@parisson.com>
Fri, 21 Jul 2017 15:13:05 +0000 (17:13 +0200)
19 files changed:
conda-environment.yml
mcm/admin.py
mcm/management/commands/import_auteurs.py [new file with mode: 0644]
mcm/management/commands/import_documents.py [new file with mode: 0644]
mcm/management/commands/import_xml.py
mcm/migrations/0001_initial.py
mcm/migrations/0002_auto_20170201_1526.py [deleted file]
mcm/migrations/0002_auto_20170327_0936.py [new file with mode: 0644]
mcm/migrations/0003_auto_20170720_1403.py [new file with mode: 0644]
mcm/migrations/0004_auto_20170721_0135.py [new file with mode: 0644]
mcm/migrations/0005_auto_20170721_1209.py [new file with mode: 0644]
mcm/migrations/0006_auto_20170721_1442.py [new file with mode: 0644]
mcm/migrations/0007_auto_20170721_1454.py [new file with mode: 0644]
mcm/migrations/0008_auto_20170721_1624.py [new file with mode: 0644]
mcm/migrations/0009_auto_20170721_1643.py [new file with mode: 0644]
mcm/migrations/0010_auto_20170721_1647.py [new file with mode: 0644]
mcm/models.py
telemeta_mcm/settings.py
telemeta_mcm/urls.py

index 4edaeb7641ea7bbcc4658665a6e454f0fcd0ec74..35431a40ef3016c5bc5709b22b19a563b48412ac 100644 (file)
@@ -4,8 +4,13 @@ dependencies:
 - python=2.7
 - sqlite
 - wheel
+- pandas
+- jupyter
+- ftfy<5
 - pip:
     - django==1.9.*
+    - django-filer
+    - django-extensions
     - "--src=/srv/src/lib"
     - "--editable=git+https://github.com/thomasfillon/django-skosxl.git@master#egg=django-skosxl"
     - "--editable=git+https://github.com/thomasfillon/django-rdf-io.git@master#egg=django-rdf-io"
index 91a9a4baff9cac0fae7c4c3163df59eba3852d80..751c6c0b55a6265aa591a3d16891486cefa7c92d 100644 (file)
@@ -1,61 +1,71 @@
 from django.contrib import admin
 
 # Register your models here.
-from .models import Author, Keyword, Reference
+from .models import Author, Role, AuthorRole
+from .models import Reference
 from .models import Event, EventEdition, EventType, EventVenue
 from .models import GeographicalClassification
 from .models import Document
 from .models import Notice, Disc, Video, VideoFile, BookThesis, Journal
-from .models import Article, Photo, PosterBooklet, Object 
+from .models import Article, Photo, PosterBooklet, Object
+
+
+class AuthorRoleInline(admin.TabularInline):
+    model = AuthorRole
+    extra = 1
+
 
 class AuthorAdmin(admin.ModelAdmin):
     list_filter = ('name',)
     search_fields = ['name']
     ordering = ['name']
+    inlines = (AuthorRoleInline,)
 
-class KeywordAdmin(admin.ModelAdmin):
-    list_filter = ('name',)
-    search_fields = ['name']
-    ordering = ['name']
 
 class ReferenceAdmin(admin.ModelAdmin):
     list_filter = ('name',)
     search_fields = ['name']
     ordering = ['name']
-    
+
+
 class EventAdmin(admin.ModelAdmin):
     list_filter = ('name',)
     search_fields = ['name']
     ordering = ['name']
 
+
 class EventTypeAdmin(admin.ModelAdmin):
     list_filter = ('name',)
     search_fields = ['name']
     ordering = ['name']
 
+
 class EventVenueAdmin(admin.ModelAdmin):
     list_filter = ('name',)
     search_fields = ['name']
     ordering = ['name']
 
+
 class GeoAdmin(admin.ModelAdmin):
     list_filter = ('name',)
     search_fields = ['name']
     ordering = ['name']
-            
+
+
 class DocumentAdmin(admin.ModelAdmin):
     list_display = ('code', 'title')
     list_filter = ('code', 'title')
     search_fields = ['title', 'code']
-    filter_horizontal = ('authors', 'keywords',)
+    filter_horizontal = ('keywords', 'related')
+    inlines = (AuthorRoleInline,)
+
 
 class EventEditionAdmin(admin.ModelAdmin):
     list_display = ('event', 'edition')
     ordering = ['event', 'edition']
-    
+
 
 admin.site.register(Author, AuthorAdmin)
-admin.site.register(Keyword, KeywordAdmin)
 admin.site.register(Reference, ReferenceAdmin)
 
 admin.site.register(Event, EventAdmin)
@@ -64,7 +74,7 @@ admin.site.register(EventType, EventTypeAdmin)
 admin.site.register(EventVenue, EventVenueAdmin)
 admin.site.register(GeographicalClassification, GeoAdmin)
 
-#admin.site.register(Document)
+# admin.site.register(Document)
 admin.site.register(Notice, DocumentAdmin)
 admin.site.register(Disc, DocumentAdmin)
 admin.site.register(Video, DocumentAdmin)
@@ -74,4 +84,4 @@ admin.site.register(Journal, DocumentAdmin)
 admin.site.register(Article, DocumentAdmin)
 admin.site.register(Photo, DocumentAdmin)
 admin.site.register(PosterBooklet, DocumentAdmin)
-                    
+admin.site.register(Object, DocumentAdmin)
diff --git a/mcm/management/commands/import_auteurs.py b/mcm/management/commands/import_auteurs.py
new file mode 100644 (file)
index 0000000..f0e89a1
--- /dev/null
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*
+
+from django.core.management.base import BaseCommand, CommandError
+from django.db.utils import IntegrityError
+
+# import lxml.etree.ElementTree as ET
+import xml.etree.ElementTree as ET
+import os
+import logging
+import tempfile
+
+from mcm.models import Author
+
+import HTMLParser
+
+INITIAL_IMPORT = False
+
+
+class Command(BaseCommand):
+    help = 'Import items from XML'
+
+    # def add_arguments(self, parser):
+    #    parser.add_argument('xml_file', type=str, default='data/exports/Auteurs_clean.xml')
+
+    def handle(self, *args, **options):
+        xml_file = 'data/exports/Auteurs_clean.xml'
+
+        parser = ET.XMLParser(encoding="utf-8")
+        tree = ET.parse(xml_file, parser=parser)
+        root = tree.getroot()
+
+        h = HTMLParser.HTMLParser()
+
+        # for author in Author.objects.all():
+        #    author.delete()
+
+        for author in root.iter('Auteur'):
+
+            # Auteur
+            # fields:
+            #   - name = models.CharField(max_length=100, blank=False, unique=True)
+            #   - alias = models.CharField(max_length=100, blank=True, default='')
+            #   - comment = models.TextField(default='')
+            #   - old_id = models.IntegerField(unique=True, blank=False)   # Record No
+
+            name = author.findtext('Nom')
+            record_no = author.findtext('record_no')
+            try:
+                auteur, c = Author.objects.get_or_create(name=name,
+                                                         old_id=record_no)
+            except IntegrityError as e:
+                print 'Auteur : %s / id: %s' % (name, record_no)
+                doublon = Author.objects.get(name=name)
+                print '  en conflit avec %s / id: %s' % (doublon.name, doublon.old_id)
+                raise e
diff --git a/mcm/management/commands/import_documents.py b/mcm/management/commands/import_documents.py
new file mode 100644 (file)
index 0000000..f4215d4
--- /dev/null
@@ -0,0 +1,292 @@
+# -*- coding: utf-8 -*
+
+from django.core.management.base import BaseCommand, CommandError
+
+from ...models import Document
+from ...models import Notice, Disc, Video, VideoFile, BookThesis, Journal
+from ...models import Article, Photo, PosterBooklet, Object
+from ...models import Author, Role, AuthorRole
+from ...models import Reference
+from ...models import Event, EventEdition, EventType, EventVenue
+from ...models import GeographicalClassification
+from skosxl.models import Concept
+
+from ftfy import fix_text
+
+# import lxml.etree.ElementTree as ET
+import xml.etree.ElementTree as ET
+import os
+import logging
+import tempfile
+
+import HTMLParser
+
+
+DEBUG = False
+
+replacements_tag = {
+    'auteur_affiche_(dessin)>': 'auteur_affiche_dessin>',
+    'auteur_affiche_(dessin).Documents>': 'auteur_affiche_dessin_Documents>',
+    '[record_no]>': 'record_no>',
+    '->_Intervention>': 'Auteurs_intervention>',
+    #'\00': '',
+}
+
+replacements_char = {
+    '&#2<': '???<',
+    '&#146;': '&apos;',
+    '&#156;': '&oelig;',
+    '&<': '?<',
+    '\373': '&ucirc;',
+    'sa lta nat\ 1a': 'saltanata',
+    'Gugak FM\10': 'Gugak FM',
+    '\xf5': '&#305;',
+    '\x1e': '',
+    '\x02': '',
+    '\xf9': '?',
+    '\xb7': '?',
+    '\371': '',
+    '\xc3': '&ugrave;',  # ù
+}
+
+
+def cleanup_xml(xml_file):
+    root, ext = os.path.splitext(xml_file)
+    clean_xml_file = ''.join([root, '_clean', ext])
+    log_file = ''.join([root, '_clean_log.txt'])
+    if os.path.exists(log_file):
+        os.unlink(log_file)
+    logging.basicConfig(filename=log_file, format='%(levelname)s:%(message)s',
+                        level=logging.DEBUG)
+    logging.info('Nettoyage du fichier XML %s', xml_file)
+    # if os.path.exists(clean_xml_file):
+    #    return clean_xml_file
+    h = HTMLParser.HTMLParser()
+    temp_xml = tempfile.NamedTemporaryFile(delete=False)
+    # 1ere passe : nettoyage des tags XML
+    with open(xml_file, 'U') as infile:
+        with open(temp_xml.name, 'w') as outfile:
+            for line in infile:
+                for src, target in replacements_tag.iteritems():
+                    if src in line:
+                        line = line.replace(src, target)
+                outfile.write(line)
+
+    # 2nde passe : nettoyage des caractères
+    with open(temp_xml.name, 'U') as infile:
+        with open(clean_xml_file, 'w') as outfile:
+            lineno = 0
+            for line in infile:
+                lineno += 1
+                change_line = False
+                if False:
+                    for src, target in replacements_char.iteritems():
+                        if src in line:
+                            change_line = True
+                            logging.info('Ligne : %d', lineno)
+                            logging.info('%s -> %s', src, target)
+                            logging.info('Ligne de texte originale: %s', line)
+                            line = line.replace(src, target)
+                            logging.info('Ligne de texte de remplacement : %s', line)
+                            try:
+                                line = h.unescape(line)
+                            except UnicodeDecodeError as e:
+                                print line
+                                print "Ligne N°%d" % lineno
+                            raise e
+                            if change_line:
+                                logging.info('Ligne de texte de remplacement HTML : %s', line)
+                    # outfile.write(line.encode('utf-8'))
+                print fix_text(line)
+                outfile.write(fix_text(line))
+
+    os.unlink(temp_xml.name)
+
+    return clean_xml_file
+
+
+class Command(BaseCommand):
+    help = 'Import items from XML'
+
+    def add_arguments(self, parser):
+        parser.add_argument('xml_file', type=str)
+
+    def handle(self, *args, **options):
+        xml_file = options['xml_file']
+        # clean_xml_file = cleanup_xml(xml_file)
+        # return
+        parser = ET.XMLParser(encoding="utf-8")
+        tree = ET.parse(xml_file, parser=parser)
+        root = tree.getroot()
+
+        # Remove all object in Database
+        # Document.objects.all().delete()
+
+        document_traite = 0
+        document_non_traite = 0
+
+        # <Type>a-Notice spectacle</Type>
+        # <Type>b-Disque</Type>
+        # <Type>c-Vidéo DVD&#38;VHS</Type>
+        # <Type>d-Vid&#233;o en ligne</Type>
+        # <Type>f-Ouvrage &#38; Th&#232;se</Type>
+        # <Type>g-Revue</Type>
+        # <Type>h-Article</Type>
+        # <Type>i-Photo</Type>
+        # <Type>j-Affiche - Brochure</Type>
+        # <Type>k-P&#233;dagogique</Type>
+        # <Type>l-Objet</Type>
+
+        DOCUMENT_CLASS = {'a-Notice spectacle': Notice,
+                          'b-Disque': Disc,
+                          u'c-Vidéo DVD&VHS': Video,
+                          u'd-Vidéo en ligne': VideoFile,
+                          u'f-Ouvrage & Thèse': BookThesis,
+                          'g-Revue': Journal,
+                          'h-Article': Article,
+                          'i-Photo': Photo,
+                          'j-Affiche - Brochure': PosterBooklet,
+                          'l-Objet': Object
+                          }
+
+        skip_document_types = ['e-Site Internet', u'k-Pédagogique',
+                               'l-Objet']  # On traitera les objets à part
+
+        h = HTMLParser.HTMLParser()
+
+        for document in root.iter('Document'):
+            doc_type = h.unescape(document.findtext('Type'))
+            if doc_type in skip_document_types:
+                continue
+
+            document_traite += 1
+            record_no = document.findtext('record_no')
+            if doc_type == 'l-Objet':
+                code = document.findtext('No_d_inventaire')
+            else:
+                code = document.findtext('Cote')
+
+            doc_class = DOCUMENT_CLASS[doc_type]
+            doc, created = doc_class.objects.get_or_create(old_id=record_no)
+            doc.code = code
+            # Title
+            doc.title = document.findtext('Titre')
+            doc.save()
+            # if not created:
+            #    continue
+            # Keywords
+            for keyword in document.findall('Mots-cles'):
+                try:
+                    keyword_obj = Concept.objects.get(pref_label=keyword.text)
+                    if keyword_obj not in doc.keywords.all():
+                        doc.keywords.add(keyword_obj)
+                except Concept.DoesNotExist:
+                    print 'Concept \" %s \" DoesNotExist' % keyword.text
+
+            # Text
+            doc.text = document.findtext('Texte')
+            if doc.text is None:
+                doc.text = ''
+            # Notice spectacle
+            if doc_type == 'a-Notice spectacle':
+
+                event_type = document.findtext('Type_Manifestation')
+                if event_type is not None:
+                    event_type_obj, c = EventType.objects.get_or_create(
+                        name=event_type)
+                else:
+                    event_type_obj = None
+
+                event_venue = document.findtext('Lieu_Manifestation')
+                if event_venue is not None:
+                    event_venue_obj, c = EventVenue.objects.get_or_create(
+                        name=event_venue)
+                else:
+                    event_venue_obj = None
+
+                event = document.findtext('Festival_et_Manifestation')
+                if event is not None:
+                    event_obj, c = Event.objects.get_or_create(name=event)
+
+                    edition = document.findtext('No_edition')
+                    try:
+                        event_edition_obj, c = EventEdition.objects.get_or_create(
+                            event=event_obj, edition=edition)
+                    except ValueError:
+                        print 'Pb Edition : Cote %s / Event %s / Edition %s' % (code, event, edition)
+                        event_edition_obj, c = EventEdition.objects.get_or_create(
+                            event=event_obj, edition=None)
+
+                    doc.event_edition = event_edition_obj
+                    doc.event_type = event_type_obj
+                    doc.event_venue = event_venue_obj
+
+                release_date_text = document.findtext('Date_de_parution')
+                doc.release_date_text = release_date_text
+
+                import datetime
+                try:
+                    release_date = datetime.datetime.strptime(release_date_text,
+                                                              '%d/%m/%y').date()
+                    doc.release_date = release_date
+                except ValueError:
+                    pass
+
+                # Authors
+                doc_authors = document.findtext('aScript_auteurs2')
+                if doc_authors is not None:
+                    authors_roles = [auth.split('==')
+                                     for auth in doc_authors.split(';')]
+                    for auth_role in authors_roles:
+                        if auth_role[1]:
+                            role, c = Role.objects.get_or_create(label=auth_role[1])
+                        else:
+                            role = None
+                        try:
+                            author = Author.objects.filter(name=auth_role[0].strip())
+                            if len(author) > 1:
+                                print '--- Doublon Auteurs ---'
+                                print "Document : cote %s / id %d" % (doc.code, doc.old_id)
+                                for auth in author:
+                                    print 'name: %s / id %d' % (auth.name, auth.old_id)
+                            author = author[0]
+                        except Author.DoesNotExist as e:
+                            print "Does Not Exist ->%s<-" % auth_role[0]
+                            raise e
+
+                        try:
+                            author_role, c = AuthorRole.objects.get_or_create(
+                                author=author,
+                                document=doc,
+                                role=role)
+                            author_role.save()
+
+                        except UnicodeError as e:
+                            print authors_roles
+                            print 'role: %s' % auth_role[1]
+                            raise e
+
+                # Referencess
+                for ref in document.findall('Reference'):
+                    ref_obj, ref_c = Reference.objects.get_or_create(
+                        name=ref.text)
+                    doc.references.add(ref_obj)
+
+                # Source du document
+                source_doc = document.findtext('aScript_Source_du_document')
+                if source_doc is not None:
+                    doc.source_doc = source_doc
+
+                #  GeographicalClassification
+                geo = document.findtext('Classement_Geographique')
+                if geo is not None:
+                    geo_obj, c = GeographicalClassification.objects.get_or_create(
+                        name=geo)
+                    doc.geographic_classification = geo_obj
+                doc.save()
+
+            if DEBUG & (document_traite > 100):
+                break
+        print '-*-*--*-*-*-*-*-*-*-*'
+        print 'document_traité : %d' % document_traite
+        print 'document_non_traité : %d' % document_non_traite
index a0f05e28e8b42efbe904f69fa51494370f3d73a1..bfaf117171fa412fb8985430066d2a6f8f951e69 100644 (file)
@@ -168,8 +168,7 @@ class Command(BaseCommand):
             doc.save()
             # Keywords
             for keyword in document.findall('Mots-cles'):
-                keyword_obj, keyword_c = Keyword.objects.get_or_create(
-                    name=keyword.text)
+                keyword_obj, keyword_c = Keyword.objects.get(pref_label=keyword.text)
                 doc.keywords.add(keyword_obj)
 
             if doc_type == 'a-Notice spectacle':
@@ -211,6 +210,7 @@ class Command(BaseCommand):
                 try:
                     release_date = datetime.datetime.strptime(
                         document.find('Date_de_parution').text, '%d/%m/%y').date()
+                    doc.release_date = release_date
                 except ValueError:
                     # if document.find('Date_de_parution').text == '2015/09/08':
                     #    release_date = datetime.datetime.strptime('08/09/2015','%d/%m/%y').date()
@@ -219,6 +219,7 @@ class Command(BaseCommand):
                 try:
                     indexation_date = datetime.datetime.strptime(
                         document.find('Date_d_indexation').text, '%d/%m/%y').date()
+                    doc.indexation_date = indexation_date
                 except ValueError:
                     indexation_date = None
                     erreur_date_indexation += 1
@@ -231,7 +232,8 @@ class Command(BaseCommand):
                 # print indexation_date
 
                 # Authors
-                for author in document.findall('auteurs'):
+                for author, role in zip(document.findall('auteurs'),
+                                       document.findall('')):
                     author_obj, auth_c = Author.objects.get_or_create(
                         name=author.text)
                     doc.authors.add(author_obj)
index ce2db4c9dcef045f7e285ae7e8ce4b8a4a315079..9e5199971e7b67cf1b27927c185a1616edafecc4 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Generated by Django 1.9.2 on 2016-07-22 21:58
+# Generated by Django 1.9.12 on 2017-03-02 21:14
 from __future__ import unicode_literals
 
 from django.db import migrations, models
@@ -11,6 +11,7 @@ class Migration(migrations.Migration):
     initial = True
 
     dependencies = [
+        ('skosxl', '0001_initial'),
     ]
 
     operations = [
@@ -23,7 +24,17 @@ class Migration(migrations.Migration):
                 ('comment', models.TextField(default='')),
             ],
             options={
-                'abstract': False,
+                'verbose_name': 'author',
+            },
+        ),
+        migrations.CreateModel(
+            name='AuthorRole',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('authors', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mcm.Author', verbose_name='author')),
+            ],
+            options={
+                'verbose_name': 'Author role',
             },
         ),
         migrations.CreateModel(
@@ -32,7 +43,7 @@ class Migration(migrations.Migration):
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('title', models.CharField(max_length=200, verbose_name='title')),
                 ('old_id', models.IntegerField(unique=True)),
-                ('text', models.TextField(default='')),
+                ('text', models.TextField(default='', verbose_name='text')),
             ],
         ),
         migrations.CreateModel(
@@ -42,7 +53,7 @@ class Migration(migrations.Migration):
                 ('name', models.CharField(max_length=100, unique=True)),
             ],
             options={
-                'abstract': False,
+                'verbose_name': 'event',
             },
         ),
         migrations.CreateModel(
@@ -60,7 +71,7 @@ class Migration(migrations.Migration):
                 ('name', models.CharField(max_length=100, unique=True)),
             ],
             options={
-                'abstract': False,
+                'verbose_name': 'event type',
             },
         ),
         migrations.CreateModel(
@@ -70,7 +81,7 @@ class Migration(migrations.Migration):
                 ('name', models.CharField(max_length=100, unique=True)),
             ],
             options={
-                'abstract': False,
+                'verbose_name': 'event venue',
             },
         ),
         migrations.CreateModel(
@@ -80,28 +91,26 @@ class Migration(migrations.Migration):
                 ('name', models.CharField(max_length=100, unique=True)),
             ],
             options={
-                'abstract': False,
+                'verbose_name': 'geographical classification',
             },
         ),
         migrations.CreateModel(
-            name='Keyword',
+            name='Reference',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('name', models.CharField(max_length=100, unique=True)),
             ],
             options={
-                'abstract': False,
+                'verbose_name': 'reference',
             },
         ),
         migrations.CreateModel(
-            name='Reference',
+            name='Role',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=100, unique=True)),
+                ('label', models.CharField(blank=True, max_length=200, verbose_name='title')),
+                ('text', models.TextField(default='', verbose_name='text')),
             ],
-            options={
-                'abstract': False,
-            },
         ),
         migrations.CreateModel(
             name='Article',
@@ -109,6 +118,10 @@ class Migration(migrations.Migration):
                 ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
                 ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
             ],
+            options={
+                'verbose_name': 'Document / H - Article',
+                'verbose_name_plural': 'Documents - H - Articles',
+            },
             bases=('mcm.document',),
         ),
         migrations.CreateModel(
@@ -117,6 +130,10 @@ class Migration(migrations.Migration):
                 ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
                 ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
             ],
+            options={
+                'verbose_name': 'Document / F - Ouvrage & Th\xe8se',
+                'verbose_name_plural': 'Documents - F - Ouvrages & Th\xe8ses',
+            },
             bases=('mcm.document',),
         ),
         migrations.CreateModel(
@@ -125,6 +142,10 @@ class Migration(migrations.Migration):
                 ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
                 ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
             ],
+            options={
+                'verbose_name': 'Document / B - Disque',
+                'verbose_name_plural': 'Documents - B - Disques',
+            },
             bases=('mcm.document',),
         ),
         migrations.CreateModel(
@@ -133,6 +154,10 @@ class Migration(migrations.Migration):
                 ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
                 ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
             ],
+            options={
+                'verbose_name': 'Document / G - Revue',
+                'verbose_name_plural': 'Documents - G - Revues',
+            },
             bases=('mcm.document',),
         ),
         migrations.CreateModel(
@@ -146,8 +171,12 @@ class Migration(migrations.Migration):
                 ('event_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mcm.EventType')),
                 ('event_venue', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mcm.EventVenue')),
                 ('geographic_classification', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mcm.GeographicalClassification')),
-                ('references', models.ManyToManyField(to='mcm.Reference')),
+                ('references', models.ManyToManyField(to='mcm.Reference', verbose_name='reference')),
             ],
+            options={
+                'verbose_name': 'Document / A - Notice spectacle',
+                'verbose_name_plural': 'Documents - A - Notices spectacle',
+            },
             bases=('mcm.document',),
         ),
         migrations.CreateModel(
@@ -155,6 +184,10 @@ class Migration(migrations.Migration):
             fields=[
                 ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
             ],
+            options={
+                'verbose_name': 'Document / L - Objet',
+                'verbose_name_plural': 'Documents - L-Objets',
+            },
             bases=('mcm.document',),
         ),
         migrations.CreateModel(
@@ -163,6 +196,10 @@ class Migration(migrations.Migration):
                 ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
                 ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
             ],
+            options={
+                'verbose_name': 'Document / I - Photo',
+                'verbose_name_plural': 'Documents - I - Photos',
+            },
             bases=('mcm.document',),
         ),
         migrations.CreateModel(
@@ -171,6 +208,10 @@ class Migration(migrations.Migration):
                 ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
                 ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
             ],
+            options={
+                'verbose_name': 'Document / J - Affiche-Brochure',
+                'verbose_name_plural': 'Documents - J - Affiches-Brochures',
+            },
             bases=('mcm.document',),
         ),
         migrations.CreateModel(
@@ -179,6 +220,10 @@ class Migration(migrations.Migration):
                 ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
                 ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
             ],
+            options={
+                'verbose_name': 'Document / C - Vid\xe9o DVD&VHS',
+                'verbose_name_plural': 'Documents - C - Vid\xe9os DVD&VHS',
+            },
             bases=('mcm.document',),
         ),
         migrations.CreateModel(
@@ -187,16 +232,35 @@ class Migration(migrations.Migration):
                 ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
                 ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
             ],
+            options={
+                'verbose_name': 'Document / D - Vid\xe9o en ligne',
+                'verbose_name_plural': 'Documents - D - Vid\xe9os en ligne',
+            },
             bases=('mcm.document',),
         ),
         migrations.AddField(
             model_name='document',
             name='authors',
-            field=models.ManyToManyField(to='mcm.Author'),
+            field=models.ManyToManyField(through='mcm.AuthorRole', to='mcm.Author', verbose_name='author'),
         ),
         migrations.AddField(
             model_name='document',
             name='keywords',
-            field=models.ManyToManyField(to='mcm.Keyword'),
+            field=models.ManyToManyField(to='skosxl.Concept', verbose_name='keyword'),
+        ),
+        migrations.AddField(
+            model_name='document',
+            name='related',
+            field=models.ManyToManyField(related_name='_document_related_+', to='mcm.Document', verbose_name='see also'),
+        ),
+        migrations.AddField(
+            model_name='authorrole',
+            name='document',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mcm.Document'),
+        ),
+        migrations.AddField(
+            model_name='authorrole',
+            name='role',
+            field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='mcm.Role'),
         ),
     ]
diff --git a/mcm/migrations/0002_auto_20170201_1526.py b/mcm/migrations/0002_auto_20170201_1526.py
deleted file mode 100644 (file)
index 4f4febd..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.2 on 2017-02-01 14:26
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('mcm', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='article',
-            options={'verbose_name': 'Document / H - Article', 'verbose_name_plural': 'Documents - H - Articles'},
-        ),
-        migrations.AlterModelOptions(
-            name='bookthesis',
-            options={'verbose_name': 'Document / F - Ouvrage & Th\xe8se', 'verbose_name_plural': 'Documents - F - Ouvrages & Th\xe8ses'},
-        ),
-        migrations.AlterModelOptions(
-            name='disc',
-            options={'verbose_name': 'Document / B - Disque', 'verbose_name_plural': 'Documents - B - Disques'},
-        ),
-        migrations.AlterModelOptions(
-            name='journal',
-            options={'verbose_name': 'Document / G - Revue', 'verbose_name_plural': 'Documents - G - Revues'},
-        ),
-        migrations.AlterModelOptions(
-            name='notice',
-            options={'verbose_name': 'Document / A - Notice spectacle', 'verbose_name_plural': 'Documents - A - Notices spectacle'},
-        ),
-        migrations.AlterModelOptions(
-            name='object',
-            options={'verbose_name': 'Document / L - Objet', 'verbose_name_plural': 'Documents - L-Objets'},
-        ),
-        migrations.AlterModelOptions(
-            name='photo',
-            options={'verbose_name': 'Document / I - Photo', 'verbose_name_plural': 'Documents - I - Photos'},
-        ),
-        migrations.AlterModelOptions(
-            name='posterbooklet',
-            options={'verbose_name': 'Document / J - Affiche-Brochure', 'verbose_name_plural': 'Documents - J - Affiches-Brochures'},
-        ),
-        migrations.AlterModelOptions(
-            name='video',
-            options={'verbose_name': 'Document / C - Vid\xe9o DVD&VHS', 'verbose_name_plural': 'Documents - C - Vid\xe9os DVD&VHS'},
-        ),
-        migrations.AlterModelOptions(
-            name='videofile',
-            options={'verbose_name': 'Document / D - Vid\xe9o en ligne', 'verbose_name_plural': 'Documents - D - Vid\xe9os en ligne'},
-        ),
-    ]
diff --git a/mcm/migrations/0002_auto_20170327_0936.py b/mcm/migrations/0002_auto_20170327_0936.py
new file mode 100644 (file)
index 0000000..c76d8f9
--- /dev/null
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.12 on 2017-03-27 07:36
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('mcm', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='article',
+            options={'verbose_name': 'H - Article', 'verbose_name_plural': 'H - Articles'},
+        ),
+        migrations.AlterModelOptions(
+            name='authorrole',
+            options={'verbose_name': 'author role'},
+        ),
+        migrations.AlterModelOptions(
+            name='bookthesis',
+            options={'verbose_name': 'F - Ouvrage & Th\xe8se', 'verbose_name_plural': 'F - Ouvrages & Th\xe8ses'},
+        ),
+        migrations.AlterModelOptions(
+            name='disc',
+            options={'verbose_name': 'B - Disque', 'verbose_name_plural': 'B - Disques'},
+        ),
+        migrations.AlterModelOptions(
+            name='journal',
+            options={'verbose_name': 'G - Revue', 'verbose_name_plural': 'G - Revues'},
+        ),
+        migrations.AlterModelOptions(
+            name='notice',
+            options={'verbose_name': 'A - Notice spectacle', 'verbose_name_plural': 'A - Notices spectacle'},
+        ),
+        migrations.AlterModelOptions(
+            name='object',
+            options={'verbose_name': 'L - Objet', 'verbose_name_plural': 'L-Objets'},
+        ),
+        migrations.AlterModelOptions(
+            name='photo',
+            options={'verbose_name': 'I - Photo', 'verbose_name_plural': 'I - Photos'},
+        ),
+        migrations.AlterModelOptions(
+            name='posterbooklet',
+            options={'verbose_name': 'J - Affiche-Brochure', 'verbose_name_plural': 'J - Affiches-Brochures'},
+        ),
+        migrations.AlterModelOptions(
+            name='video',
+            options={'verbose_name': 'C - Vid\xe9o DVD&VHS', 'verbose_name_plural': 'C - Vid\xe9os DVD&VHS'},
+        ),
+        migrations.AlterModelOptions(
+            name='videofile',
+            options={'verbose_name': 'D - Vid\xe9o en ligne', 'verbose_name_plural': 'D - Vid\xe9os en ligne'},
+        ),
+        migrations.AddField(
+            model_name='author',
+            name='old_id',
+            field=models.IntegerField(default=0, unique=True),
+            preserve_default=False,
+        ),
+    ]
diff --git a/mcm/migrations/0003_auto_20170720_1403.py b/mcm/migrations/0003_auto_20170720_1403.py
new file mode 100644 (file)
index 0000000..4af07cf
--- /dev/null
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.13 on 2017-07-20 12:03
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('mcm', '0002_auto_20170327_0936'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='author',
+            name='comment',
+            field=models.TextField(default='', verbose_name='comment'),
+        ),
+        migrations.AlterField(
+            model_name='author',
+            name='name',
+            field=models.CharField(max_length=100, unique=True, verbose_name='name'),
+        ),
+        migrations.AlterField(
+            model_name='event',
+            name='name',
+            field=models.CharField(max_length=100, unique=True, verbose_name='name'),
+        ),
+        migrations.AlterField(
+            model_name='eventedition',
+            name='event',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mcm.Event', verbose_name='event'),
+        ),
+        migrations.AlterField(
+            model_name='eventtype',
+            name='name',
+            field=models.CharField(max_length=100, unique=True, verbose_name='name'),
+        ),
+        migrations.AlterField(
+            model_name='eventvenue',
+            name='name',
+            field=models.CharField(max_length=100, unique=True, verbose_name='name'),
+        ),
+        migrations.AlterField(
+            model_name='geographicalclassification',
+            name='name',
+            field=models.CharField(max_length=100, unique=True, verbose_name='name'),
+        ),
+        migrations.AlterField(
+            model_name='reference',
+            name='name',
+            field=models.CharField(max_length=100, unique=True, verbose_name='name'),
+        ),
+    ]
diff --git a/mcm/migrations/0004_auto_20170721_0135.py b/mcm/migrations/0004_auto_20170721_0135.py
new file mode 100644 (file)
index 0000000..ba4d118
--- /dev/null
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.13 on 2017-07-20 23:35
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('mcm', '0003_auto_20170720_1403'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='article',
+            name='code',
+        ),
+        migrations.RemoveField(
+            model_name='bookthesis',
+            name='code',
+        ),
+        migrations.RemoveField(
+            model_name='disc',
+            name='code',
+        ),
+        migrations.RemoveField(
+            model_name='journal',
+            name='code',
+        ),
+        migrations.RemoveField(
+            model_name='notice',
+            name='code',
+        ),
+        migrations.RemoveField(
+            model_name='photo',
+            name='code',
+        ),
+        migrations.RemoveField(
+            model_name='posterbooklet',
+            name='code',
+        ),
+        migrations.RemoveField(
+            model_name='video',
+            name='code',
+        ),
+        migrations.RemoveField(
+            model_name='videofile',
+            name='code',
+        ),
+        migrations.AddField(
+            model_name='document',
+            name='code',
+            field=models.CharField(blank=True, max_length=200, verbose_name='code'),
+        ),
+    ]
diff --git a/mcm/migrations/0005_auto_20170721_1209.py b/mcm/migrations/0005_auto_20170721_1209.py
new file mode 100644 (file)
index 0000000..1aaac48
--- /dev/null
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.13 on 2017-07-21 10:09
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('mcm', '0004_auto_20170721_0135'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='notice',
+            name='indexation_date',
+        ),
+        migrations.AddField(
+            model_name='notice',
+            name='doc_source',
+            field=models.CharField(blank=True, max_length=200, verbose_name='document source'),
+        ),
+        migrations.AddField(
+            model_name='notice',
+            name='release_date_text',
+            field=models.CharField(blank=True, max_length=200, verbose_name='release date'),
+        ),
+    ]
diff --git a/mcm/migrations/0006_auto_20170721_1442.py b/mcm/migrations/0006_auto_20170721_1442.py
new file mode 100644 (file)
index 0000000..4df3235
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.13 on 2017-07-21 12:42
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('mcm', '0005_auto_20170721_1209'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='authorrole',
+            old_name='authors',
+            new_name='author',
+        ),
+    ]
diff --git a/mcm/migrations/0007_auto_20170721_1454.py b/mcm/migrations/0007_auto_20170721_1454.py
new file mode 100644 (file)
index 0000000..f77a7be
--- /dev/null
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.13 on 2017-07-21 12:54
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('mcm', '0006_auto_20170721_1442'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='author',
+            name='name',
+            field=models.CharField(max_length=100, verbose_name='name'),
+        ),
+        migrations.AlterField(
+            model_name='event',
+            name='name',
+            field=models.CharField(max_length=100, verbose_name='name'),
+        ),
+        migrations.AlterField(
+            model_name='eventtype',
+            name='name',
+            field=models.CharField(max_length=100, verbose_name='name'),
+        ),
+        migrations.AlterField(
+            model_name='eventvenue',
+            name='name',
+            field=models.CharField(max_length=100, verbose_name='name'),
+        ),
+        migrations.AlterField(
+            model_name='geographicalclassification',
+            name='name',
+            field=models.CharField(max_length=100, verbose_name='name'),
+        ),
+        migrations.AlterField(
+            model_name='reference',
+            name='name',
+            field=models.CharField(max_length=100, verbose_name='name'),
+        ),
+    ]
diff --git a/mcm/migrations/0008_auto_20170721_1624.py b/mcm/migrations/0008_auto_20170721_1624.py
new file mode 100644 (file)
index 0000000..5073532
--- /dev/null
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.13 on 2017-07-21 14:24
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('mcm', '0007_auto_20170721_1454'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='authorrole',
+            name='role',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mcm.Role'),
+        ),
+    ]
diff --git a/mcm/migrations/0009_auto_20170721_1643.py b/mcm/migrations/0009_auto_20170721_1643.py
new file mode 100644 (file)
index 0000000..ec14989
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.13 on 2017-07-21 14:43
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('mcm', '0008_auto_20170721_1624'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='document',
+            name='text',
+            field=models.TextField(blank=True, default='', verbose_name='text'),
+        ),
+    ]
diff --git a/mcm/migrations/0010_auto_20170721_1647.py b/mcm/migrations/0010_auto_20170721_1647.py
new file mode 100644 (file)
index 0000000..f58a4ef
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.13 on 2017-07-21 14:47
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('mcm', '0009_auto_20170721_1643'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='document',
+            name='text',
+            field=models.TextField(default='', verbose_name='text'),
+        ),
+    ]
index 741add1d86d69b69988c927d9423d5e1f7301518..5324139366278a3890ac379bdb339a923ca3f0ed 100644 (file)
@@ -4,43 +4,72 @@ from __future__ import unicode_literals
 
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
-
+from skosxl.models import Concept
 
 # Create your models here.
 
+
 class BaseMany(models.Model):
-    name = models.CharField(max_length=100, blank=False, unique=True)
+    name = models.CharField(max_length=100, blank=False,
+                            verbose_name=_('name'))
 
     def __unicode__(self):
         return self.name
-    
+
     class Meta:
         abstract = True
 
+
 class Author(BaseMany):
-    alias =  models.CharField(max_length=100, blank=True, default='')
-    comment = models.TextField(default='')
+    alias = models.CharField(max_length=100, blank=True, default='')
+    comment = models.TextField(default='', verbose_name=_('comment'))
+    old_id = models.IntegerField(unique=True, blank=False)   # Record No
+
+    class Meta:
+        verbose_name = _('author')
+
+
+class Role(models.Model):
+    label = models.CharField(_('title'), blank=True, max_length=200)
+    text = models.TextField(default='', verbose_name=_('text'))
+
+    def __unicode__(self):
+        return self.label
 
-class Keyword(BaseMany):
-    pass
 
 class Reference(BaseMany):
-    pass
+
+    class Meta:
+        verbose_name = _('reference')
+
 
 class EventType(BaseMany):
-    pass
+
+    class Meta:
+        verbose_name = _('event type')
+
 
 class EventVenue(BaseMany):
-    pass
+
+    class Meta:
+        verbose_name = _('event venue')
+
 
 class Event(BaseMany):
-    pass
+    # <Festival_et_Manifestation>
+
+    class Meta:
+        verbose_name = _('event')
+
 
 class GeographicalClassification(BaseMany):
-    pass   
+
+    class Meta:
+        verbose_name = _('geographical classification')
+
 
 class EventEdition(models.Model):
-    event = models.ForeignKey(Event, blank=True, null=True)#<Festival_et_Manifestation>Japon 93</Festival_et_Manifestation>
+    event = models.ForeignKey(Event, blank=True, null=True, verbose_name=_('event'))  # <Festival_et_Manifestation>Japon 93</Festival_et_Manifestation>
     edition = models.IntegerField(default=None, blank=True, null=True)  # <No_edition>16</No_edition>
 
     def __unicode__(self):
@@ -52,119 +81,163 @@ class EventEdition(models.Model):
 
 DOCUMENT_TYPES = (
     ('a', 'Notice spectacle'),
-       ('b', 'Disque'),
-       ('c', 'Vidéo DVD&VHS'),
-       ('d', 'Vidéo en ligne'),
-       ('e', 'Site Internet'),
-       ('f', 'Ouvrage & Thèse'),
-       ('g', 'Revue'),
-       ('h', 'Article'),
-       ('i', 'Photo'),
-       ('j', 'Affiche - Brochure'),
-       ('k', 'Pédagogique'),
-       ('l', 'Objet')
-    )
-    
+    ('b', 'Disque'),
+    ('c', 'Vidéo DVD&VHS'),
+    ('d', 'Vidéo en ligne'),
+    ('e', 'Site Internet'),
+    ('f', 'Ouvrage & Thèse'),
+    ('g', 'Revue'),
+    ('h', 'Article'),
+    ('i', 'Photo'),
+    ('j', 'Affiche - Brochure'),
+    ('k', 'Pédagogique'),
+    ('l', 'Objet')
+)
+
+
 class Document(models.Model):
 
-    authors = models.ManyToManyField(Author)  # Auteur
-    title =  models.CharField(_('title'),  max_length=200)  # Titre
+    code = models.CharField(_('code'), unique=False, blank=True, max_length=200)  # Cote
     old_id = models.IntegerField(unique=True, blank=False)   # Record No
-    keywords = models.ManyToManyField(Keyword)  #<Mots-cles>Toraja</Mots-cles>
-    text = models.TextField(default='')
-    # see also / Voir aussi
+    authors = models.ManyToManyField(Author, through='AuthorRole', verbose_name=_('author'))  # Auteur
+    title = models.CharField(_('title'), max_length=200)  # Titre
+
+    keywords = models.ManyToManyField(Concept, verbose_name=_('keyword'))  # <Mots-cles>Toraja</Mots-cles>
+    text = models.TextField(default='', verbose_name=_('text'))
+    related = models.ManyToManyField("self", verbose_name=_('see also'))  # see also / Voir aussi
 
     def __unicode__(self):
         return self.title
 
-# Type : a-Notice spectacle
+
+class AuthorRole(models.Model):
+
+    author = models.ForeignKey(Author, blank=False, verbose_name=_('author'), on_delete=models.CASCADE)  # Auteur
+    document = models.ForeignKey(Document, blank=False)
+    role = models.ForeignKey(Role, blank=True, null=True)
+
+    class Meta:
+        verbose_name = _('author role')
+
+
 class Notice(Document):
+    # Type : a-Notice spectacle
+
     class Meta:
-        verbose_name = "Document / A - Notice spectacle"
-        verbose_name_plural = "Documents - A - Notices spectacle"
-        
-    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #  Cote
-    references = models.ManyToManyField(Reference)  #<Reference>Le Chant du Monde</Reference>
-    release_date = models.DateField(_('release date'), null=True, blank=True)#<Date_de_parution>1995</Date_de_parution>
-    geographic_classification =  models.ForeignKey(GeographicalClassification, null=True, blank=True)# <Classement_Geographique>P&#233;rou</Classement_Geographique>
+        verbose_name = "A - Notice spectacle"
+        verbose_name_plural = "A - Notices spectacle"
+
+    references = models.ManyToManyField(Reference, verbose_name=_('reference'))  # <Reference>Le Chant du Monde</Reference>
+    release_date = models.DateField(_('release date'), null=True, blank=True)  # <Date_de_parution>1995</Date_de_parution>
+    release_date_text = models.CharField(_('release date'), blank=True, max_length=200)
+    geographic_classification = models.ForeignKey(GeographicalClassification, null=True, blank=True)  # <Classement_Geographique>P&#233;rou</Classement_Geographique>
     #<Support>Compact Disc Digital Audio</Support>
     #<Duree>69'14</Duree>
     #<Collection>Le chant du monde</Collection>
     #<No_de_collection>CNR 2741004</No_de_collection>
-    indexation_date = models.DateField(_('indexation date'), null=True, blank=True)  #<Date_d_indexation>21/02/16</Date_d_indexation>
+    # indexation_date = models.DateField(_('indexation date'), null=True, blank=True)  # <Date_d_indexation>21/02/16</Date_d_indexation>
+
     #<Doc_no>5604</Doc_no>
-    #<Type>b-Disque</Type>
-    #<[record_no]>2300703</[record_no]>
     #<aScript_Source_du_document>Le Chant du Monde ; Editions du CNRS, 1995</aScript_Source_du_document>
-    
-    #---  Event - Manifestion            
-    event_type = models.ForeignKey(EventType, blank=True, null=True)#<Type_Manifestation>Danse</Type_Manifestation>
-    event_venue = models.ForeignKey(EventVenue, blank=True, null=True)#<Lieu_Manifestation>Le Rond Point, Th&#233;&#226;tre Renaud-Barrault, Paris</Lieu_Manifestation>
+    doc_source = models.CharField(_('document source'), blank=True, max_length=200)
+
+    #---  Event - Manifestion
+    event_type = models.ForeignKey(EventType, blank=True, null=True)  # <Type_Manifestation>Danse</Type_Manifestation>
+    event_venue = models.ForeignKey(EventVenue, blank=True, null=True)  # <Lieu_Manifestation>Le Rond Point, Th&#233;&#226;tre Renaud-Barrault, Paris</Lieu_Manifestation>
     event_edition = models.ForeignKey(EventEdition, blank=True, null=True)
 
-# Type: b-Disque 
+
 class Disc(Document):
+    # Type: b-Disque
+
     class Meta:
-        verbose_name = "Document / B - Disque"
-        verbose_name_plural = "Documents - B - Disques"
+        verbose_name = "B - Disque"
+        verbose_name_plural = "B - Disques"
+
 
-    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #          
-# Type : c-Vidéo DVD&VHS
 class Video(Document):
-    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #    
+    # Type : c-Vidéo DVD&VHS
+
     class Meta:
-        verbose_name = "Document / C - Vidéo DVD&VHS"
-        verbose_name_plural = "Documents - C - Vidéos DVD&VHS"
+        verbose_name = "C - Vidéo DVD&VHS"
+        verbose_name_plural = "C - Vidéos DVD&VHS"
+
 
-# Type : d-Vidéo en ligne
 class VideoFile(Document):
-    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #    
+    # Type : d-Vidéo en ligne
+
     class Meta:
-        verbose_name = "Document / D - Vidéo en ligne"
-        verbose_name_plural = "Documents - D - Vidéos en ligne"
-        
-# Type : f-Ouvrage & Thèse
+        verbose_name = "D - Vidéo en ligne"
+        verbose_name_plural = "D - Vidéos en ligne"
+
+
 class BookThesis(Document):
-    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #
+    # Type : f-Ouvrage & Thèse
+
     class Meta:
-        verbose_name = "Document / F - Ouvrage & Thèse"
-        verbose_name_plural = "Documents - F - Ouvrages & Thèses"
+        verbose_name = "F - Ouvrage & Thèse"
+        verbose_name_plural = "F - Ouvrages & Thèses"
+
 
-# Type : g-Revue
 class Journal(Document):
-    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #
+    # Type : g-Revue
+
     class Meta:
-        verbose_name = "Document / G - Revue"
-        verbose_name_plural = "Documents - G - Revues"
+        verbose_name = "G - Revue"
+        verbose_name_plural = "G - Revues"
+
 
-# Type : h-Article
 class Article(Document):
-    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #
+    # Type : h-Article
+
     class Meta:
-        verbose_name = "Document / H - Article"
-        verbose_name_plural = "Documents - H - Articles"
+        verbose_name = "H - Article"
+        verbose_name_plural = "H - Articles"
+
 
-# Type : i-Photo
 class Photo(Document):
-    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #
+    # Type : i-Photo
+
     class Meta:
-        verbose_name = "Document / I - Photo"
-        verbose_name_plural = "Documents - I - Photos"
+        verbose_name = "I - Photo"
+        verbose_name_plural = "I - Photos"
+
 
-# Type : j-Affiche - Brochure
 class PosterBooklet(Document):
-    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #
+    # Type : j-Affiche - Brochure
+
     class Meta:
-        verbose_name = "Document / J - Affiche-Brochure"
-        verbose_name_plural = "Documents - J - Affiches-Brochures"
+        verbose_name = "J - Affiche-Brochure"
+        verbose_name_plural = "J - Affiches-Brochures"
 
 # Type :k-Pédagogique
-#class Educational(Document):
+# class Educational(Document):
 #    pass
 
-# Type : l-Objet
+
 class Object(Document):
-    pass
+    # Type : l-Objet
+
+    class Meta:
+        verbose_name = "I - Photo"
+        verbose_name_plural = "I - Photos"
+
+
+class PosterBooklet(Document):
+    # Type : j-Affiche - Brochure
+
+    class Meta:
+        verbose_name = "J - Affiche-Brochure"
+        verbose_name_plural = "J - Affiches-Brochures"
+
+# Type :k-Pédagogique
+# class Educational(Document):
+#    pass
+
+
+class Object(Document):
+    # Type : l-Objet
+
     class Meta:
-        verbose_name = "Document / L - Objet"
-        verbose_name_plural = "Documents - L-Objets"
+        verbose_name = "L - Objet"
+        verbose_name_plural = "L-Objets"
index 8a4776d7203b88c0368e54019356e6c8bc1d0bf7..59aa2ff746e36d5bc459d68839259ee7aaf0c099 100644 (file)
@@ -46,6 +46,7 @@ INSTALLED_APPS = [
 MIDDLEWARE_CLASSES = [
     'django.middleware.security.SecurityMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.locale.LocaleMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
@@ -59,7 +60,7 @@ ROOT_URLCONF = 'telemeta_mcm.urls'
 TEMPLATES = [
     {
         'BACKEND': 'django.template.backends.django.DjangoTemplates',
-        'DIRS': [],
+        'DIRS': [os.path.join(BASE_DIR, 'templates')],
         'APP_DIRS': True,
         'OPTIONS': {
             'context_processors': [
@@ -67,6 +68,7 @@ TEMPLATES = [
                 'django.template.context_processors.request',
                 'django.contrib.auth.context_processors.auth',
                 'django.contrib.messages.context_processors.messages',
+                'django.core.context_processors.i18n',
             ],
         },
     },
@@ -108,8 +110,10 @@ AUTH_PASSWORD_VALIDATORS = [
 # Internationalization
 # https://docs.djangoproject.com/en/1.9/topics/i18n/
 
-LANGUAGE_CODE = 'fr-FR'
-
+LANGUAGE_CODE = 'fr'
+LANGUAGES = [ ('fr', 'French'),
+              #('en', 'English')
+]
 TIME_ZONE = 'Europe/Paris'
 
 USE_I18N = True
index 34682d8a9dddc090d3dd8482180fb97d004f9fb2..7bd46fbfe74bccad313be2e0da48af33e4519da1 100644 (file)
@@ -19,5 +19,6 @@ from django.contrib import admin
 
 urlpatterns = [
     url(r'^admin/', admin.site.urls),
-    url(r'^telemeta/skosxl/', include('skosxl.urls'))
+    url(r'^telemeta/skosxl/', include('skosxl.urls')),
+    url(r'^i18n/', include('django.conf.urls.i18n')),
 ]