diff --git a/assets/src/services/requests/Condition.js b/assets/src/services/requests/Condition.js index e07d896e..4baf3bf7 100644 --- a/assets/src/services/requests/Condition.js +++ b/assets/src/services/requests/Condition.js @@ -1,48 +1,56 @@ import Api from '../Api' +let today = new Date().toISOString().slice(0, 10) +var date_filter = 'ge(journalcondition.valid_until,' + today + + '),le(journalcondition.valid_from,' + today + + '),ge(organizationcondition.valid_until,' + today + + '),le(organizationcondition.valid_from,' + today + ')' +// To stop filtering by validity dates, replace by a trivial filter such as +// var date_filter = 'ge(condition.id,0)' + export const getCondition = (id) => { return Api.request({ url: `/conditionterm/${id}`, method: 'GET', }) } export const getListOfCondition = () => { return Api.request({ url: `/conditionterm/`, method: 'GET', }) } export const searchCondi = (journalId,institId) => { return Api.request({ - url: `/conditionset/?and(eq(journal.id,${journalId}),eq(organization.id,${institId}))`, + url: `/conditionset/?and(eq(journalcondition.journal.id,${journalId}),eq(organizationcondition.organization.id,${institId}),${date_filter})`, method: 'GET', }) } export const searchInstitFunder = (institId,funderId,condi) => { return Api.request({ - url: `/conditionset/?(eq(organization.id,${institId})|eq(organization.id,${funderId}))&ne(condition_type.id,${condi})`, + url: `/conditionset/?(eq(organizationcondition.organization.id,${institId})|eq(organizationcondition.organization.id,${funderId}))&ne(condition_type.id,${condi})&and(${date_filter})`, method: 'GET', }) } export const searchCondi3 = (institId,journalId,funderId) => { return Api.request({ - url: `/conditionset/?(eq(organization.id,${institId})|eq(organization.id,${funderId}))&eq(journal.id,${journalId})`, + url: `/conditionset/?(eq(organizationcondition.organization.id,${institId})|eq(organizationcondition.organization.id,${funderId}))&eq(journalcondition.journal.id,${journalId})&and(${date_filter})`, method: 'GET', }) } export const searchorganizationonly = (id,condi) => { return Api.request({ - url: `/conditionset/?and(eq(organization.id,${id}),ne(condition_type.id,${condi}))`, + url: `/conditionset/?and(eq(organizationcondition.organization.id,${id}),ne(condition_type.id,${condi}),${date_filter})`, method: 'GET', }) } export const searchjournalonly = (id,condi) => { return Api.request({ - url: `/conditionset/?and(eq(journal.id,${id}),ne(condition_type.id,${condi}))`, + url: `/conditionset/?and(eq(journalcondition.journal.id,${id}),ne(condition_type.id,${condi}),${date_filter})`, method: 'GET', }) } \ No newline at end of file diff --git a/django_api/views.py b/django_api/views.py index e4bc5cc0..1aebfc62 100644 --- a/django_api/views.py +++ b/django_api/views.py @@ -1,209 +1,215 @@ from django.contrib.auth.models import AbstractUser from django.shortcuts import render from django.contrib.auth import authenticate, login, logout from django.shortcuts import render from django.http import HttpResponse, HttpResponseRedirect, Http404, JsonResponse from .models import * from .serializers import * from rest_framework import viewsets, filters, generics from rest_framework.authentication import BasicAuthentication from rest_framework.permissions import IsAuthenticatedOrReadOnly from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response from itertools import chain from django.db.models import Count from dj_rql.filter_cls import RQLFilterClass from urllib.parse import unquote from datetime import date class JournalViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] search_fields = ['name'] filter_backends = (filters.SearchFilter,) queryset = Journal.objects.all() serializer_class = JournalSerializer class OrgaViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = OrgaSerializer queryset = Organization.objects.filter( is_funder=False ) class ConditionSetFilters(RQLFilterClass): #Frontend api request: # http://127.0.0.1:8000/api/conditionset/?and(eq(journal.id,3);eq(organization.id,11);eq(condition_type.id,3)) MODEL = ConditionSet DISTINCT = True FILTERS = ( 'id', { - 'namespace': 'journal', - 'filters': ['id', ], - + 'namespace': 'journalcondition', + 'filters': ['id', 'valid_from', 'valid_until', + { + 'namespace': 'journal', + 'filters': ['id', ], + } + ], }, { - 'namespace': 'organization', - 'filters': ['id', ], + 'namespace': 'organizationcondition', + 'filters': ['id', 'valid_from', 'valid_until', + { + 'namespace': 'organization', + 'filters': ['id', ] + } + ], }, + { 'namespace': 'condition_type', 'filters': ['id', ], }, ) class ConditionSetViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] - # queryset = ConditionSet.objects.all() - queryset = ConditionSet.objects.filter(journalcondition__valid_from__lte=date.today(), - journalcondition__valid_until__gte=date.today(), - organizationcondition__valid_from__lte=date.today(), - organizationcondition__valid_until__gte=date.today()) + queryset = ConditionSet.objects.all() # queryset = ConditionSet.objects.values('term__version__description') serializer_class = ConditionSetSerializer # serializer_class = ConditionGroupedSerializer rql_filter_class = ConditionSetFilters #.objects.values('term__version.description') class FunderViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = OrgaSerializer queryset = Organization.objects.filter( is_funder=True ) class TermViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = TermSerializer queryset = Term.objects.all() class CountryViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = CountrySerializer queryset = Country.objects.all() class LanguageViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = LanguageSerializer queryset = Language.objects.all() class IssnViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = IssnSerializer queryset = Issn.objects.all() class OaViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = OaSerializer queryset = Oa.objects.all() class PublisherViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = PublisherSerializer queryset = Publisher.objects.all() class VersionViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = VersionSerializer queryset = Version.objects.all() class LicenceViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = LicenceSerializer queryset = Licence.objects.all() class Cost_factor_typeViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = Cost_factor_typeSerializer queryset = Cost_factor_type.objects.all() class Cost_factorViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = Cost_factorSerializer queryset = Cost_factor.objects.all() class ConditionTypeViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = ConditionTypeSerializer queryset = ConditionType.objects.all() class OrganizationConditionViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = OrganizationConditionSerializer queryset = OrganizationCondition.objects.all() class JournalConditionViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = JournalConditionSerializer queryset = JournalCondition.objects.all() class OrganizationConditionViewSet(viewsets.ModelViewSet): authentification_classes = (BasicAuthentication,) permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = OrganizationConditionSerializer queryset = OrganizationCondition.objects.all() # Count number of different version # OrganizationCondition.objects.annotate(version_count=Count('condition_set__term__version')) # OrganizationCondition.objects # .values('condition_set__term__version') #what to group by # .annotate(version_count=Count('condition_set__term__version')) # what to aggregate # group by version and count # OrganizationCondition.objects.values('condition_set__term__version').annotate(version_count=Count('condition_set__term__version')) # source https://hakibenita.com/django-group-by-sql # https://docs.djangoproject.com/en/3.2/topics/db/aggregation/ # OrganizationCondition.objects.values('condition_set__term__version').filter(organization_id=1).annotate(version_count=Count('condition_set__term__version')) \ No newline at end of file