diff --git a/docs/UML/Core.pu b/docs/UML/Core.pu index 47a137dbb7008f46dade4f87029f71cf9a84aa6f..6e155af1b20179aa417cb56867ee2537cc65fffd 100644 --- a/docs/UML/Core.pu +++ b/docs/UML/Core.pu @@ -2,47 +2,47 @@ package Core { -' note as notePackageCore -' Write access is restricted to site admins and the members of the DRI group. -' On some models, users can make requests for modifications (for this a copy of the model is used for storing). -' end note + ' note as notePackageCore + ' Write access is restricted to site admins and the members of the DRI group. + ' On some models, users can make requests for modifications (for this a copy of the model is used for storing). + ' end note -class City #white { - + name : string - + local_name : string - + area : string -} + class City #white { + + name : string + + local_name : string + + area : string + } -class Country #white { - # iso_alpha2_code : string{2} - + name : string - + region_code : string{3} - + region_name : string - + sub_region_code : string{3} - + sub_region_name : string - + intermediate_region_code : string{3} - + intermediate_region_name : string -} + class Country #white { + # iso_alpha2_code : string{2} + + name : string + + region_code : string{3} + + region_name : string + + sub_region_code : string{3} + + sub_region_name : string + + intermediate_region_code : string{3} + + intermediate_region_name : string + } -City "*" -left-* Country + City "*" -left-* Country -note "Countries are intially \n hardcoded in the db." as N2 -N2 .up. Country + note "Countries are intially \n hardcoded in the db." as N2 + N2 .up. Country -class University #wheat { - + name : string - + accronyme : string - + logo : image - + website : url -} + class University #wheat { + + name : string + + accronyme : string + + logo : image + + website : url + } -University "1" .right. "1" City -note on link #white - This link is acheived - through the campus module - (where is_main = true) + University "1" .right. "1" City + note on link #white + This link is acheived + through the campus module + (where is_main = true) end note Class Offer { @@ -81,7 +81,24 @@ note on link #white + content : MD } - note left of UsefullLinks: It will be a dynamic page \n on the website + note right of UsefullLinks: It will be a dynamic page \n on the website + + + abstract class BasicModuleCopyCore as "BasicModule" #red + + class UniversityDri + class CountryDri + + UniversityDri -down-|> BasicModuleCopyCore + CountryDri -down-|> BasicModuleCopyCore + + Country "*"-down-"*" CountryDri + University "*"-down-"*" UniversityDri + + note "Edit right reserved\n to DRI members." as N4 + N4 .. UniversityDri + N4 .. CountryDri + } ' End of Core block diff --git a/rex/admin.py b/rex/admin.py index 7212a04d69eae149518404a847c176ab618df4a6..be082b6e18ec9231d9ec1f0c5cc3c22e96405cdb 100644 --- a/rex/admin.py +++ b/rex/admin.py @@ -12,6 +12,7 @@ from rex.models.location import CountryOtherStuff from rex.models.location import CountryVisaAdministrative from rex.models.location import CountryPhoto from rex.models.location import CountryScholarship +from rex.models.location import CountryDri from rex.models.location import CityTransport from rex.models.location import CityTourism @@ -27,6 +28,7 @@ from rex.models.university import UniversityCulture from rex.models.university import UniversityOtherStuff from rex.models.university import UniversitySpecialOffer from rex.models.university import UniversityPhoto +from rex.models.university import UniversityDri from rex.models.university import CampusTransport from rex.models.university import CampusAccommodation @@ -69,6 +71,8 @@ VERSIONNED_MODELS = [ CampusAccommodation, CampusCultureAndStudentLife, CampusOtherStuff, + CountryDri, + UniversityDri, ] for model in CLASSIC_MODELS: diff --git a/rex/migrations/0024_countrydri_universitydri.py b/rex/migrations/0024_countrydri_universitydri.py new file mode 100644 index 0000000000000000000000000000000000000000..485b784ac96e745aef88c871d93da240e6c5a67e --- /dev/null +++ b/rex/migrations/0024_countrydri_universitydri.py @@ -0,0 +1,38 @@ +# Generated by Django 2.0.3 on 2018-08-21 14:08 + +from django.db import migrations, models +import rex.models.tools.usefullLinksField + + +class Migration(migrations.Migration): + + dependencies = [ + ('rex', '0023_campusaccommodation_campuscultureandstudentlife_campusotherstuff_campustransport'), + ] + + operations = [ + migrations.CreateModel( + name='CountryDri', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('comment', models.TextField(blank=True)), + ('usefull_links', rex.models.tools.usefullLinksField.UsefullLinksField(blank=True, default=[], validators=[rex.models.tools.usefullLinksField.validate_usefull_links])), + ('country', models.ManyToManyField(related_name='country_dri', to='rex.Country')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='UniversityDri', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('comment', models.TextField(blank=True)), + ('usefull_links', rex.models.tools.usefullLinksField.UsefullLinksField(blank=True, default=[], validators=[rex.models.tools.usefullLinksField.validate_usefull_links])), + ('university', models.ManyToManyField(related_name='university_dri', to='rex.University')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/rex/models/location/__init__.py b/rex/models/location/__init__.py index 3225a4f1006bfa891d8a0db363916739f6a0caa7..d982b719199daf1cd5bca6ede5e89cd40abe096b 100644 --- a/rex/models/location/__init__.py +++ b/rex/models/location/__init__.py @@ -10,6 +10,7 @@ from .countryBasicModules import CountryTourism, CountryTourismViewSet # noqa: from .countryBasicModules import CountryOtherStuff, CountryOtherStuffViewSet # noqa: F401 from .countryPhoto import CountryPhoto, CountryPhotoViewSet # noqa: F401 from .countryScholarship import CountryScholarship, CountryScholarshipViewSet # noqa: F401 +from .countryDri import CountryDri, CountryDriViewSet # noqa: F401 from .cityBasicModules import CityTransport, CityTransportViewSet # noqa: F401 from .cityBasicModules import CityOtherStuff, CityOtherStuffViewSet # noqa: F401 diff --git a/rex/models/location/countryDri.py b/rex/models/location/countryDri.py new file mode 100644 index 0000000000000000000000000000000000000000..be96f8c2be1d926d842abe7049f68f1e1f3ec275 --- /dev/null +++ b/rex/models/location/countryDri.py @@ -0,0 +1,22 @@ +from django.db import models +from rex.models.location import Country +from rex.models.module import DriRestrictedModule, DriRestrictedModuleSerializer +from rest_framework import viewsets, permissions + + +class CountryDri(DriRestrictedModule): + country = models.ManyToManyField( + Country, related_name="country_dri") + + +class CountryDriSerializer(DriRestrictedModuleSerializer): + + class Meta: + model = CountryDri + fields = '__all__' + + +class CountryDriViewSet(viewsets.ModelViewSet): + permission_classes = (permissions.DjangoModelPermissions,) + queryset = CountryDri.objects.all() # pylint: disable=E1101 + serializer_class = CountryDriSerializer diff --git a/rex/models/module/__init__.py b/rex/models/module/__init__.py index 7e5c75f90e1e97c37f0fcb31ee6541cb00213068..352279095d3b76b1afe710fc71ea54824031bc3c 100644 --- a/rex/models/module/__init__.py +++ b/rex/models/module/__init__.py @@ -2,3 +2,4 @@ from .versionnedModule import VersionnedModule, VersionnedModuleSerializer # no from .basicModule import BasicModule, BasicModuleSerializer # noqa: F401 from .scholarship import Scholarship # noqa: F401 from .photo import Photo # noqa: F401 +from .driRestrictedModule import DriRestrictedModule, DriRestrictedModuleSerializer # noqa: F401 diff --git a/rex/models/module/driRestrictedModule.py b/rex/models/module/driRestrictedModule.py new file mode 100644 index 0000000000000000000000000000000000000000..90fa2a65effa5fc3ddf7290d1fdab722321e357e --- /dev/null +++ b/rex/models/module/driRestrictedModule.py @@ -0,0 +1,12 @@ +from rex.models.module import BasicModule, BasicModuleSerializer + + +class DriRestrictedModule(BasicModule): + + class Meta: + abstract = True + + +class DriRestrictedModuleSerializer(BasicModuleSerializer): + # TODO Check edit restrictions + pass diff --git a/rex/models/university/__init__.py b/rex/models/university/__init__.py index 4a575bc1ce5f09ec477bc4d2ba10e3e20f4a2570..39672e5a2fa3554e081d2360c00c317b4b3a937c 100644 --- a/rex/models/university/__init__.py +++ b/rex/models/university/__init__.py @@ -3,6 +3,7 @@ from .campus import Campus, CampusViewSet, CampusSerializer # noqa: F401 from .universityAPI import UniversitySerializer, UniversityViewSet # noqa: F401 from .universityScholarship import UniversityScholarship, UniversityScholarshipViewSet # noqa: F401 +from .universityDri import UniversityDri, UniversityDriViewSet # noqa: F401 from .universityInfo import UniversityInfo, UniversityInfoViewSet # noqa: F401 from .universitySemestersDates import UniversitySemestersDates, UniversitySemestersDatesViewSet # noqa: F401 from .universityBasicModules import UniversityInsurance, UniversityInsuranceViewSet # noqa: F401 diff --git a/rex/models/university/universityDri.py b/rex/models/university/universityDri.py new file mode 100644 index 0000000000000000000000000000000000000000..06123891d71e324c15a3e4dedf9b3a481ac450d3 --- /dev/null +++ b/rex/models/university/universityDri.py @@ -0,0 +1,22 @@ +from django.db import models +from rex.models.university import University +from rex.models.module import DriRestrictedModule, DriRestrictedModuleSerializer +from rest_framework import viewsets, permissions + + +class UniversityDri(DriRestrictedModule): + university = models.ManyToManyField( + University, related_name="university_dri") + + +class UniversityDriSerializer(DriRestrictedModuleSerializer): + + class Meta: + model = UniversityDri + fields = '__all__' + + +class UniversityDriViewSet(viewsets.ModelViewSet): + permission_classes = (permissions.DjangoModelPermissions,) + queryset = UniversityDri.objects.all() # pylint: disable=E1101 + serializer_class = UniversityDriSerializer diff --git a/rex/urls.py b/rex/urls.py index 96e044041c2acc69fd76e9921a2dada7552fe5b2..17b9416101e6088e5cc118e9bac152db152e39f3 100644 --- a/rex/urls.py +++ b/rex/urls.py @@ -13,6 +13,7 @@ from rex.models.location import CountryOtherStuffViewSet from rex.models.location import CountryVisaAdministrativeViewSet from rex.models.location import CountryPhotoViewSet from rex.models.location import CountryScholarshipViewSet +from rex.models.location import CountryDriViewSet from rex.models.location import CityTransportViewSet from rex.models.location import CityTourismViewSet @@ -30,6 +31,7 @@ from rex.models.university import UniversityCultureViewSet from rex.models.university import UniversityOtherStuffViewSet from rex.models.university import UniversitySpecialOfferViewSet from rex.models.university import UniversityPhotoViewSet +from rex.models.university import UniversityDriViewSet from rex.models.university import CampusTransportViewSet from rex.models.university import CampusAccommodationViewSet @@ -65,6 +67,7 @@ router.register(r'country_more/visa_administrative', CountryVisaAdministrativeViewSet) router.register(r'country_more/photos', CountryPhotoViewSet) router.register(r'country_more/scholarship', CountryScholarshipViewSet) +router.register(r'country_more/dri', CountryDriViewSet) router.register(r'city_more/transport', CityTransportViewSet) router.register(r'city_more/tourism', CityTourismViewSet) @@ -83,6 +86,7 @@ router.register(r'university_more/other_stuff', UniversityOtherStuffViewSet) router.register(r'university_more/photos', UniversityPhotoViewSet) router.register(r'university_more/special_offer', UniversitySpecialOfferViewSet) +router.register(r'university_more/dri', UniversityDriViewSet) router.register(r'campus_more/culture_and_sl', CampusCultureAndStudentLifeViewSet)