record view + correct import
authorcavaliet
Thu, 29 Aug 2013 15:42:00 +0200
changeset 7 02008d61c3c8
parent 6 ff4d2d4f1fb0
child 8 d10cdb768a03
record view + correct import
src/p4l/management/commands/import_record.py
src/p4l/static/p4l/css/p4l.css
src/p4l/templates/p4l/p4l_home.html
src/p4l/templates/p4l/p4l_record_view.html
src/p4l/urls.py
src/p4l/views.py
--- a/src/p4l/management/commands/import_record.py	Wed Aug 28 18:45:41 2013 +0200
+++ b/src/p4l/management/commands/import_record.py	Thu Aug 29 15:42:00 2013 +0200
@@ -209,7 +209,7 @@
             record.subjectMeetings,
             graph,
             ['label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear'],
-            "SELECT ?l ?mn ?mp ?md ?my WHERE { [iiep:meeting ?bnode]. OPTIONAL { ?bnode rdfs:label ?l }. OPTIONAL { ?bnode iiep:meetingNumber ?mn }. OPTIONAL { ?bnode iiep:meetingPlace ?mp }.  OPTIONAL { ?bnode iiep:meetingDate ?md }. OPTIONAL { ?bnode iiep:meetingYear ?my }}",            
+            "SELECT ?l ?mn ?mp ?md ?my WHERE { [iiep:subjectMeeting ?bnode]. OPTIONAL { ?bnode rdfs:label ?l }. OPTIONAL { ?bnode iiep:meetingNumber ?mn }. OPTIONAL { ?bnode iiep:meetingPlace ?mp }.  OPTIONAL { ?bnode iiep:meetingDate ?md }. OPTIONAL { ?bnode iiep:meetingYear ?my }}",            
             convert={'meetingYear' : lambda y: int(y) if y is not None else None}
         )
 
--- a/src/p4l/static/p4l/css/p4l.css	Wed Aug 28 18:45:41 2013 +0200
+++ b/src/p4l/static/p4l/css/p4l.css	Thu Aug 29 15:42:00 2013 +0200
@@ -6,9 +6,19 @@
   margin: 0 auto;
   width: 950px;
 }
+
+.record-table thead td:first-child {
+    width: 190px;
+}
+.record-table tbody td:first-child:first-letter {
+    text-transform: uppercase;
+}
 .table thead td:first-letter {
     text-transform: uppercase;
 }
+.table thead {
+    font-weight: bold;
+}
 .two_buttons{
 	min-width: 100px;
-}
+}
\ No newline at end of file
--- a/src/p4l/templates/p4l/p4l_home.html	Wed Aug 28 18:45:41 2013 +0200
+++ b/src/p4l/templates/p4l/p4l_home.html	Thu Aug 29 15:42:00 2013 +0200
@@ -21,20 +21,20 @@
 <div class="pagination pull-right">
     <span class="page-links">
         {% if page_obj.has_previous %}
-            <a href="?page={{ page_obj.previous_page_number }}{% for k,v in filter_params.items %}&{{k}}={{v}}{% endfor %}">previous</a>
+            <a href="?page={{ page_obj.previous_page_number }}{% for k,v in filter_params.items %}&{{k}}={{v}}{% endfor %}">{% trans 'Previous' %}</a>
         {% endif %}
         <span class="page-current">
-            Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
+            {% trans 'Page' %} {{ page_obj.number }} {% trans 'on' %} {{ page_obj.paginator.num_pages }}
         </span>
         {% if page_obj.has_next %}
-            <a href="?page={{ page_obj.next_page_number }}{% for k,v in filter_params.items %}&{{k}}={{v}}{% endfor %}">next</a>
+            <a href="?page={{ page_obj.next_page_number }}{% for k,v in filter_params.items %}&{{k}}={{v}}{% endfor %}">{% trans 'Next' %}</a>
         {% endif %}
     </span>
 </div>
 {% endif %}
 <table class="table">
   <thead>
-    <tr><td>URI</td><td>lang.</td><td>{% trans 'title' %}</td><td class="two_buttons">{% trans 'actions' %}</td></tr>
+    <tr><td>URI</td><td>lang.</td><td>{% trans 'titles' %}</td><td class="two_buttons">{% trans 'actions' %}</td></tr>
   </thead>
   <tbody>
   {% for record in object_list %}
@@ -44,7 +44,10 @@
       <td><ul>{% for t in record.titles.all %}
           <li>{{ t.title }}</li>
           {% endfor %}</ul></td>
-      <td><a class="btn btn-default" href="#"><i class="glyphicon glyphicon-eye-open"></i></a><a class="btn btn-default" href="#"><i class="glyphicon glyphicon-pencil"></i></a></td>
+      <td>
+        <a class="btn btn-default" href="{% url 'p4l_record_view' %}?uri={{ record.uri }}"><i class="glyphicon glyphicon-eye-open"></i></a>
+        <a class="btn btn-default" href="#"><i class="glyphicon glyphicon-pencil"></i></a>
+      </td>
     </tr>
   {% empty %}
     <tr><td>{% trans 'No record' %}</td></tr>
@@ -53,16 +56,15 @@
 </table>
 {% if is_paginated %}
 <div class="pagination pull-right">
-    {{filter_params}}
     <span class="page-links">
         {% if page_obj.has_previous %}
-            <a href="?page={{ page_obj.previous_page_number }}{% for k,v in filter_params.items %}&{{k}}={{v}}{% endfor %}">previous</a>
+            <a href="?page={{ page_obj.previous_page_number }}{% for k,v in filter_params.items %}&{{k}}={{v}}{% endfor %}">{% trans 'Previous' %}</a>
         {% endif %}
         <span class="page-current">
-            Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
+            {% trans 'Page' %} {{ page_obj.number }} {% trans 'on' %} {{ page_obj.paginator.num_pages }}
         </span>
         {% if page_obj.has_next %}
-            <a href="?page={{ page_obj.next_page_number }}{% for k,v in filter_params.items %}&{{k}}={{v}}{% endfor %}">next</a>
+            <a href="?page={{ page_obj.next_page_number }}{% for k,v in filter_params.items %}&{{k}}={{v}}{% endfor %}">{% trans 'Next' %}</a>
         {% endif %}
     </span>
 </div>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/p4l/templates/p4l/p4l_record_view.html	Thu Aug 29 15:42:00 2013 +0200
@@ -0,0 +1,236 @@
+{% extends "p4l/p4l_base.html" %}
+{% load static %}
+{% load i18n %}
+{% load p4lstringfilters %}
+
+{% block content %}
+<table class="table record-table">
+  <thead>
+    <tr><td>{% trans 'property' %}</td><td>{% trans 'value' %}</td></tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>URI</td>
+      <td>{{ record.uri|default:'' }}</td>
+    </tr>
+    <tr>
+      <td>{% trans 'subjects' %}</td>
+      <td><ul>{% for i in record.subjects.all %}<li>{{ i.subject|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'themes' %}</td>
+      <td><ul>{% for i in record.themes.all %}<li>{{ i.theme|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'countries' %}</td>
+      <td><ul>{% for i in record.countries.all %}<li>{{ i.country|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'identifier' %}</td>
+      <td>{{ record.identifier }}</td>
+    </tr>
+    <tr>
+      <td>{% trans 'issns' %}</td>
+      <td><ul>{% for i in record.issns.all %}<li>{{ i.issn|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'isbns' %}</td>
+      <td><ul>{% for i in record.isbns.all %}<li>{{ i.isbn|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'document code' %}</td>
+      <td><ul>{% for i in record.documentCodes.all %}<li>{{ i.documentCode|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'language' %}</td>
+      <td>{{ record.language.language|default:'' }}</td>
+    </tr>
+    <tr>
+      <td>{% trans 'other languages' %}</td>
+      <td><ul>{% for i in record.otherLanguages.all %}<li>{{ i.language|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'titles' %}</td>
+      <td><ul>{% for i in record.titles.all %}<li>{{ i.title|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'added titles' %}</td>
+      <td><ul>{% for i in record.addedTitles.all %}<li>{{ i.title|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'titles main document' %}</td>
+      <td><ul>{% for i in record.titlesMainDocument.all %}<li>{{ i.title|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'edition statement' %}</td>
+      <td>{{ record.editionStatement|default:'' }}</td>
+    </tr>
+    <tr>
+      <td>{% trans 'imprints' %}</td>
+      <td>
+        <ul>
+          {% for i in record.imprints.all %}
+          <li>
+            <ul class="list-unstyled">
+              <li>{% trans 'City' %} : {{ i.imprintCity|default:'' }}</li>
+              <li>{% trans 'Publisher' %} : {{ i.publisher|default:'' }}</li>
+              <li>{% trans 'Date' %} : {{ i.imprintDate|default:'' }}</li>
+            </ul>
+          </li>
+          {% endfor %}
+        </ul>
+      </td>
+    </tr>
+    <tr>
+      <td>{% trans 'collations' %}</td>
+      <td><ul>{% for i in record.collations.all %}<li>{{ i.collation|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'volume issues' %}</td>
+      <td>
+        <ul>
+          {% for i in record.volumeIssues.all %}
+          <li>
+            <ul class="list-unstyled">
+              <li>{% trans 'Volume' %} : {{ i.volume|default:'' }}</li>
+              <li>{% trans 'Number' %} : {{ i.number|default:'' }}</li>
+            </ul>
+          </li>
+          {% endfor %}
+        </ul>
+      </td>
+    </tr>
+    <tr>
+      <td>{% trans 'project names' %}</td>
+      <td><ul>{% for i in record.projectNames.all %}<li>{% if i.acronym %}{{ i.acronym }} : {% endif %}{{ i.label|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'periodicals' %}</td>{# ajouter langue #}
+      <td><ul>{% for i in record.periodicals.all %}<li>{{ i.label|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'meetings' %}</td>{# ajouter langue #}
+      <td>
+        <ul>
+          {% for i in record.meetings.all %}
+          <li>
+            <ul class="list-unstyled">
+              <li>{{ i.label|default:'' }}</li>
+              <li>{% trans 'Number' %} : {{ i.meetingNumber|default:'' }}</li>
+              <li>{% trans 'Place' %} : {{ i.meetingPlace|default:'' }}</li>
+              <li>{% trans 'Date' %} : {{ i.meetingDate|default:'' }}</li>
+              <li>{% trans 'Year' %} : {{ i.meetingYear|default:'' }}</li>
+            </ul>
+          </li>
+          {% endfor %}
+        </ul>
+      </td>
+    </tr>
+    <tr>
+      <td>{% trans 'series' %}</td>{# ajouter langue #}
+      <td>
+        <ul>
+          {% for i in record.series.all %}
+          <li>
+            <ul class="list-unstyled">
+              <li>{{ i.title|default:'' }}</li>
+              {% if i.volume %}<li>{% trans 'Volume' %} : {{ i.volume|default:'' }}</li>{% endif %}
+            </ul>
+          </li>
+          {% endfor %}
+        </ul>
+      </td>
+    </tr>
+    <tr>
+      <td>{% trans 'authors' %}</td>
+      <td><ul>{% for i in record.authors.all %}<li>{{ i.name|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'subject persons' %}</td>
+      <td><ul>{% for i in record.subjectPersons.all %}<li>{{ i.name|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'subject corporate bodies' %}</td>
+      <td><ul>{% for i in record.subjectCorporateBodies.all %}<li>{% if i.acronym %}{{ i.acronym }} : {% endif %}{{ i.label|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'subject meetings' %}</td>{# ajouter langue #}
+      <td>
+        <ul>
+          {% for i in record.subjectMeetings.all %}
+          <li>
+            <ul class="list-unstyled">
+              <li>{{ i.label|default:'' }}</li>
+              <li>{% trans 'Number' %} : {{ i.meetingNumber|default:'' }}</li>
+              <li>{% trans 'Place' %} : {{ i.meetingPlace|default:'' }}</li>
+              <li>{% trans 'Date' %} : {{ i.meetingDate|default:'' }}</li>
+              <li>{% trans 'Year' %} : {{ i.meetingYear|default:'' }}</li>
+            </ul>
+          </li>
+          {% endfor %}
+        </ul>
+      </td>
+    </tr>
+    <tr>
+      <td>{% trans 'corporate authors' %}</td>
+      <td><ul>{% for i in record.corporateAuthors.all %}<li>{% if i.acronym %}{{ i.acronym }} : {% endif %}{{ i.label|default:'' }}</li>{% endfor %}</ul></td>
+    </tr>
+    <tr>
+      <td>{% trans 'Urls' %}</td>{# ajouter langue #}
+      <td>
+        <ul>
+          {% for i in record.urls.all %}
+          <li>
+            <ul class="list-unstyled">
+              <li>{% trans 'Address' %} : {{ i.address|default:'' }}</li>
+              <li>{% trans 'Display' %} : {{ i.display|default:'' }}</li>
+              <li>{% trans 'Access level' %} : {{ i.accessLevel|default:'' }}</li>
+            </ul>
+          </li>
+          {% endfor %}
+        </ul>
+      </td>
+    </tr>
+    <tr>
+      <td>{% trans 'record type' %}</td>
+      <td>{{ record.recordType|default:'' }}</td>
+    </tr>
+    <tr>
+      <td>{% trans 'is document part' %}</td>
+      <td><input type="checkbox" disabled="disabled" {% if record.isDocumentPart %}checked="checked"{% endif %} /></td>
+    </tr>
+  </tbody>
+  <!--
+    uri = models.URLField(max_length=2048, unique=True, db_index=True) #subject
+    subjects = models.ManyToManyField('p4l.Subject') #dct:subject                                                       # Thesaurus with no country
+    themes = models.ManyToManyField('p4l.Theme') #iiep:theme                                                            # Theme
+    countries = models.ManyToManyField('p4l.Country') #iiep:country                                                     # Thesaurus filtered with country only
+    identifier = models.CharField(max_length=128, unique=True, db_index=True) #dct:identifier    
+    notes = models.TextField(blank=True, null=True) #iiep:notes    
+    #issns foreign key from Isbn #iiep:issn
+    #isbns foreign key from Isbn #iiep:isbn
+    #documentCodes foreign key from Isbn #iiep:documentCode
+    language = models.ForeignKey('p4l.Language', blank=True, null=True) #dct:language                                    # Language
+    otherLanguages = models.ManyToManyField('p4l.Language', related_name='otherLanguage_record') #iiep:otherLanguage     # Language
+    #titles foreign Key from Title #dct:title
+    #addedTitles foreign Key from AddedTitle #iiep:addedTitle
+    #titlesMainDocument foreign Key from TitleMainDocument #iiep:titleMainDocument
+    editionStatement = models.CharField(max_length=1024, blank=True, null=True) #iiep:editionStatement
+    #imprints foreign Key from Imprint #iiep:imprint
+    #collations = foreign Key from Collation #iiep:collation
+    #volumeIssues = foreign Key from VolumeIssue #iiep:volumeIssue
+    projectNames = models.ManyToManyField('p4l.ProjectName') #iiep:projectName
+    periodicals = models.ManyToManyField('p4l.Periodical', through='p4l.RecordPeriodical') #iiep:periodical
+    meetings = models.ManyToManyField('p4l.Meeting', through='p4l.RecordMeeting') #iiep:meeting
+    series = models.ManyToManyField('p4l.Serie', through='p4l.RecordSerie')  #iiep:serie
+    authors = models.ManyToManyField('p4l.Author') #iiep:author
+    subjectPersons = models.ManyToManyField('p4l.SubjectPerson') #iiep:subjectPerson
+    subjectCorporateBodies = models.ManyToManyField('p4l.CorporateBody') #iiep:subjectCorporateBody                       # Organisation ?
+    subjectMeetings = models.ManyToManyField('p4l.SubjectMeeting') #iiep:subjectMeeting
+    corporateAuthors = models.ManyToManyField('p4l.CorporateAuthor') #iiep:corporateAuthor                                # Organisation ?
+    #urls foreign Key from Url #iiep:url
+    recordType = models.URLField(max_length=2048) #dct:type
+    isDocumentPart = models.BooleanField() #iiep:isDocumentPart
+   -->
+</table>
+{% endblock %}
\ No newline at end of file
--- a/src/p4l/urls.py	Wed Aug 28 18:45:41 2013 +0200
+++ b/src/p4l/urls.py	Thu Aug 29 15:42:00 2013 +0200
@@ -1,6 +1,6 @@
 from django.conf import settings
 from django.conf.urls import patterns, include, url
-from .views import RecordListView
+from .views import RecordListView, RecordDetailView
 
 from django.contrib import admin
 admin.autodiscover()
@@ -8,6 +8,7 @@
 urlpatterns = patterns('',
     # Examples:
     url(r'^$', RecordListView.as_view(), name='p4l_home'),
+    url(r'^record/view$', RecordDetailView.as_view(), name='p4l_record_view'),
     # url(r'^p4l/', include('p4l.foo.urls')),
 
     # Uncomment the admin/doc line below to enable admin documentation:
--- a/src/p4l/views.py	Wed Aug 28 18:45:41 2013 +0200
+++ b/src/p4l/views.py	Thu Aug 29 15:42:00 2013 +0200
@@ -6,15 +6,17 @@
 '''
 
 from django.conf import settings
-from django.core.paginator import Paginator, InvalidPage, EmptyPage
-from django.db.models import Count
+#from django.core.paginator import Paginator, InvalidPage, EmptyPage
+#from django.db.models import Count
 #from django.http.response import HttpResponse, HttpResponseForbidden
-from django.views.generic import ListView#, DetailView, View
+from django.shortcuts import get_object_or_404
+from django.views.generic import ListView, DetailView#, View
 #from django.views.generic.list import MultipleObjectMixin
 from .models import Record
 from .forms import RecordFilterForm
 import logging
 
+
 logger = logging.getLogger(__name__)
 
 class RecordListView(ListView):
@@ -42,3 +44,18 @@
             return filter_form.get_filter_qs(qs)
         else:
             return qs
+
+
+class RecordDetailView(DetailView):
+    
+    model = Record
+    template_name = "p4l/p4l_record_view.html"
+    slug_field = "uri" # Even if it is useless because we override get_objet
+    
+    def get_object(self, queryset=None):
+        if "uri" not in self.request.GET:
+            raise AttributeError(u"Record view must be called uri GET parameter")
+        
+        return get_object_or_404(Record.objects.select_related("language").prefetch_related('titles'), uri=self.request.GET["uri"])
+
+