Skip to content
Snippets Groups Projects
Commit 420b948b authored by Piotr Gawron's avatar Piotr Gawron
Browse files

allow to export languages of subjects

parent 549a7b37
No related branches found
No related tags found
1 merge request!422Resolve "allow to export subject languages"
Pipeline #54415 failed
smasch (1.2.0-1) untable; urgency=low
* small improvement: export of subjects contains languages field (#507)
-- Piotr Gawron <piotr.gawron@uni.lu> Wed, 31 Mar 2022 12:00:00 +0200
smasch (1.1.1-1) stable; urgency=medium
* bug fix: smasch installation failed when subject did not contain type
......
......@@ -385,7 +385,7 @@ def create_room(owner='Test owner', city='Test city',
return room
def create_language(name="French", locale=DEFAULT_LOCALE_NAME):
def create_language(name="French", locale=DEFAULT_LOCALE_NAME) -> Language:
language = Language(name=name, locale=locale)
language.save()
return language
......
# coding=utf-8
from django.db.models.manager import BaseManager
from django.urls import reverse
from web.models import Appointment, AppointmentTypeLink
......@@ -7,7 +8,7 @@ from web.models.custom_data import CustomStudySubjectField
from web.models.custom_data.custom_study_subject_field import get_study_subject_field_id
from web.tests import LoggedInTestCase
from web.tests.functions import create_study_subject, create_appointment, create_visit, create_appointment_type, \
get_test_study
get_test_study, create_language
from web.views.export import subject_to_row_for_fields, DROP_OUT_FIELD, get_subjects_as_array
......@@ -114,3 +115,14 @@ class TestExportView(LoggedInTestCase):
)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content.decode("UTF-8").count("\n"), 2)
def test_export_subjects_to_csv_with_languages(self):
self.login_as_admin()
study_subject = create_study_subject()
language = create_language()
study_subject.subject.languages.set([language])
study_subject.subject.save()
response = self.client.get(
reverse('web.views.export_to_csv', kwargs={'study_id': get_test_study().id, 'data_type': "subjects"}))
self.assertEqual(response.status_code, 200)
self.assertTrue(language.name in response.content.decode("UTF-8"))
......@@ -2,6 +2,7 @@
import csv
import django_excel as excel
from django.db.models.manager import BaseManager
from django.http import HttpResponse
from django.shortcuts import get_object_or_404
......@@ -9,8 +10,8 @@ from web.decorators import PermissionDecorator
from web.models import Subject, StudySubject, Appointment, Study, Worker, Provenance
from web.models.custom_data import CustomStudySubjectField
from web.models.custom_data.custom_study_subject_field import get_study_subject_field_id
from .view_utils import wrap_response, e500_error
from .notifications import get_today_midnight_date
from .view_utils import wrap_response, e500_error
from ..utils import get_client_ip
......@@ -118,6 +119,8 @@ def get_default_subject_fields(study: Study):
for field in Subject._meta.fields:
if field.name.upper() != "ID":
subject_fields.append(field)
for field in Subject._meta.many_to_many:
subject_fields.append(field)
for field in StudySubject._meta.fields:
if field.name.upper() != "ID" and field.name.upper() != "SUBJECT":
subject_fields.append(field)
......@@ -172,6 +175,11 @@ def subject_to_row_for_fields(study_subject: StudySubject, subject_fields):
cell = getattr(study_subject.subject, field.name)
if cell is None:
cell = ""
if isinstance(cell, BaseManager):
collection_value = ""
for value in cell.all():
collection_value += str(value) + ","
cell = collection_value
row.append(cell)
return row
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment