diff --git a/ippisite/ippidb/models.py b/ippisite/ippidb/models.py index 468126a7c69814f769f1400912262061912edc64..5e6c91c5e71d513961da83b18f78ee223aa4cd92 100644 --- a/ippisite/ippidb/models.py +++ b/ippisite/ippidb/models.py @@ -8,11 +8,13 @@ import operator import re from django.conf import settings +from django.contrib.auth import get_user_model from django.core.exceptions import ValidationError from django.db import models, transaction from django.db.models import FloatField, IntegerField, BooleanField from django.db.models import Max, Count, F, Q, Case, When from django.db.models.functions import Cast +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from .utils import FingerPrinter, smi2inchi, smi2inchikey @@ -1246,3 +1248,25 @@ class DrugbankCompoundTanimoto(models.Model): drugbank_compound = models.ForeignKey(DrugBankCompound, models.CASCADE) tanimoto = models.DecimalField( 'Tanimoto value', max_digits=5, decimal_places=4) + + +class Contribution(models.Model): + contributor = models.ForeignKey( + to=get_user_model(), + on_delete=models.PROTECT, + ) + ppi = models.ForeignKey( + to=Ppi, + on_delete=models.SET_NULL, + null=True, + ) + bibliography = models.ForeignKey( + to=Bibliography, + on_delete=models.SET_NULL, + null=True, + ) + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + def get_absolute_url(self): + return reverse('contribution-detail', kwargs={'contribution_pk': self.pk}) diff --git a/ippisite/ippidb/templates/contribute-view.html b/ippisite/ippidb/templates/contribute-detail.html similarity index 72% rename from ippisite/ippidb/templates/contribute-view.html rename to ippisite/ippidb/templates/contribute-detail.html index 2d074ca1d2d0ed62e73949d05420f4cfd870e363..663a1c92602683e5e0bd689fb4d42588419589ce 100644 --- a/ippisite/ippidb/templates/contribute-view.html +++ b/ippisite/ippidb/templates/contribute-detail.html @@ -18,9 +18,22 @@ <div id="main"> <div id="content" class="main-content"> <div class="section row"> - {% include "ippidb/bibliography_card.html" with object=bibliography css_class="col-xs-12 col-md-6"%} - {% include "ippidb/ppi_card.html" with object=ppi css_class="col-xs-12 col-md-6" %} - <div class="col-12"> + {%if contribution %} + <div class="col-xs-12 col-md-4 col-lg-2 mb-4"> + <div class="card"> + <div class="card-body"> + Contribution of <b>{{contribution.contributor.username}}</b> on {{contribution.created_at}} + {% if contribution.updated_at == contribution.created_at %} + <br/> + Last updated on {{contribution.updated_at}} + {% endif %} + </div> + </div> + </div> + {%endif %} + {% include "ippidb/bibliography_card.html" with object=bibliography css_class="col-xs-12 col-md-8 col-lg-4 mb-4"%} + {% include "ippidb/ppi_card.html" with object=ppi css_class="col-xs-12 col-lg-6 mb-4" %} + <div class="col-12 mb-4"> <div class="card"> <h5 class="card-header">{{complexes|verbose_name}}</h5> <div class="card-body"> @@ -30,7 +43,7 @@ </div> </div> </div> - <div class="col-12"> + <div class="col-12 mb-4"> <div class="card"> <h5 class="card-header">Tests</h5> <div class="card-body"> @@ -46,7 +59,7 @@ </div> </div> </div> - <div class="col-12"> + <div class="col-12 mb-4"> <div class="card"> <h5 class="card-header">{{refcompoundbiblio|verbose_name}}</h5> <div class="card-body"> diff --git a/ippisite/ippidb/urls.py b/ippisite/ippidb/urls.py index 72880c1e0e1d681e9dfd35e19f8c5deca3336eab..765d98b8a396d7aebfdddf3c11d42a34fc0ed989 100644 --- a/ippisite/ippidb/urls.py +++ b/ippisite/ippidb/urls.py @@ -3,9 +3,9 @@ iPPI-DB URLs routing module """ from django.conf.urls import include, url -from . import views -from ippidb.forms import * + from ippidb.views import IppiWizard, FORMS +from . import views ippidb_wizard = IppiWizard.as_view(FORMS, url_name='ippidb_step') @@ -25,6 +25,11 @@ urlpatterns = [ url(r'^contribute/view/(?P<bibli_pk>\d+)-(?P<ppi_pk>\d+)/$', views.admin_session_view, name='admin-session-view'), url(r'^contribute/view/(?P<bibli_pk>\d+)-/$', views.admin_session_view, {'ppi_pk': None}), url(r'^contribute/view/-(?P<ppi_pk>\d+)/$', views.admin_session_view, {'bibli_pk': None}), + url(r'^contribute/view/(?P<contribution_pk>\d+)/$', + views.admin_session_view, + {'ppi_pk': None, 'bibli_pk': None}, + name='contribution-detail', + ), url(r'^contribute/update/$', views.update, name='admin-session-update'), url(r'^utils/mol2smi$', views.convert_mol2smi, name='mol2smi'), url(r'^utils/smi2mol$', views.convert_smi2mol, name='smi2mol'), diff --git a/ippisite/ippidb/views/contribute.py b/ippisite/ippidb/views/contribute.py index 2639b9d7de3c5d636fd99697c85321f50bc11760..1c9411591cde9e3c97a3dc99c9ec3575111feb03 100644 --- a/ippisite/ippidb/views/contribute.py +++ b/ippisite/ippidb/views/contribute.py @@ -309,14 +309,34 @@ class IppiWizard(LoginRequiredMixin, NamedUrlSessionWizardView): # re-save the ppi to update its name ppi.save() - super().done(form_list=form_list, **kwargs) - return admin_session_view(self.request, bibliography.pk, ppi.pk) + # get/build the contribution object + contribution, created = models.Contribution.objects.get_or_create( + contributor=self.request.user, + ppi=ppi, + bibliography=bibliography, + ) + if not created: + # update its date of modification + contribution.save() + # super().done(form_list=form_list, **kwargs) + return admin_session_view(self.request, bibli_pk=None, ppi_pk=None, contribution_pk=contribution.pk) -def admin_session_view(request, bibli_pk, ppi_pk): + +def admin_session_view(request, bibli_pk, ppi_pk, contribution_pk=None): context = {} + if contribution_pk: + contribution = get_object_or_404(models.Contribution, pk=contribution_pk) + bibliography = contribution.bibliography + ppi = contribution.ppi + context["contribution"] = contribution + else: + bibliography = None + ppi = None + if bibli_pk: bibliography = get_object_or_404(models.Bibliography, pk=bibli_pk) + if bibliography: context["bibliography"] = bibliography context["testactivitydescription"] = bibliography.testactivitydescription_set.all() context["testcytotoxdescription"] = bibliography.testcytotoxdescription_set.all() @@ -325,7 +345,8 @@ def admin_session_view(request, bibli_pk, ppi_pk): if ppi_pk: ppi = get_object_or_404(models.Ppi, pk=ppi_pk) + if ppi: context["ppi"] = ppi context["complexes"] = ppi.ppicomplex_set.all() - return render(request, 'contribute-view.html', context=context) + return render(request, 'contribute-detail.html', context=context)