diff --git a/fetc/settings.py b/fetc/settings.py index 6b753f47e..b76c91907 100644 --- a/fetc/settings.py +++ b/fetc/settings.py @@ -158,7 +158,7 @@ MENU_HIDE_EMPTY = False # Base URL -BASE_URL = "127.0.0.1:8000" +BASE_URL = "https://127.0.0.1:8000" # CSRF Setting CSRF_FAILURE_VIEW = "main.error_views.csrf_failure" diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po index bb8bff483..d4aad40aa 100644 --- a/locale/en/LC_MESSAGES/django.po +++ b/locale/en/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-28 14:43+0100\n" +"POT-Creation-Date: 2024-04-04 11:51+0200\n" "PO-Revision-Date: 2024-01-17 10:48+0100\n" "Last-Translator: Anna Asbury \n" "Language-Team: \n" @@ -271,7 +271,7 @@ msgid "Ingediende aanvragen" msgstr "My submitted applications;" #: main/templates/auth/user_detail.html:36 reviews/api/views.py:47 -#: reviews/api/views.py:276 reviews/api/views.py:337 +#: reviews/api/views.py:281 reviews/api/views.py:342 #: reviews/templates/reviews/committee_members_workload.html:24 msgid "Referentienummer" msgstr "Reference number" @@ -296,7 +296,7 @@ msgstr "Phase" #: proposals/api/views.py:146 #: proposals/templates/proposals/vue_templates/proposal_archive_list.html:102 #: proposals/templates/proposals/vue_templates/proposal_list.html:161 -#: reviews/api/views.py:51 reviews/api/views.py:280 reviews/api/views.py:341 +#: reviews/api/views.py:51 reviews/api/views.py:285 reviews/api/views.py:346 #: reviews/templates/reviews/committee_members_workload.html:25 #: reviews/templates/reviews/vue_templates/decision_list.html:153 #: reviews/templates/reviews/vue_templates/decision_list_reviewer.html:95 @@ -317,7 +317,7 @@ msgstr "Desired end date" msgid "Mijn besluit" msgstr "My decision" -#: main/templates/auth/user_detail.html:43 reviews/api/views.py:331 +#: main/templates/auth/user_detail.html:43 reviews/api/views.py:336 #: reviews/models.py:34 #: reviews/templates/reviews/vue_templates/decision_list.html:133 #: reviews/templates/reviews/vue_templates/review_list.html:137 @@ -330,7 +330,7 @@ msgstr "Conclusion" msgid "Acties" msgstr "Actions" -#: main/templates/auth/user_detail.html:60 reviews/models.py:117 +#: main/templates/auth/user_detail.html:60 reviews/models.py:118 msgid ", met revisie" msgstr ", with revision" @@ -372,12 +372,12 @@ msgstr "Website export text" #: proposals/templates/proposals/proposal_confirmation.html:25 #: reviews/templates/reviews/vue_templates/decision_list.html:95 #: reviews/templates/reviews/vue_templates/review_list.html:88 -#: reviews/utils/review_actions.py:228 +#: reviews/utils/review_actions.py:230 msgid "Bevestigingsbrief versturen" msgstr "Send confirmation letter" #: main/templates/auth/user_detail.html:97 -#: proposals/templates/proposals/proposal_confirmation.html:38 +#: proposals/templates/proposals/proposal_confirmation.html:39 #: reviews/templates/reviews/vue_templates/decision_list.html:90 #: reviews/templates/reviews/vue_templates/review_list.html:83 msgid "Bevestigingsbrief verstuurd" @@ -1046,12 +1046,12 @@ msgstr "" "%(title)s(reference number %(ref_number)s), trajectory %(order)s." #: observations/templates/observations/observation_update_attachments.html:43 -#: proposals/templates/proposals/proposal_confirmation.html:39 +#: proposals/templates/proposals/proposal_confirmation.html:36 #: proposals/templates/proposals/proposal_diff.html:55 #: proposals/templates/proposals/proposal_update_attachments.html:30 #: proposals/templates/proposals/proposal_update_date_start.html:33 #: reviews/templates/reviews/change_chamber_form.html:23 -#: reviews/templates/reviews/decision_form.html:92 +#: reviews/templates/reviews/decision_form.html:99 #: reviews/templates/reviews/review_assign_form.html:46 #: reviews/templates/reviews/review_close_form.html:40 #: reviews/templates/reviews/review_discontinue_form.html:70 @@ -1628,7 +1628,7 @@ msgstr "" "proposals." #: proposals/models.py:462 proposals/utils/pdf_diff_logic.py:983 -#: reviews/models.py:162 +#: reviews/models.py:163 msgid "Ruimte voor eventuele opmerkingen" msgstr "Space for possible comments" @@ -1739,7 +1739,7 @@ msgstr "" msgid "Amendement" msgstr "Amendment" -#: proposals/models.py:677 reviews/api/views.py:41 reviews/api/views.py:327 +#: proposals/models.py:677 reviews/api/views.py:41 reviews/api/views.py:332 #: reviews/templates/reviews/committee_members_workload.html:35 #: reviews/templates/reviews/committee_members_workload.html:74 #: reviews/templates/reviews/review_detail_sidebar.html:106 @@ -1896,15 +1896,15 @@ msgstr "Are you sure you want to delete the application %(title)s?" #: proposals/templates/proposals/proposal_confirm_delete.html:20 #: proposals/templates/proposals/vue_templates/proposal_list.html:66 -#: tasks/templates/tasks/session_confirm_delete.html:20 -#: tasks/templates/tasks/task_confirm_delete.html:20 +#: tasks/templates/tasks/session_confirm_delete.html:22 +#: tasks/templates/tasks/task_confirm_delete.html:22 msgid "Verwijderen" msgstr "Delete" #: proposals/templates/proposals/proposal_confirm_delete.html:21 #: proposals/templates/proposals/proposal_copy.html:93 -#: tasks/templates/tasks/session_confirm_delete.html:21 -#: tasks/templates/tasks/task_confirm_delete.html:21 +#: tasks/templates/tasks/session_confirm_delete.html:23 +#: tasks/templates/tasks/task_confirm_delete.html:23 msgid "Annuleren" msgstr "Cancel" @@ -3068,7 +3068,7 @@ msgstr "" "This section was present in the original application, but was removed for " "the revision." -#: proposals/utils/pdf_diff_logic.py:249 reviews/models.py:111 +#: proposals/utils/pdf_diff_logic.py:249 reviews/models.py:112 msgid "Onbekend" msgstr "Unknown" @@ -3245,11 +3245,11 @@ msgstr "" msgid "Aanvraag verwijderd" msgstr "Application deleted" -#: proposals/views/proposal_views.py:432 +#: proposals/views/proposal_views.py:452 msgid "Wijzigingen opgeslagen" msgstr "Changes saved" -#: proposals/views/proposal_views.py:536 +#: proposals/views/proposal_views.py:556 msgid "Aanvraag gekopieerd" msgstr "Application copied" @@ -3280,21 +3280,21 @@ msgstr "Contact {secretary} to make sure." msgid "Je onderzoek zal moeten worden beoordeeld door de METC." msgstr "Your application will require assessment by an METC." -#: reviews/api/views.py:33 reviews/api/views.py:319 +#: reviews/api/views.py:33 reviews/api/views.py:324 #: reviews/templates/reviews/vue_templates/decision_list.html:111 #: reviews/templates/reviews/vue_templates/decision_list_reviewer.html:61 #: reviews/templates/reviews/vue_templates/review_list.html:116 msgid "Stadium" msgstr "Stage" -#: reviews/api/views.py:37 reviews/api/views.py:323 reviews/models.py:31 +#: reviews/api/views.py:37 reviews/api/views.py:328 reviews/models.py:31 #: reviews/templates/reviews/vue_templates/decision_list.html:178 #: reviews/templates/reviews/vue_templates/decision_list_reviewer.html:121 #: reviews/templates/reviews/vue_templates/review_list.html:183 msgid "Route" msgstr "Route" -#: reviews/api/views.py:55 reviews/api/views.py:284 reviews/api/views.py:345 +#: reviews/api/views.py:55 reviews/api/views.py:289 reviews/api/views.py:350 msgid "Start datum" msgstr "Start date review" @@ -3362,19 +3362,19 @@ msgstr "All pending decisions committee members" msgid "Alle openstaande besluiten eindverantwoordelijken" msgstr "All pending decisions supervisors" -#: reviews/menus.py:37 reviews/views.py:230 +#: reviews/menus.py:37 reviews/views.py:235 msgid "Nog af te handelen aanvragen" msgstr "Applications waiting for conclusion" -#: reviews/menus.py:42 reviews/views.py:242 +#: reviews/menus.py:42 reviews/views.py:247 msgid "Aanvragen in revisie" msgstr "Applications in revision" -#: reviews/menus.py:47 reviews/views.py:254 +#: reviews/menus.py:47 reviews/views.py:259 msgid "Alle lopende aanvragen" msgstr "All running applications" -#: reviews/menus.py:52 reviews/views.py:280 +#: reviews/menus.py:52 reviews/views.py:285 msgid "Alle ingezonden aanvragen" msgstr "All submitted applications" @@ -3434,32 +3434,32 @@ msgstr "Post hoc negative advice by FETC-H" msgid "Niet verder in behandeling genomen" msgstr "Not to be assessed further" -#: reviews/models.py:32 reviews/models.py:157 +#: reviews/models.py:32 reviews/models.py:158 #: reviews/templates/reviews/review_table.html:9 msgid "Beslissing" msgstr "Decision" -#: reviews/models.py:123 +#: reviews/models.py:124 msgid "lange (4-weken) route" msgstr "long (4-week) route" -#: reviews/models.py:124 +#: reviews/models.py:125 msgid "korte (2-weken) route" msgstr "short (2-week) route" -#: reviews/models.py:125 +#: reviews/models.py:126 msgid "nog geen route" msgstr "no route assigned" -#: reviews/models.py:152 +#: reviews/models.py:153 msgid "goedgekeurd" msgstr "endorsed" -#: reviews/models.py:153 +#: reviews/models.py:154 msgid "niet goedgekeurd" msgstr "not endorsed" -#: reviews/models.py:154 +#: reviews/models.py:155 msgid "revisie noodzakelijk" msgstr "revision necessary" @@ -3625,11 +3625,21 @@ msgstr "" "href=\"%(pdf_url)s\" target=\"_blank\">here (downloads as PDF)." #: reviews/templates/reviews/decision_form.html:29 +msgid "" +"Attentie: jij bent de laatste beoordelaar van deze " +"aanvraag. Daarom kun je na het versturen je oordeel en commentaar niet meer " +"bewerken. Controleer je antwoorden goed." +msgstr "" +"Warning: because you are the last remaining reviewer for " +"this proposal, you won't be able to edit your response after submission. " +"Double-check your answers." + +#: reviews/templates/reviews/decision_form.html:36 #, python-format msgid "Je kunt nu de aanvraag %(title)s bekijken.
" msgstr "You can now (re)view this application here: %(title)s.
" -#: reviews/templates/reviews/decision_form.html:35 +#: reviews/templates/reviews/decision_form.html:42 msgid "" "Als de aanvraag (incl. geïnformeerde toestemmingsformulieren) in orde is, " "klik dan op ‘goedgekeurd’ en ‘Beslissing opslaan’ hieronder; dan wordt de " @@ -3639,7 +3649,7 @@ msgstr "" "'endorsed' and 'Save decision' below; the application will then be submitted " "to the FEtC-H. " -#: reviews/templates/reviews/decision_form.html:42 +#: reviews/templates/reviews/decision_form.html:49 msgid "" "Als de aanvraag nog niet in orde is, dan zijn er twee mogelijkheden om de " "aanvraag aan te passen:" @@ -3647,7 +3657,7 @@ msgstr "" "If the application is not yet in order, there are two methods to amend the " "study: " -#: reviews/templates/reviews/decision_form.html:49 +#: reviews/templates/reviews/decision_form.html:56 #, python-format msgid "" "door de supervisor (jijzelf)
Als supervisor kan je deze aanvraag Indien je wilt dat de " "indiener de aanvraag zelf aanpast voordat je de studie kunt goedkeuren en " @@ -3675,7 +3685,7 @@ msgstr "" "any comments, and click 'Save decision'. Once you have done this, the " "submitter can make changes again.
" -#: reviews/templates/reviews/decision_form.html:70 +#: reviews/templates/reviews/decision_form.html:77 msgid "" "Als de indiener de gevraagde wijzigingen heeft doorgevoerd en opnieuw heeft " "verstuurd, zal je de aangepaste aanvraag opnieuw moeten beoordelen." @@ -3683,7 +3693,7 @@ msgstr "" "Once the submitter has made the requested changes and resubmitted the " "application, you will have to re-evaluate the application. " -#: reviews/templates/reviews/decision_form.html:80 +#: reviews/templates/reviews/decision_form.html:87 #, python-format msgid "" "Dit is een revisie van of amendement op een vorige aanvraag. De verschillen " @@ -3693,7 +3703,7 @@ msgstr "" "differences compared to the previous application
here." -#: reviews/templates/reviews/decision_form.html:95 +#: reviews/templates/reviews/decision_form.html:102 msgid "Beslissing opslaan" msgstr "Save decision" @@ -3716,7 +3726,7 @@ msgstr "Appoint committee members" #, python-format msgid "" "

Kies hier de geschikte route en commissieleden voor de aanvraag " -"%(title)s. klik hier voor een " +"%(title)s. Klik hier voor een " "overzicht van de werkverdeling van deze commissie.

" msgstr "" "

Choose the appropriate route and committee members for the application " @@ -3931,7 +3941,7 @@ msgid "Verplaats naar andere kamer" msgstr "Move study to different reviewing chamber" #: reviews/templates/reviews/vue_templates/review_list.html:95 -#: reviews/utils/review_actions.py:264 +#: reviews/utils/review_actions.py:266 msgid "Verberg aanvraag uit het archief" msgstr "Remove this application from the archive" @@ -4000,30 +4010,34 @@ msgid "Toestemmingsdocument observatie" msgstr "Consent document for observation" #: reviews/utils/review_actions.py:118 +msgid "Pas jouw beslissing en/of commentaar aan" +msgstr "Edit your feedback on this proposal" + +#: reviews/utils/review_actions.py:120 msgid "Geef jouw beslissing en/of commentaar door" msgstr "Provide feedback on this proposal" -#: reviews/utils/review_actions.py:141 +#: reviews/utils/review_actions.py:143 msgid "Deze versie afhandelen" msgstr "Conclude this version" -#: reviews/utils/review_actions.py:169 +#: reviews/utils/review_actions.py:171 msgid "Beëindig definitief de afhandeling van deze aanvraag" msgstr "Discontinue assessment of this application" -#: reviews/utils/review_actions.py:197 +#: reviews/utils/review_actions.py:199 msgid "Verander aangestelde commissieleden" msgstr "Change appointment of committee members" -#: reviews/utils/review_actions.py:229 +#: reviews/utils/review_actions.py:231 msgid "Datum van bevestigingsbrief aanpassen" msgstr "Change date of confirmation letter" -#: reviews/utils/review_actions.py:266 +#: reviews/utils/review_actions.py:268 msgid "Plaats aanvraag in het archief." msgstr "Add this application to the archive" -#: reviews/utils/review_actions.py:283 +#: reviews/utils/review_actions.py:285 msgid "Startdatum wijzigen" msgstr "Edit start date" @@ -4164,11 +4178,11 @@ msgstr "My results" msgid "Openstaande besluiten commissieleden" msgstr "Pending decisions committee members" -#: reviews/views.py:203 +#: reviews/views.py:208 msgid "Openstaande besluiten eindverantwoordelijken" msgstr "Pending decisions supervisors" -#: reviews/views.py:600 +#: reviews/views.py:605 msgid "" "Deze aanvraag is al beoordeeld, dus je kan je beoordeling niet meer " "toevoegen/aanpassen" @@ -4901,8 +4915,8 @@ msgid "" "Je hebt aangegeven dat traject {} sessie's en taken bevat, maar er zijn nog " "geen sessie's aangemaakt." msgstr "" -"You have indicated that trajectory {} involves tasks and sessions, but " -"no sessions have been added yet." +"You have indicated that trajectory {} involves tasks and sessions, but no " +"sessions have been added yet." #: tasks/models.py:13 msgid "Hoe vaak wordt deze sessie uitgevoerd?" @@ -5096,15 +5110,15 @@ msgstr "" "Total duration: %(duration)s minutes, number of times to be performed: " "%(repeats)s" -#: tasks/templates/tasks/session_list.html:36 +#: tasks/templates/tasks/session_list.html:35 msgid "Nog geen sessies. Tijd om er één aan te maken!" msgstr "No sessions yet. Time to create one!" -#: tasks/templates/tasks/session_list.html:43 +#: tasks/templates/tasks/session_list.html:41 msgid "Nieuwe sessie tevoegen" msgstr "Add new session" -#: tasks/templates/tasks/session_list.html:45 +#: tasks/templates/tasks/session_list.html:43 msgid "Sessie aanmaken" msgstr "Create session" @@ -5258,165 +5272,3 @@ msgstr "Task edited" #: tasks/views/task_views.py:70 msgid "Taak verwijderd" msgstr "Task deleted" - -#~ msgid "Sessie overzicht:" -#~ msgstr "Session overview:" - -#~ msgid "Taken overzicht:" -#~ msgstr "Task overview:" - -#~ msgid "Deze sessie bestaat uit de volgende taken:" -#~ msgstr "This session consists of the following tasks:" - -#~ msgid "" -#~ "In de volgende vragen gaan we nader in op wat je in jouw onderzoek van je " -#~ "deelnemers zal verlangen. Daarbij gelden de volgende definities:" -#~ msgstr "" -#~ "The following questions probe further into the demands of your task-based " -#~ "study on your participants. The following definitions will apply:" - -#~ msgid "" -#~ "Sessie: Het geheel van de voor je onderzoek benodigde " -#~ "betrokkenheid die je op één dag van een deelnemer vraagt. Bij een " -#~ "labonderzoek is dat bijvoorbeeld alles wat er van onderzoekswege gebeurt " -#~ "vanaf het moment dat je de deelnemer ontvangt tot het moment dat je " -#~ "afscheid neemt, inclusief de benodigde pauzes. En bij een internet-" -#~ "vragenlijst is dat alles wat er van onderzoekswege gebeurt vanaf het " -#~ "welkomstscherm tot de afronding van de (reeks) vragenlijst(en), wederom " -#~ "inclusief benodigde pauzes. Bij veldwerk is dat de tijd dat je met de " -#~ "deelnemer in interactie bent op één dag." -#~ msgstr "" -#~ "Session: The entirety of the commitment which you " -#~ "require of a participant in one day. In lab-based research, for example, " -#~ "that means everything which happens as part of the research from the " -#~ "moment you welcome the participant to the moment you part company from " -#~ "them, including any necessary breaks. In an internet survey this means " -#~ "everything which happens as part of the research from the welcome screen " -#~ "to the conclusion of the (series of) survey(s), again including any " -#~ "necessary breaks. For fieldwork, it refers to the time that you interact " -#~ "with the participant on one day." - -#~ msgid "" -#~ "Taak: Een coherente verzameling handelingen die je via " -#~ "een gesproken of geschreven taak-instructie aan de deelnemer oplegt, en " -#~ "ook als zodanig als 'taak' in een artikel zou beschrijven (bijvoorbeeld: " -#~ "\"Beluister de volgende 200 zinnetjes en druk op een knop als je een fout " -#~ "ontdekt\", \"Vul persoonlijkheidsvragenlijst X in\", \"Speel 10 minuten " -#~ "met je kind zoals je dat thuis doet\", “houd 1 week een dagboek bij van " -#~ "jouw media-gebruik”, “wil je je gender identiteit beschrijven”, “maak " -#~ "foto’s van plekken in jouw leefomgeving die je bedreigend en inspirerend " -#~ "vindt”, “zoek en deel met ons 10 foto’s uit jouw prive-archief om je " -#~ "levensverhaal te kunnen vertellen”). Indien de specifieke opdracht aan de " -#~ "deelnemer per item varieert (bijvoorbeeld: \"bij een Nederlandse zin " -#~ "beoordeel je de betekenis, bij een Engelse zin de grammatica\"), beschouw " -#~ "dit dan gewoon als één taak." -#~ msgstr "" -#~ "Task: This refers to a coherent collection of actions " -#~ "which you instruct the participant to perform via a spoken or written set " -#~ "of instructions, and which would also be described as a 'task' in an " -#~ "article (e.g. \"Listen to the following 200 sentences and press a button " -#~ "when you hear a mistake\", \"Fill in personality questionnaire X\", " -#~ "\"Play with your child for 10 minutes as you would at home\"). If the " -#~ "specific task varies from item to item, with a single instruction " -#~ "covering all items (e.g., ‘for a Dutch sentence judge the meaning, for an " -#~ "English sentence judge the grammar’), this should be treated as one " -#~ "task. " - -#~ msgid "" -#~ "Het reglement van de Algemene Kamer (AK) of dat van de Linguïstiek Kamer " -#~ "(LK)." -#~ msgstr "" -#~ "The regulations of the General Chamber or " -#~ "those of the Linguistics Chamber." - -#~ msgid "Andere betrokkenen" -#~ msgstr "Other people involved" - -#~ msgid "Maak een nieuwe sessie aan >>" -#~ msgstr "Create a new session >>" - -#~ msgid "Maak een nieuwe taak aan >>" -#~ msgstr "Create a new task >>" - -#~ msgid "" -#~ "Voor elke sessie stellen we in de komende schermen steeds dezelfde vragen." -#~ msgstr "" -#~ "For each session we will ask the same questions in the following pages." - -#~ msgid "Takenonderzoek met de volgende opbouw:" -#~ msgstr "Task-based research structured as follows:" - -#~ msgid "Herhalingen" -#~ msgstr "Repeats" - -#~ msgid "Terug naar begin aanvraag" -#~ msgstr "Return to start of application" - -#~ msgid "Terug naar begin traject" -#~ msgstr "Back to the beginning of the trajectory" - -#~ msgid "Terug naar begin sessie" -#~ msgstr "Back to the beginning of the session" - -#~ msgid "Opslaan en volgende stap >>" -#~ msgstr "Save and go to next step >>" - -#~ msgid "Het takenonderzoek (traject {})" -#~ msgstr "Task-based research: trajectory {}" - -#~ msgid "Hoeveel sessies met taakonderzoek zullen de deelnemers doorlopen?" -#~ msgstr "How many sessions of tasks will the participants take part in?" - -#~ msgid "" -#~ "Wanneer je bijvoorbeeld eerst de deelnemer een taak/aantal taken laat " -#~ "doen tijdens een eerste bezoek aan het lab en je laat de deelnemer nog " -#~ "een keer terugkomen om dezelfde taak/taken of andere taak/taken te doen, " -#~ "dan spreken we van twee sessies. Wanneer je meerdere taken afneemt op " -#~ "dezelfde dag, met pauzes daartussen, dan geldt dat toch als één sessie." -#~ msgstr "" -#~ "When the participant is asked to perform a task / multiple tasks during a " -#~ "first visit to the lab and to return on a later day to perform the same " -#~ "task(s) or a different task / multiple different tasks, we consider the " -#~ "experiment to consist of two sessions. If multiple tasks are executed on " -#~ "the same day, with breaks in between, this is still considered to be one " -#~ "session." - -#, python-format -#~ msgid "%(sessions_number)s sessie(s) voor studie %(title)s aangemaakt" -#~ msgstr "%(sessions_number)s sessions for application %(title)s created" - -#~ msgid "Is deze sessie een kopie van een voorgaande sessie?" -#~ msgstr "Is this session a copy of a previous session?" - -#~ msgid "Na het kopiëren zijn alle velden bewerkbaar." -#~ msgstr "All fields can be edited after copying." - -#~ msgid "Te kopiëren sessie" -#~ msgstr "Session to be copied" - -#~ msgid "" -#~ "Hoeveel taken worden er binnen deze sessie bij de deelnemer afgenomen?" -#~ msgstr "" -#~ "How many tasks will each participant have to carry out in this session?" - -#~ msgid "" -#~ "Wanneer je bijvoorbeeld eerst de deelnemer observeert en de deelnemer " -#~ "vervolgens een vragenlijst afneemt, dan vul je hierboven \"2\" in. " -#~ "Electrodes plakken, sessie-debriefing en kort (< 3 minuten) exit-" -#~ "interview gelden niet als een taak." -#~ msgstr "" -#~ "For example, if you first observe the participant and then require them " -#~ "to complete a questionnaire, please fill in \"2\" above. Putting on " -#~ "electrodes, session debriefing and a short (<3 minute) exit interview are " -#~ "not counted as tasks." - -#, python-format -#~ msgid "%(tasks_number)s ta(a)k(en) aangemaakt" -#~ msgstr "%(tasks_number)s task(s) created" - -#~ msgid "Taken toevoegen beëindigd" -#~ msgstr "Finished adding tasks" diff --git a/proposals/templates/proposals/proposal_confirmation.html b/proposals/templates/proposals/proposal_confirmation.html index 915614cd8..7637fd475 100644 --- a/proposals/templates/proposals/proposal_confirmation.html +++ b/proposals/templates/proposals/proposal_confirmation.html @@ -33,10 +33,10 @@

{% trans "Bevestigingsbrief versturen" %}

{{ form.as_table }}
+ {% trans "Terug naar de vorige pagina" %} - {% trans "Terug naar de vorige pagina" %} diff --git a/proposals/utils/pdf_diff_logic.py b/proposals/utils/pdf_diff_logic.py index 8367c98b3..39a04534e 100644 --- a/proposals/utils/pdf_diff_logic.py +++ b/proposals/utils/pdf_diff_logic.py @@ -275,7 +275,7 @@ def get_object_list(self, object): def handle_field_file(self, field_file): if field_file: output = format_html( - "{}", + '{}', f"{settings.BASE_URL}{field_file.url}", _("Download"), ) diff --git a/proposals/views/proposal_views.py b/proposals/views/proposal_views.py index f37ad2dbf..141e94095 100644 --- a/proposals/views/proposal_views.py +++ b/proposals/views/proposal_views.py @@ -401,6 +401,16 @@ class ProposalUpdateDataManagement(GroupRequiredMixin, generic.UpdateView): form_class = ProposalUpdateDataManagementForm group_required = settings.GROUP_SECRETARY + def form_valid(self, form): + ret = super().form_valid(form) + # Always regenerate the PDF after updating the DMP + # This is necessary, as the canonical PDF protection might already + # have kicked in if the secretary changes the documents later than + # we initially expected. + self.object.generate_pdf(force_overwrite=True) + + return ret + def get_success_url(self): """Continue to the URL specified in the 'next' POST parameter""" return reverse("reviews:detail", args=[self.object.latest_review().pk]) @@ -416,6 +426,16 @@ class ProposalUpdateDateStart(GroupRequiredMixin, generic.UpdateView): form_class = ProposalUpdateDateStartForm group_required = settings.GROUP_SECRETARY + def form_valid(self, form): + ret = super().form_valid(form) + # Always regenerate the PDF after updating the DMP + # This is necessary, as the canonical PDF protection might already + # have kicked in if the secretary changes the documents later than + # we initially expected. + self.object.generate_pdf(force_overwrite=True) + + return ret + def get_success_url(self): """Continue to the URL specified in the 'next' POST parameter""" return reverse("reviews:detail", args=[self.object.latest_review().pk]) diff --git a/requirements.in b/requirements.in index 72c5bbfd2..8343939d2 100644 --- a/requirements.in +++ b/requirements.in @@ -26,4 +26,5 @@ python-magic pdftotext bpython black -djlint \ No newline at end of file +djlint +sentry-sdk[django] \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index a3d537aa8..0dad18191 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --resolver=backtracking +# pip-compile -U # -e git+https://github.com/UiL-OTS-labs/python-docx2txt#egg=docx2txt # via -r requirements.in @@ -12,7 +12,7 @@ alabaster==0.7.16 # via sphinx arabic-reshaper==3.0.0 # via xhtml2pdf -asgiref==3.7.2 +asgiref==3.8.1 # via django asn1crypto==1.5.1 # via @@ -21,16 +21,18 @@ asn1crypto==1.5.1 # pyhanko-certvalidator babel==2.14.0 # via sphinx -black==23.12.1 +black==24.3.0 # via -r requirements.in blessed==1.20.0 # via curtsies bpython==0.24 # via -r requirements.in -cdh-django-core @ git+https://github.com/CentreForDigitalHumanities/django-shared-core.git@v3.1.0 +cdh-django-core[federated-auth] @ git+https://github.com/CentreForDigitalHumanities/django-shared-core.git@v3.1.0 # via -r requirements.in -certifi==2023.11.17 - # via requests +certifi==2024.2.2 + # via + # requests + # sentry-sdk cffi==1.16.0 # via cryptography chardet==5.2.0 @@ -46,13 +48,13 @@ closure==20191111 # via uil-django-core colorama==0.4.6 # via djlint -cryptography==41.0.7 +cryptography==42.0.5 # via # pyhanko # pyhanko-certvalidator # pyopenssl # pysaml2 -cssbeautifier==1.14.11 +cssbeautifier==1.15.1 # via djlint cssselect2==0.7.0 # via svglib @@ -68,7 +70,7 @@ defusedxml==0.7.1 # pysaml2 deprecated==1.2.14 # via cdh-django-core -django==3.2.23 +django==3.2.25 # via # -r requirements.in # cdh-django-core @@ -81,13 +83,14 @@ django==3.2.23 # django-user-agents # djangorestframework # djangosaml2 + # sentry-sdk # sphinxcontrib-django # uil-django-core -django-auth-ldap==4.6.0 +django-auth-ldap==4.7.0 # via -r requirements.in django-braces==1.15.0 # via -r requirements.in -django-debug-toolbar==4.2.0 +django-debug-toolbar==4.3.0 # via -r requirements.in django-extensions==3.2.3 # via -r requirements.in @@ -99,7 +102,7 @@ django-simple-menu==2.1.3 # via -r requirements.in django-user-agents==0.4.0 # via -r requirements.in -djangorestframework==3.14.0 +djangorestframework==3.15.1 # via # -r requirements.in # uil-django-core @@ -113,16 +116,12 @@ docutils==0.20.1 # via # sphinx # sphinx-rtd-theme -editorconfig==0.12.3 +editorconfig==0.12.4 # via # cssbeautifier # jsbeautifier -elementpath==4.1.5 +elementpath==4.4.0 # via xmlschema -freetype-py==2.3.0 - # via - # reportlab - # rlpycairo greenlet==3.0.3 # via bpython html-tag-names==0.1.2 @@ -137,21 +136,21 @@ idna==3.6 # via requests imagesize==1.4.1 # via sphinx -importlib-metadata==7.0.1 +importlib-metadata==7.1.0 # via sphinx jinja2==3.1.3 # via sphinx -jsbeautifier==1.14.11 +jsbeautifier==1.15.1 # via # cssbeautifier # djlint -json5==0.9.14 +json5==0.9.24 # via djlint lesscpy==0.15.1 # via uil-django-core -lxml==5.1.0 +lxml==5.2.0 # via svglib -markupsafe==2.1.3 +markupsafe==2.1.5 # via jinja2 mypy-extensions==1.0.0 # via black @@ -159,7 +158,7 @@ mysqlclient==1.4.6 # via -r requirements.in oscrypto==1.3.0 # via pyhanko-certvalidator -packaging==23.2 +packaging==24.0 # via # black # sphinx @@ -171,12 +170,12 @@ pbr==6.0.0 # via sphinxcontrib-apidoc pdftotext==2.2.2 # via -r requirements.in -pillow==10.2.0 +pillow==10.3.0 # via # -r requirements.in # reportlab # xhtml2pdf -platformdirs==4.1.0 +platformdirs==4.2.0 # via black ply==3.11 # via lesscpy @@ -184,22 +183,20 @@ pprintpp==0.4.0 # via sphinxcontrib-django pscript==0.7.7 # via vbuild -pyasn1==0.5.1 +pyasn1==0.6.0 # via # pyasn1-modules # python-ldap -pyasn1-modules==0.3.0 +pyasn1-modules==0.4.0 # via python-ldap -pycairo==1.25.1 - # via rlpycairo -pycparser==2.21 +pycparser==2.22 # via cffi pygments==2.17.2 # via # -r requirements.in # bpython # sphinx -pyhanko==0.21.0 +pyhanko==0.23.2 # via xhtml2pdf pyhanko-certvalidator==0.26.3 # via @@ -207,28 +204,27 @@ pyhanko-certvalidator==0.26.3 # xhtml2pdf pyjwt==2.8.0 # via uil-django-core -pyopenssl==23.3.0 +pyopenssl==24.1.0 # via pysaml2 -pypdf==3.17.4 +pypdf==4.1.0 # via xhtml2pdf pypng==0.20220715.0 # via qrcode -pysaml2==7.4.2 +pysaml2==7.5.0 # via djangosaml2 pyscss==1.4.0 # via uil-django-core python-bidi==0.4.2 # via xhtml2pdf -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 # via pysaml2 python-ldap==3.4.4 # via django-auth-ldap python-magic==0.4.27 # via -r requirements.in -pytz==2023.3.post1 +pytz==2024.1 # via # django - # djangorestframework # pysaml2 pyxdg==0.28 # via bpython @@ -240,7 +236,7 @@ qrcode==7.4.2 # via pyhanko regex==2023.12.25 # via djlint -reportlab[pycairo]==4.0.9 +reportlab==4.0.9 # via # svglib # xhtml2pdf @@ -253,8 +249,8 @@ requests==2.31.0 # pysaml2 # sphinx # uil-django-core -rlpycairo==0.3.0 - # via reportlab +sentry-sdk[django]==1.44.0 + # via -r requirements.in six==1.16.0 # via # blessed @@ -271,32 +267,27 @@ sphinx==7.2.6 # -r requirements.in # sphinx-rtd-theme # sphinxcontrib-apidoc - # sphinxcontrib-applehelp - # sphinxcontrib-devhelp # sphinxcontrib-django - # sphinxcontrib-htmlhelp # sphinxcontrib-jquery - # sphinxcontrib-qthelp - # sphinxcontrib-serializinghtml sphinx-rtd-theme==2.0.0 # via -r requirements.in -sphinxcontrib-apidoc==0.4.0 +sphinxcontrib-apidoc==0.5.0 # via -r requirements.in -sphinxcontrib-applehelp==1.0.7 +sphinxcontrib-applehelp==1.0.8 # via sphinx -sphinxcontrib-devhelp==1.0.5 +sphinxcontrib-devhelp==1.0.6 # via sphinx sphinxcontrib-django==2.5 # via -r requirements.in -sphinxcontrib-htmlhelp==2.0.4 +sphinxcontrib-htmlhelp==2.0.5 # via sphinx sphinxcontrib-jquery==4.1 # via sphinx-rtd-theme sphinxcontrib-jsmath==1.0.1 # via sphinx -sphinxcontrib-qthelp==1.0.6 +sphinxcontrib-qthelp==1.0.7 # via sphinx -sphinxcontrib-serializinghtml==1.1.9 +sphinxcontrib-serializinghtml==1.1.10 # via sphinx sqlparse==0.4.4 # via @@ -312,9 +303,9 @@ tomli==2.0.1 # via # black # djlint -tqdm==4.66.1 +tqdm==4.66.2 # via djlint -typing-extensions==4.9.0 +typing-extensions==4.10.0 # via # asgiref # black @@ -327,8 +318,10 @@ ua-parser==0.18.0 # via user-agents uritools==4.0.2 # via pyhanko-certvalidator -urllib3==2.1.0 - # via requests +urllib3==2.2.1 + # via + # requests + # sentry-sdk user-agents==2.2.0 # via django-user-agents vbuild==0.8.2 @@ -342,9 +335,9 @@ webencodings==0.5.1 # tinycss2 wrapt==1.16.0 # via deprecated -xhtml2pdf==0.2.13 +xhtml2pdf==0.2.15 # via -r requirements.in -xmlschema==3.0.1 +xmlschema==2.5.1 # via pysaml2 -zipp==3.17.0 +zipp==3.18.1 # via importlib-metadata diff --git a/reviews/api/views.py b/reviews/api/views.py index 420f9a212..7a3b48d00 100644 --- a/reviews/api/views.py +++ b/reviews/api/views.py @@ -98,6 +98,7 @@ def get_queryset_for_committee(self): reviewer=self.request.user, review__proposal__reviewing_committee=self.committee, review__continuation__lt=Review.Continuations.DISCONTINUED, + review__is_committee_review=True, ) for obj in objects: @@ -121,6 +122,7 @@ def get_queryset_for_secretary(self): reviewer__groups__name=settings.GROUP_SECRETARY, review__proposal__reviewing_committee=self.committee, review__continuation__lt=Review.Continuations.DISCONTINUED, + review__is_committee_review=True, ) for obj in objects: @@ -171,6 +173,7 @@ def get_queryset_for_committee(self): go="", review__proposal__reviewing_committee=self.committee, review__continuation__lt=Review.Continuations.DISCONTINUED, + review__is_committee_review=True, ) for obj in objects: @@ -195,6 +198,7 @@ def get_queryset_for_secretary(self): go="", review__proposal__reviewing_committee=self.committee, review__continuation__lt=Review.Continuations.DISCONTINUED, + review__is_committee_review=True, ) for obj in objects: @@ -238,7 +242,8 @@ def get_queryset(self): go="", review__proposal__reviewing_committee=self.committee, review__continuation__lt=Review.Continuations.DISCONTINUED, - ).exclude(review__stage=Review.Stages.SUPERVISOR) + review__is_committee_review=True, + ) for obj in objects: proposal = obj.review.proposal @@ -288,7 +293,7 @@ class OpenSupervisorDecisionApiView(BaseDecisionApiView): default_sort = ("proposal.date_submitted_supervisor", "desc") def get_queryset(self): - """Returns all proposals that still need to be reviewed by the secretary""" + """Returns all proposals that still need to be reviewed by the supervisor""" objects = Decision.objects.filter( go="", review__stage=Review.Stages.SUPERVISOR, @@ -379,6 +384,7 @@ def get_queryset(self): objects = ( Review.objects.filter( stage__gte=Review.Stages.CLOSING, + is_committee_review=True, proposal__status__gte=Proposal.Statuses.SUBMITTED, proposal__date_confirmed=None, proposal__reviewing_committee=self.committee, @@ -440,6 +446,7 @@ def get_queryset(self): proposal__reviewing_committee=self.committee, stage=Review.Stages.CLOSED, continuation=Review.Continuations.REVISION, + is_committee_review=True, ) # 3. Finally, exclude candidates whose proposal # has a child with a revision review @@ -537,6 +544,7 @@ def get_queryset(self): stage__gte=Review.Stages.ASSIGNMENT, proposal__status__gte=Proposal.Statuses.SUBMITTED, proposal__reviewing_committee=self.committee, + is_committee_review=True, ) .select_related( "proposal", diff --git a/reviews/models.py b/reviews/models.py index 24f5d8334..a86803074 100644 --- a/reviews/models.py +++ b/reviews/models.py @@ -80,6 +80,7 @@ def update_go(self, last_decision=None): start_assignment_phase(self.proposal) self.stage = self.Stages.CLOSED + self.save() # On NO-GO, reset the Proposal status else: # See comment above @@ -177,6 +178,17 @@ def save(self, *args, **kwargs): super(Decision, self).save(*args, **kwargs) self.review.update_go(last_decision=self) + def is_final_decision(self): + """ + Checks if this is the final review in a reviewing round. + + Will always return True on Supervisor reviews. + """ + open_decisions = self.review.decision_set.filter( + go="", + ) + return open_decisions.count() < 2 + def __str__(self): return "Decision #%d by %s on %s: %s" % ( self.pk, diff --git a/reviews/templates/reviews/decision_form.html b/reviews/templates/reviews/decision_form.html index 0f0d8b9ff..8a1c5d85b 100644 --- a/reviews/templates/reviews/decision_form.html +++ b/reviews/templates/reviews/decision_form.html @@ -24,6 +24,13 @@

{% trans "Aanvraag beoordelen" %}

De aanvraag is hier in te zien (downloadt als PDF). {% endblocktrans %}

+ {% if decision.is_final_decision %} +
+ {% blocktrans trimmed %} + Attentie: jij bent de laatste beoordelaar van deze aanvraag. Daarom kun je na het versturen je oordeel en commentaar niet meer bewerken. Controleer je antwoorden goed. + {% endblocktrans %} +
+ {% endif %} {% else %}

{% blocktrans trimmed with title=proposal.title %} diff --git a/reviews/templates/reviews/review_assign_form.html b/reviews/templates/reviews/review_assign_form.html index e639c5d94..3db20b2ba 100644 --- a/reviews/templates/reviews/review_assign_form.html +++ b/reviews/templates/reviews/review_assign_form.html @@ -31,7 +31,7 @@

{% trans "Commissieleden aanstellen" %}

{% blocktrans trimmed with title=review.proposal.title %}

Kies hier de geschikte route en commissieleden voor de aanvraag {{ title }}. - klik hier voor een overzicht van de werkverdeling van deze commissie. + Klik hier voor een overzicht van de werkverdeling van deze commissie.

{% endblocktrans %}
{% trans "Sessie verwijderen" %} Weet u zeker dat u deze sessie {{ session.order }} in de aanvraag {{ session.study.proposal.title }} wilt verwijderen? {% endblocktrans %}

- + {% trans "Annuleren" %}
diff --git a/tasks/templates/tasks/task_confirm_delete.html b/tasks/templates/tasks/task_confirm_delete.html index 8292de4f4..63bfe6d3b 100644 --- a/tasks/templates/tasks/task_confirm_delete.html +++ b/tasks/templates/tasks/task_confirm_delete.html @@ -17,7 +17,9 @@

{% trans "Taak verwijderen" %}

Weet u zeker dat u de taak {{ task.name }} uit sessie {{ task.session.order }} in de aanvraag {{ task.session.study.proposal.title }} wilt verwijderen? {% endblocktrans %}

- + {% trans "Annuleren" %}