diff --git a/data_registry/admin.py b/data_registry/admin.py index 93a74eed..919c53fb 100644 --- a/data_registry/admin.py +++ b/data_registry/admin.py @@ -197,6 +197,9 @@ class CollectionAdmin(CascadeTaskMixin, TabbedDjangoJqueryTranslationAdmin): "summary_es", "summary_ru", "last_reviewed", + "no_data_rationale_en", + "no_data_rationale_es", + "no_data_rationale_ru", ), }, ), diff --git a/data_registry/forms.py b/data_registry/forms.py index 5e181331..b1e4daa4 100644 --- a/data_registry/forms.py +++ b/data_registry/forms.py @@ -32,6 +32,7 @@ class Meta: "description_long": MarkdownWidget(attrs={"rows": 1}), "additional_data": MarkdownWidget(attrs={"rows": 1}), "summary": MarkdownWidget(attrs={"rows": 1}), + "no_data_rationale": MarkdownWidget(attrs={"rows": 1}), } source_id = forms.ChoiceField( diff --git a/data_registry/locale/en/LC_MESSAGES/django.po b/data_registry/locale/en/LC_MESSAGES/django.po index 532825ad..edd20fa3 100644 --- a/data_registry/locale/en/LC_MESSAGES/django.po +++ b/data_registry/locale/en/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-29 14:44-0300\n" +"POT-Creation-Date: 2025-06-05 11:03-0300\n" "PO-Revision-Date: 2021-08-04 17:44+0000\n" "Last-Translator: Yohanna Lisnichuk , 2025\n" "Language-Team: English (https://app.transifex.com/open-contracting-partnership-1/teams/123427/en/)\n" @@ -23,14 +23,14 @@ msgstr "" "Language: en\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: data_registry/admin.py:222 +#: data_registry/admin.py:227 #, python-format msgid "Created %(count)d job." msgid_plural "Created %(count)d jobs." msgstr[0] "Created %(count)d job." msgstr[1] "Created %(count)d jobs." -#: data_registry/admin.py:227 +#: data_registry/admin.py:232 #, python-format msgid "" "%(count)d publication either has an incomplete job or will be scheduled " @@ -45,71 +45,71 @@ msgstr[1] "" "%(count)d publications either have incomplete jobs or will be scheduled " "shortly." -#: data_registry/models.py:153 +#: data_registry/models.py:156 msgid "Africa and Middle East" msgstr "Africa and Middle East" -#: data_registry/models.py:155 +#: data_registry/models.py:158 msgid "Asia" msgstr "Asia" -#: data_registry/models.py:157 +#: data_registry/models.py:160 msgid "Eastern Europe & Central Asia" msgstr "Eastern Europe & Central Asia" -#: data_registry/models.py:159 +#: data_registry/models.py:162 msgid "Europe" msgstr "Europe" -#: data_registry/models.py:161 +#: data_registry/models.py:164 msgid "Latin America & Caribbean" msgstr "Latin America & Caribbean" -#: data_registry/models.py:163 +#: data_registry/models.py:166 msgid "North America" msgstr "North America" -#: data_registry/models.py:165 +#: data_registry/models.py:168 msgid "Oceania" msgstr "Oceania" -#: data_registry/models.py:169 data_registry/models.py:189 +#: data_registry/models.py:172 data_registry/models.py:192 msgid "Monthly" msgstr "Monthly" -#: data_registry/models.py:171 data_registry/models.py:193 +#: data_registry/models.py:174 data_registry/models.py:196 msgid "Every 6 months" msgstr "Every 6 months" -#: data_registry/models.py:173 data_registry/models.py:195 +#: data_registry/models.py:176 data_registry/models.py:198 msgid "Annually" msgstr "Annually" -#: data_registry/models.py:175 +#: data_registry/models.py:178 msgid "This dataset is no longer updated by the publisher" msgstr "This dataset is no longer updated by the publisher" -#: data_registry/models.py:179 +#: data_registry/models.py:182 msgid "Unknown" msgstr "Unknown" -#: data_registry/models.py:181 +#: data_registry/models.py:184 msgid "Real time" msgstr "Real time" -#: data_registry/models.py:183 +#: data_registry/models.py:186 msgid "Hourly" msgstr "Hourly" -#: data_registry/models.py:185 +#: data_registry/models.py:188 msgid "Daily" msgstr "Daily" -#: data_registry/models.py:187 +#: data_registry/models.py:190 msgid "Weekly" msgstr "Weekly" -#: data_registry/models.py:191 +#: data_registry/models.py:194 msgid "Every 3 months" msgstr "Every 3 months" @@ -170,26 +170,26 @@ msgstr "License:" msgid "Publication policy:" msgstr "Publication policy:" -#: data_registry/templates/detail.html:160 +#: data_registry/templates/detail.html:159 #: data_registry/templates/search.html:162 msgid "Last retrieved:" msgstr "Last retrieved:" -#: data_registry/templates/detail.html:164 +#: data_registry/templates/detail.html:163 #: data_registry/templates/search.html:166 #, python-format msgid "retrieved %(retrieval_frequency)s" msgstr "retrieved %(retrieval_frequency)s" -#: data_registry/templates/detail.html:167 +#: data_registry/templates/detail.html:166 msgid "Retrieved from:" msgstr "Retrieved from:" -#: data_registry/templates/detail.html:175 +#: data_registry/templates/detail.html:174 msgid "Data available" msgstr "Data available" -#: data_registry/templates/detail.html:179 +#: data_registry/templates/detail.html:178 msgid "" "An individual contracting process has several different stages: tendering, " "awarding, contracting and implementation. You can dive into the details of " @@ -201,115 +201,119 @@ msgstr "" "href=\"https://standard.open-contracting.org/latest/en/primer/how/\" " "target=\"_blank\">this tutorial." -#: data_registry/templates/detail.html:186 +#: data_registry/templates/detail.html:185 msgid "Parties" msgstr "Parties" -#: data_registry/templates/detail.html:188 +#: data_registry/templates/detail.html:187 msgid "Count of parties:" msgstr "Count of parties:" -#: data_registry/templates/detail.html:193 +#: data_registry/templates/detail.html:192 msgid "Plannings" msgstr "Planning" -#: data_registry/templates/detail.html:195 +#: data_registry/templates/detail.html:194 msgid "Count of planning activities:" msgstr "Count of planning activities:" -#: data_registry/templates/detail.html:200 +#: data_registry/templates/detail.html:199 msgid "Tenders" msgstr "Tenders" -#: data_registry/templates/detail.html:202 +#: data_registry/templates/detail.html:201 msgid "Count of tenders:" msgstr "Count of tenders:" -#: data_registry/templates/detail.html:204 +#: data_registry/templates/detail.html:203 msgid "Count of tenderers:" msgstr "Count of tenderers:" -#: data_registry/templates/detail.html:206 +#: data_registry/templates/detail.html:205 msgid "Count of tender items:" msgstr "Count of tender items:" -#: data_registry/templates/detail.html:211 +#: data_registry/templates/detail.html:210 msgid "Awards" msgstr "Awards" -#: data_registry/templates/detail.html:213 +#: data_registry/templates/detail.html:212 msgid "Count of awards:" msgstr "Count of awards:" -#: data_registry/templates/detail.html:215 +#: data_registry/templates/detail.html:214 msgid "Count of award suppliers:" msgstr "Count of suppliers:" -#: data_registry/templates/detail.html:217 +#: data_registry/templates/detail.html:216 msgid "Count of award items:" msgstr "Count of award items:" -#: data_registry/templates/detail.html:222 +#: data_registry/templates/detail.html:221 msgid "Contracts" msgstr "Contracts" -#: data_registry/templates/detail.html:224 +#: data_registry/templates/detail.html:223 msgid "Count of contracts:" msgstr "Count of contracts:" -#: data_registry/templates/detail.html:226 +#: data_registry/templates/detail.html:225 msgid "Count of contract items:" msgstr "Count of contract items:" -#: data_registry/templates/detail.html:228 +#: data_registry/templates/detail.html:227 msgid "Count of contract transactions:" msgstr "Count of transactions:" -#: data_registry/templates/detail.html:233 +#: data_registry/templates/detail.html:232 msgid "Documents" msgstr "Documents" -#: data_registry/templates/detail.html:235 +#: data_registry/templates/detail.html:234 msgid "Count of documents:" msgstr "Count of documents:" -#: data_registry/templates/detail.html:240 +#: data_registry/templates/detail.html:239 msgid "Milestones" msgstr "Milestones" -#: data_registry/templates/detail.html:242 +#: data_registry/templates/detail.html:241 msgid "Count of milestones:" msgstr "Count of milestones:" -#: data_registry/templates/detail.html:247 +#: data_registry/templates/detail.html:246 msgid "Amendments" msgstr "Amendments" -#: data_registry/templates/detail.html:249 +#: data_registry/templates/detail.html:248 msgid "Count of amendments:" msgstr "Count of amendments:" -#: data_registry/templates/detail.html:256 +#: data_registry/templates/detail.html:255 msgid "This dataset has not yet been retrieved." msgstr "This dataset has not yet been retrieved." -#: data_registry/templates/detail.html:276 +#: data_registry/templates/detail.html:275 msgid "Data quality" msgstr "Data quality" -#: data_registry/templates/detail.html:290 +#: data_registry/templates/detail.html:289 msgid "We have not yet prepared a data quality summary for this dataset." msgstr "We have not yet prepared a data quality summary for this dataset." -#: data_registry/templates/detail.html:296 +#: data_registry/templates/detail.html:295 msgid "Last reviewed:" msgstr "Last reviewed:" #: data_registry/templates/detail.html:306 +msgid "Data not available" +msgstr "Data not available" + +#: data_registry/templates/detail.html:318 msgid "Access data" msgstr "Access data" -#: data_registry/templates/detail.html:308 +#: data_registry/templates/detail.html:320 msgid "" "This OCDS dataset is available for download in JSON, Excel or CSV format. " "You can download the data for contracting processes in a specific year or " @@ -319,7 +323,7 @@ msgstr "" "You can download the data for contracting processes in a specific year or " "for all time." -#: data_registry/templates/detail.html:313 +#: data_registry/templates/detail.html:325 msgid "" "Each contracting process is represented as one line of JSON text in the " ".jsonl file." @@ -327,7 +331,7 @@ msgstr "" "Each contracting process is represented as one line of JSON text in the " ".jsonl file." -#: data_registry/templates/detail.html:318 +#: data_registry/templates/detail.html:330 msgid "" "The .jsonl file is compressed using Gzip. Windows users need 7-Zip, WinZip to decompress " "the .gz file." -#: data_registry/templates/detail.html:327 +#: data_registry/templates/detail.html:339 msgid "" "Each contracting process is represented as one row in the main " "sheet. Other sheets link to it via the _link_main column." @@ -349,7 +353,7 @@ msgstr "" "Each contracting process is represented as one row in the main " "sheet. Other sheets link to it via the _link_main column." -#: data_registry/templates/detail.html:332 +#: data_registry/templates/detail.html:344 msgid "" "Excel files can have at most . If a year is missing, it had too many rows. Download the CSV " "files, instead." -#: data_registry/templates/detail.html:341 +#: data_registry/templates/detail.html:353 msgid "" "Each contracting process is represented as one row in the " "main.csv file. Other files link to it via the " @@ -373,7 +377,7 @@ msgstr "" "main.csv file. Other files link to it via the " "_link_main column." -#: data_registry/templates/detail.html:346 +#: data_registry/templates/detail.html:358 msgid "" "The .csv files are archived using tar and compressed using " "Gzip. Windows users need WinRAR or WinZip to decompress the .tar.gz file." -#: data_registry/templates/detail.html:365 +#: data_registry/templates/detail.html:378 msgid "Have questions, feedback on this dataset or content on this page?" msgstr "" "Do you have any questions or feedback on this dataset or any other content " "on this page?" -#: data_registry/templates/detail.html:370 +#: data_registry/templates/detail.html:383 msgid "Contact Data Support Team" msgstr "Contact Data Support Team" diff --git a/data_registry/locale/en_US/LC_MESSAGES/django.po b/data_registry/locale/en_US/LC_MESSAGES/django.po index c37434b2..d711a36f 100644 --- a/data_registry/locale/en_US/LC_MESSAGES/django.po +++ b/data_registry/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-29 14:44-0300\n" +"POT-Creation-Date: 2025-06-05 11:03-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,14 +17,14 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: data_registry/admin.py:222 +#: data_registry/admin.py:227 #, python-format msgid "Created %(count)d job." msgid_plural "Created %(count)d jobs." msgstr[0] "" msgstr[1] "" -#: data_registry/admin.py:227 +#: data_registry/admin.py:232 #, python-format msgid "" "%(count)d publication either has an incomplete job or will be scheduled " @@ -35,71 +35,71 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: data_registry/models.py:153 +#: data_registry/models.py:156 msgid "Africa and Middle East" msgstr "" -#: data_registry/models.py:155 +#: data_registry/models.py:158 msgid "Asia" msgstr "" -#: data_registry/models.py:157 +#: data_registry/models.py:160 msgid "Eastern Europe & Central Asia" msgstr "" -#: data_registry/models.py:159 +#: data_registry/models.py:162 msgid "Europe" msgstr "" -#: data_registry/models.py:161 +#: data_registry/models.py:164 msgid "Latin America & Caribbean" msgstr "" -#: data_registry/models.py:163 +#: data_registry/models.py:166 msgid "North America" msgstr "" -#: data_registry/models.py:165 +#: data_registry/models.py:168 msgid "Oceania" msgstr "" -#: data_registry/models.py:169 data_registry/models.py:189 +#: data_registry/models.py:172 data_registry/models.py:192 msgid "Monthly" msgstr "" -#: data_registry/models.py:171 data_registry/models.py:193 +#: data_registry/models.py:174 data_registry/models.py:196 msgid "Every 6 months" msgstr "" -#: data_registry/models.py:173 data_registry/models.py:195 +#: data_registry/models.py:176 data_registry/models.py:198 msgid "Annually" msgstr "" -#: data_registry/models.py:175 +#: data_registry/models.py:178 msgid "This dataset is no longer updated by the publisher" msgstr "" -#: data_registry/models.py:179 +#: data_registry/models.py:182 msgid "Unknown" msgstr "" -#: data_registry/models.py:181 +#: data_registry/models.py:184 msgid "Real time" msgstr "" -#: data_registry/models.py:183 +#: data_registry/models.py:186 msgid "Hourly" msgstr "" -#: data_registry/models.py:185 +#: data_registry/models.py:188 msgid "Daily" msgstr "" -#: data_registry/models.py:187 +#: data_registry/models.py:190 msgid "Weekly" msgstr "" -#: data_registry/models.py:191 +#: data_registry/models.py:194 msgid "Every 3 months" msgstr "" @@ -158,26 +158,26 @@ msgstr "" msgid "Publication policy:" msgstr "" -#: data_registry/templates/detail.html:160 +#: data_registry/templates/detail.html:159 #: data_registry/templates/search.html:162 msgid "Last retrieved:" msgstr "" -#: data_registry/templates/detail.html:164 +#: data_registry/templates/detail.html:163 #: data_registry/templates/search.html:166 #, python-format msgid "retrieved %(retrieval_frequency)s" msgstr "" -#: data_registry/templates/detail.html:167 +#: data_registry/templates/detail.html:166 msgid "Retrieved from:" msgstr "" -#: data_registry/templates/detail.html:175 +#: data_registry/templates/detail.html:174 msgid "Data available" msgstr "" -#: data_registry/templates/detail.html:179 +#: data_registry/templates/detail.html:178 msgid "" "An individual contracting process has several different stages: tendering, " "awarding, contracting and implementation. You can dive into the details of " @@ -185,128 +185,132 @@ msgid "" "org/latest/en/primer/how/\" target=\"_blank\">tutorial." msgstr "" -#: data_registry/templates/detail.html:186 +#: data_registry/templates/detail.html:185 msgid "Parties" msgstr "" -#: data_registry/templates/detail.html:188 +#: data_registry/templates/detail.html:187 msgid "Count of parties:" msgstr "" -#: data_registry/templates/detail.html:193 +#: data_registry/templates/detail.html:192 msgid "Plannings" msgstr "" -#: data_registry/templates/detail.html:195 +#: data_registry/templates/detail.html:194 msgid "Count of planning activities:" msgstr "" -#: data_registry/templates/detail.html:200 +#: data_registry/templates/detail.html:199 msgid "Tenders" msgstr "" -#: data_registry/templates/detail.html:202 +#: data_registry/templates/detail.html:201 msgid "Count of tenders:" msgstr "" -#: data_registry/templates/detail.html:204 +#: data_registry/templates/detail.html:203 msgid "Count of tenderers:" msgstr "" -#: data_registry/templates/detail.html:206 +#: data_registry/templates/detail.html:205 msgid "Count of tender items:" msgstr "" -#: data_registry/templates/detail.html:211 +#: data_registry/templates/detail.html:210 msgid "Awards" msgstr "" -#: data_registry/templates/detail.html:213 +#: data_registry/templates/detail.html:212 msgid "Count of awards:" msgstr "" -#: data_registry/templates/detail.html:215 +#: data_registry/templates/detail.html:214 msgid "Count of award suppliers:" msgstr "" -#: data_registry/templates/detail.html:217 +#: data_registry/templates/detail.html:216 msgid "Count of award items:" msgstr "" -#: data_registry/templates/detail.html:222 +#: data_registry/templates/detail.html:221 msgid "Contracts" msgstr "" -#: data_registry/templates/detail.html:224 +#: data_registry/templates/detail.html:223 msgid "Count of contracts:" msgstr "" -#: data_registry/templates/detail.html:226 +#: data_registry/templates/detail.html:225 msgid "Count of contract items:" msgstr "" -#: data_registry/templates/detail.html:228 +#: data_registry/templates/detail.html:227 msgid "Count of contract transactions:" msgstr "" -#: data_registry/templates/detail.html:233 +#: data_registry/templates/detail.html:232 msgid "Documents" msgstr "" -#: data_registry/templates/detail.html:235 +#: data_registry/templates/detail.html:234 msgid "Count of documents:" msgstr "" -#: data_registry/templates/detail.html:240 +#: data_registry/templates/detail.html:239 msgid "Milestones" msgstr "" -#: data_registry/templates/detail.html:242 +#: data_registry/templates/detail.html:241 msgid "Count of milestones:" msgstr "" -#: data_registry/templates/detail.html:247 +#: data_registry/templates/detail.html:246 msgid "Amendments" msgstr "" -#: data_registry/templates/detail.html:249 +#: data_registry/templates/detail.html:248 msgid "Count of amendments:" msgstr "" -#: data_registry/templates/detail.html:256 +#: data_registry/templates/detail.html:255 msgid "This dataset has not yet been retrieved." msgstr "" -#: data_registry/templates/detail.html:276 +#: data_registry/templates/detail.html:275 msgid "Data quality" msgstr "" -#: data_registry/templates/detail.html:290 +#: data_registry/templates/detail.html:289 msgid "We have not yet prepared a data quality summary for this dataset." msgstr "" -#: data_registry/templates/detail.html:296 +#: data_registry/templates/detail.html:295 msgid "Last reviewed:" msgstr "" #: data_registry/templates/detail.html:306 +msgid "Data not available" +msgstr "" + +#: data_registry/templates/detail.html:318 msgid "Access data" msgstr "" -#: data_registry/templates/detail.html:308 +#: data_registry/templates/detail.html:320 msgid "" "This OCDS dataset is available for download in JSON, Excel or CSV format. " "You can download the data for contracting processes in a specific year or " "for all time." msgstr "" -#: data_registry/templates/detail.html:313 +#: data_registry/templates/detail.html:325 msgid "" "Each contracting process is represented as one line of JSON text in the " ".jsonl file." msgstr "" -#: data_registry/templates/detail.html:318 +#: data_registry/templates/detail.html:330 msgid "" "The .jsonl file is compressed using Gzip. Windows users need 7-Zip, .gz file." msgstr "" -#: data_registry/templates/detail.html:327 +#: data_registry/templates/detail.html:339 msgid "" "Each contracting process is represented as one row in the main " "sheet. Other sheets link to it via the _link_main column." msgstr "" -#: data_registry/templates/detail.html:332 +#: data_registry/templates/detail.html:344 msgid "" "Excel files can have at most main.csv file. Other files link to it via the _link_main column." msgstr "" -#: data_registry/templates/detail.html:346 +#: data_registry/templates/detail.html:358 msgid "" "The .csv files are archived using tar and compressed using " "Gzip. Windows users need WinZip to decompress the .tar.gz file." msgstr "" -#: data_registry/templates/detail.html:365 +#: data_registry/templates/detail.html:378 msgid "Have questions, feedback on this dataset or content on this page?" msgstr "" -#: data_registry/templates/detail.html:370 +#: data_registry/templates/detail.html:383 msgid "Contact Data Support Team" msgstr "" diff --git a/data_registry/locale/es/LC_MESSAGES/django.po b/data_registry/locale/es/LC_MESSAGES/django.po index b37cea8e..73ad9427 100644 --- a/data_registry/locale/es/LC_MESSAGES/django.po +++ b/data_registry/locale/es/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-29 14:44-0300\n" +"POT-Creation-Date: 2025-06-05 11:03-0300\n" "PO-Revision-Date: 2021-08-04 17:44+0000\n" "Last-Translator: Yohanna Lisnichuk , 2025\n" "Language-Team: Spanish (https://app.transifex.com/open-contracting-partnership-1/teams/123427/es/)\n" @@ -22,7 +22,7 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: data_registry/admin.py:222 +#: data_registry/admin.py:227 #, python-format msgid "Created %(count)d job." msgid_plural "Created %(count)d jobs." @@ -30,7 +30,7 @@ msgstr[0] "%(count)djob creado." msgstr[1] "%(count)djobs creados." msgstr[2] "%(count)d jobs creados." -#: data_registry/admin.py:227 +#: data_registry/admin.py:232 #, python-format msgid "" "%(count)d publication either has an incomplete job or will be scheduled " @@ -47,71 +47,71 @@ msgstr[2] "" "%(count)dpublicaciones tienen jobs incompletos o serán calendarizados " "pronto." -#: data_registry/models.py:153 +#: data_registry/models.py:156 msgid "Africa and Middle East" msgstr "África y Medio Oriente" -#: data_registry/models.py:155 +#: data_registry/models.py:158 msgid "Asia" msgstr "Asia" -#: data_registry/models.py:157 +#: data_registry/models.py:160 msgid "Eastern Europe & Central Asia" msgstr "Europa del Este & Asia Central" -#: data_registry/models.py:159 +#: data_registry/models.py:162 msgid "Europe" msgstr "Europa" -#: data_registry/models.py:161 +#: data_registry/models.py:164 msgid "Latin America & Caribbean" msgstr "América Latina y el Caribe" -#: data_registry/models.py:163 +#: data_registry/models.py:166 msgid "North America" msgstr "Norteamérica" -#: data_registry/models.py:165 +#: data_registry/models.py:168 msgid "Oceania" msgstr "Oceanía" -#: data_registry/models.py:169 data_registry/models.py:189 +#: data_registry/models.py:172 data_registry/models.py:192 msgid "Monthly" msgstr "Mensual" -#: data_registry/models.py:171 data_registry/models.py:193 +#: data_registry/models.py:174 data_registry/models.py:196 msgid "Every 6 months" msgstr "Cada 6 meses" -#: data_registry/models.py:173 data_registry/models.py:195 +#: data_registry/models.py:176 data_registry/models.py:198 msgid "Annually" msgstr "Anual" -#: data_registry/models.py:175 +#: data_registry/models.py:178 msgid "This dataset is no longer updated by the publisher" msgstr "Los datos ya no son actualizados por el publicador" -#: data_registry/models.py:179 +#: data_registry/models.py:182 msgid "Unknown" msgstr "Desconocido" -#: data_registry/models.py:181 +#: data_registry/models.py:184 msgid "Real time" msgstr "En tiempo real" -#: data_registry/models.py:183 +#: data_registry/models.py:186 msgid "Hourly" msgstr "Cada hora" -#: data_registry/models.py:185 +#: data_registry/models.py:188 msgid "Daily" msgstr "Diaria" -#: data_registry/models.py:187 +#: data_registry/models.py:190 msgid "Weekly" msgstr "Semanal" -#: data_registry/models.py:191 +#: data_registry/models.py:194 msgid "Every 3 months" msgstr "Cada 3 meses" @@ -172,26 +172,26 @@ msgstr "Licencia:" msgid "Publication policy:" msgstr "Política de publicación:" -#: data_registry/templates/detail.html:160 +#: data_registry/templates/detail.html:159 #: data_registry/templates/search.html:162 msgid "Last retrieved:" msgstr "Obtenido por última vez:" -#: data_registry/templates/detail.html:164 +#: data_registry/templates/detail.html:163 #: data_registry/templates/search.html:166 #, python-format msgid "retrieved %(retrieval_frequency)s" msgstr "descarga %(retrieval_frequency)s" -#: data_registry/templates/detail.html:167 +#: data_registry/templates/detail.html:166 msgid "Retrieved from:" msgstr "Obtenido de:" -#: data_registry/templates/detail.html:175 +#: data_registry/templates/detail.html:174 msgid "Data available" msgstr "Datos disponibles" -#: data_registry/templates/detail.html:179 +#: data_registry/templates/detail.html:178 msgid "" "An individual contracting process has several different stages: tendering, " "awarding, contracting and implementation. You can dive into the details of " @@ -203,117 +203,121 @@ msgstr "" "detalles de las etapas de contratación en este tutorial." -#: data_registry/templates/detail.html:186 +#: data_registry/templates/detail.html:185 msgid "Parties" msgstr "Partes involucradas" -#: data_registry/templates/detail.html:188 +#: data_registry/templates/detail.html:187 msgid "Count of parties:" msgstr "Cantidad de partes involucradas:" -#: data_registry/templates/detail.html:193 +#: data_registry/templates/detail.html:192 msgid "Plannings" msgstr "Planeación" -#: data_registry/templates/detail.html:195 +#: data_registry/templates/detail.html:194 msgid "Count of planning activities:" msgstr "Número de actividades de planeación:" -#: data_registry/templates/detail.html:200 +#: data_registry/templates/detail.html:199 msgid "Tenders" msgstr "Licitaciones" -#: data_registry/templates/detail.html:202 +#: data_registry/templates/detail.html:201 msgid "Count of tenders:" msgstr "Cantidad de licitaciones:" -#: data_registry/templates/detail.html:204 +#: data_registry/templates/detail.html:203 msgid "Count of tenderers:" msgstr "Cantidad de oferentes:" -#: data_registry/templates/detail.html:206 +#: data_registry/templates/detail.html:205 msgid "Count of tender items:" msgstr "Cantidad de artículos de licitaciones:" -#: data_registry/templates/detail.html:211 +#: data_registry/templates/detail.html:210 msgid "Awards" msgstr "Adjudicaciones" -#: data_registry/templates/detail.html:213 +#: data_registry/templates/detail.html:212 msgid "Count of awards:" msgstr "Cantidad de adjudicaciones:" -#: data_registry/templates/detail.html:215 +#: data_registry/templates/detail.html:214 msgid "Count of award suppliers:" msgstr "Cantidad de proveedores de adjudicaciones:" -#: data_registry/templates/detail.html:217 +#: data_registry/templates/detail.html:216 msgid "Count of award items:" msgstr "Cantidad de artículos adjudicados:" -#: data_registry/templates/detail.html:222 +#: data_registry/templates/detail.html:221 msgid "Contracts" msgstr "Contratos" -#: data_registry/templates/detail.html:224 +#: data_registry/templates/detail.html:223 msgid "Count of contracts:" msgstr "Cantidad de contratos:" -#: data_registry/templates/detail.html:226 +#: data_registry/templates/detail.html:225 msgid "Count of contract items:" msgstr "Cantidad de artículos contratados:" -#: data_registry/templates/detail.html:228 +#: data_registry/templates/detail.html:227 msgid "Count of contract transactions:" msgstr "Cantidad de transacciones en contratos:" -#: data_registry/templates/detail.html:233 +#: data_registry/templates/detail.html:232 msgid "Documents" msgstr "Documentos" -#: data_registry/templates/detail.html:235 +#: data_registry/templates/detail.html:234 msgid "Count of documents:" msgstr "Cantidad de documentos:" -#: data_registry/templates/detail.html:240 +#: data_registry/templates/detail.html:239 msgid "Milestones" msgstr "Hitos" -#: data_registry/templates/detail.html:242 +#: data_registry/templates/detail.html:241 msgid "Count of milestones:" msgstr "Cantidad de hitos:" -#: data_registry/templates/detail.html:247 +#: data_registry/templates/detail.html:246 msgid "Amendments" msgstr "Enmiendas:" -#: data_registry/templates/detail.html:249 +#: data_registry/templates/detail.html:248 msgid "Count of amendments:" msgstr "Cantidad de enmiendas:" -#: data_registry/templates/detail.html:256 +#: data_registry/templates/detail.html:255 msgid "This dataset has not yet been retrieved." msgstr "Este conjunto de datos aún no se ha descargado." -#: data_registry/templates/detail.html:276 +#: data_registry/templates/detail.html:275 msgid "Data quality" msgstr "Calidad de los datos" -#: data_registry/templates/detail.html:290 +#: data_registry/templates/detail.html:289 msgid "We have not yet prepared a data quality summary for this dataset." msgstr "" "Aún no hemos preparado un resumen de calidad de datos para este conjunto de " "datos." -#: data_registry/templates/detail.html:296 +#: data_registry/templates/detail.html:295 msgid "Last reviewed:" msgstr "Revisado por última vez:" #: data_registry/templates/detail.html:306 +msgid "Data not available" +msgstr "Datos no disponibles" + +#: data_registry/templates/detail.html:318 msgid "Access data" msgstr "Acceso a los datos" -#: data_registry/templates/detail.html:308 +#: data_registry/templates/detail.html:320 msgid "" "This OCDS dataset is available for download in JSON, Excel or CSV format. " "You can download the data for contracting processes in a specific year or " @@ -323,7 +327,7 @@ msgstr "" "JSON, Excel o CSV. Puedes descargar los datos de los procesos de " "contratación de un año específico o de todos los años." -#: data_registry/templates/detail.html:313 +#: data_registry/templates/detail.html:325 msgid "" "Each contracting process is represented as one line of JSON text in the " ".jsonl file." @@ -331,7 +335,7 @@ msgstr "" "Cada proceso de contratación está representado como una línea de texto JSON " "en el archivo .jsonl." -#: data_registry/templates/detail.html:318 +#: data_registry/templates/detail.html:330 msgid "" "The .jsonl file is compressed using Gzip. Windows users need 7-Zip, WinRAR o WinZip para descomprimir el archivo .gz." -#: data_registry/templates/detail.html:327 +#: data_registry/templates/detail.html:339 msgid "" "Each contracting process is represented as one row in the main " "sheet. Other sheets link to it via the _link_main column." @@ -354,7 +358,7 @@ msgstr "" "main. Otras hojas pueden enlazarse a esta a través de la " "columna _link_main." -#: data_registry/templates/detail.html:332 +#: data_registry/templates/detail.html:344 msgid "" "Excel files can have at most . Si un año no está, es que tiene demasiadas filas. Descargue los " "archivos CSV en su lugar." -#: data_registry/templates/detail.html:341 +#: data_registry/templates/detail.html:353 msgid "" "Each contracting process is represented as one row in the " "main.csv file. Other files link to it via the " @@ -378,7 +382,7 @@ msgstr "" "main.csv. Otros archivos pueden enlazarse a este a través de la" " columna _link_main." -#: data_registry/templates/detail.html:346 +#: data_registry/templates/detail.html:358 msgid "" "The .csv files are archived using tar and compressed using " "Gzip. Windows users need WinZip para " "descomprimir el archivo .tar.gz file." -#: data_registry/templates/detail.html:365 +#: data_registry/templates/detail.html:378 msgid "Have questions, feedback on this dataset or content on this page?" msgstr "" "Tiene alguna pregunta o retroalimentación sobre este conjunto de datos u " "otro contenido en esta página? " -#: data_registry/templates/detail.html:370 +#: data_registry/templates/detail.html:383 msgid "Contact Data Support Team" msgstr "Contacta al Equipo de Datos" diff --git a/data_registry/locale/ru/LC_MESSAGES/django.po b/data_registry/locale/ru/LC_MESSAGES/django.po index 295833ea..1aa51c9f 100644 --- a/data_registry/locale/ru/LC_MESSAGES/django.po +++ b/data_registry/locale/ru/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-29 14:44-0300\n" +"POT-Creation-Date: 2025-06-05 11:03-0300\n" "PO-Revision-Date: 2021-08-04 17:44+0000\n" "Last-Translator: Yohanna Lisnichuk , 2025\n" "Language-Team: Russian (https://app.transifex.com/open-contracting-partnership-1/teams/123427/ru/)\n" @@ -22,7 +22,7 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: data_registry/admin.py:222 +#: data_registry/admin.py:227 #, python-format msgid "Created %(count)d job." msgid_plural "Created %(count)d jobs." @@ -31,7 +31,7 @@ msgstr[1] "Создано %(count)d рабочих мест." msgstr[2] "Создано %(count)d рабочих мест." msgstr[3] "Создано %(count)d рабочих мест." -#: data_registry/admin.py:227 +#: data_registry/admin.py:232 #, python-format msgid "" "%(count)d publication either has an incomplete job or will be scheduled " @@ -52,71 +52,71 @@ msgstr[3] "" "%(count)d публикаций либо имеют незавершенные задания, либо будут " "запланированы в ближайшее время." -#: data_registry/models.py:153 +#: data_registry/models.py:156 msgid "Africa and Middle East" msgstr "Африка и Средний Восток" -#: data_registry/models.py:155 +#: data_registry/models.py:158 msgid "Asia" msgstr "Азия" -#: data_registry/models.py:157 +#: data_registry/models.py:160 msgid "Eastern Europe & Central Asia" msgstr "Восточная Европа и Центральная Азия" -#: data_registry/models.py:159 +#: data_registry/models.py:162 msgid "Europe" msgstr "Европа" -#: data_registry/models.py:161 +#: data_registry/models.py:164 msgid "Latin America & Caribbean" msgstr "Латинская Америка и Карибский бассейн" -#: data_registry/models.py:163 +#: data_registry/models.py:166 msgid "North America" msgstr "Северная Америка" -#: data_registry/models.py:165 +#: data_registry/models.py:168 msgid "Oceania" msgstr "Океания" -#: data_registry/models.py:169 data_registry/models.py:189 +#: data_registry/models.py:172 data_registry/models.py:192 msgid "Monthly" msgstr "Ежемесячно" -#: data_registry/models.py:171 data_registry/models.py:193 +#: data_registry/models.py:174 data_registry/models.py:196 msgid "Every 6 months" msgstr "Каждые 6 месяцев" -#: data_registry/models.py:173 data_registry/models.py:195 +#: data_registry/models.py:176 data_registry/models.py:198 msgid "Annually" msgstr "Раз в год" -#: data_registry/models.py:175 +#: data_registry/models.py:178 msgid "This dataset is no longer updated by the publisher" msgstr "Этот набор данных больше не обновляется издателем." -#: data_registry/models.py:179 +#: data_registry/models.py:182 msgid "Unknown" msgstr "Неизвестный" -#: data_registry/models.py:181 +#: data_registry/models.py:184 msgid "Real time" msgstr "Реальное время" -#: data_registry/models.py:183 +#: data_registry/models.py:186 msgid "Hourly" msgstr "Ежечасно" -#: data_registry/models.py:185 +#: data_registry/models.py:188 msgid "Daily" msgstr "Ежедневно" -#: data_registry/models.py:187 +#: data_registry/models.py:190 msgid "Weekly" msgstr "Еженедельно" -#: data_registry/models.py:191 +#: data_registry/models.py:194 msgid "Every 3 months" msgstr "каждые 3 месяца" @@ -178,26 +178,26 @@ msgstr "Лицензия" msgid "Publication policy:" msgstr "Политика публикации:" -#: data_registry/templates/detail.html:160 +#: data_registry/templates/detail.html:159 #: data_registry/templates/search.html:162 msgid "Last retrieved:" msgstr "Последнее получено:" -#: data_registry/templates/detail.html:164 +#: data_registry/templates/detail.html:163 #: data_registry/templates/search.html:166 #, python-format msgid "retrieved %(retrieval_frequency)s" msgstr "загружен %(retrieval_frequency)s" -#: data_registry/templates/detail.html:167 +#: data_registry/templates/detail.html:166 msgid "Retrieved from:" msgstr "Извлекаются из:" -#: data_registry/templates/detail.html:175 +#: data_registry/templates/detail.html:174 msgid "Data available" msgstr "Доступные данные" -#: data_registry/templates/detail.html:179 +#: data_registry/templates/detail.html:178 msgid "" "An individual contracting process has several different stages: tendering, " "awarding, contracting and implementation. You can dive into the details of " @@ -210,116 +210,120 @@ msgstr "" "contracting.org/latest/en/primer/how/\" target=\"_blank\">этом " "руководстве." -#: data_registry/templates/detail.html:186 +#: data_registry/templates/detail.html:185 msgid "Parties" msgstr "Стороны" -#: data_registry/templates/detail.html:188 +#: data_registry/templates/detail.html:187 msgid "Count of parties:" msgstr "Количество сторон" -#: data_registry/templates/detail.html:193 +#: data_registry/templates/detail.html:192 msgid "Plannings" msgstr "Планы" -#: data_registry/templates/detail.html:195 +#: data_registry/templates/detail.html:194 msgid "Count of planning activities:" msgstr "Количество запланированых мероприятий" -#: data_registry/templates/detail.html:200 +#: data_registry/templates/detail.html:199 msgid "Tenders" msgstr "Тендеры" -#: data_registry/templates/detail.html:202 +#: data_registry/templates/detail.html:201 msgid "Count of tenders:" msgstr "Количество тендеров:" -#: data_registry/templates/detail.html:204 +#: data_registry/templates/detail.html:203 msgid "Count of tenderers:" msgstr "Количество участников тендера:" -#: data_registry/templates/detail.html:206 +#: data_registry/templates/detail.html:205 msgid "Count of tender items:" msgstr "Количество айтемов в тендере:" -#: data_registry/templates/detail.html:211 +#: data_registry/templates/detail.html:210 msgid "Awards" msgstr "Присуждение" -#: data_registry/templates/detail.html:213 +#: data_registry/templates/detail.html:212 msgid "Count of awards:" msgstr "Количество присуждений:" -#: data_registry/templates/detail.html:215 +#: data_registry/templates/detail.html:214 msgid "Count of award suppliers:" msgstr "Количество присужденных поставщиков:" -#: data_registry/templates/detail.html:217 +#: data_registry/templates/detail.html:216 msgid "Count of award items:" msgstr "Колиечство айтемов с присуждениями:" -#: data_registry/templates/detail.html:222 +#: data_registry/templates/detail.html:221 msgid "Contracts" msgstr "Контракты" -#: data_registry/templates/detail.html:224 +#: data_registry/templates/detail.html:223 msgid "Count of contracts:" msgstr "Количество контрактов:" -#: data_registry/templates/detail.html:226 +#: data_registry/templates/detail.html:225 msgid "Count of contract items:" msgstr "Количество законтрактированных айтемов:" -#: data_registry/templates/detail.html:228 +#: data_registry/templates/detail.html:227 msgid "Count of contract transactions:" msgstr "Количество транзакций по контракту:" -#: data_registry/templates/detail.html:233 +#: data_registry/templates/detail.html:232 msgid "Documents" msgstr "Документы" -#: data_registry/templates/detail.html:235 +#: data_registry/templates/detail.html:234 msgid "Count of documents:" msgstr "Количество документов:" -#: data_registry/templates/detail.html:240 +#: data_registry/templates/detail.html:239 msgid "Milestones" msgstr "Этапы" -#: data_registry/templates/detail.html:242 +#: data_registry/templates/detail.html:241 msgid "Count of milestones:" msgstr "Количество этапов:" -#: data_registry/templates/detail.html:247 +#: data_registry/templates/detail.html:246 msgid "Amendments" msgstr "Изменения" -#: data_registry/templates/detail.html:249 +#: data_registry/templates/detail.html:248 msgid "Count of amendments:" msgstr "Количество изменений:" -#: data_registry/templates/detail.html:256 +#: data_registry/templates/detail.html:255 msgid "This dataset has not yet been retrieved." msgstr "Этот набор данных еще не загружен." -#: data_registry/templates/detail.html:276 +#: data_registry/templates/detail.html:275 msgid "Data quality" msgstr "Качество данных" -#: data_registry/templates/detail.html:290 +#: data_registry/templates/detail.html:289 msgid "We have not yet prepared a data quality summary for this dataset." msgstr "" "Мы еще не подготовили сводку по качеству данных для этого набора данных." -#: data_registry/templates/detail.html:296 +#: data_registry/templates/detail.html:295 msgid "Last reviewed:" msgstr "Последний отзыв:" #: data_registry/templates/detail.html:306 +msgid "Data not available" +msgstr "Данные отсутствуют." + +#: data_registry/templates/detail.html:318 msgid "Access data" msgstr "Доступ к данным" -#: data_registry/templates/detail.html:308 +#: data_registry/templates/detail.html:320 msgid "" "This OCDS dataset is available for download in JSON, Excel or CSV format. " "You can download the data for contracting processes in a specific year or " @@ -329,7 +333,7 @@ msgstr "" "Вы можете загрузить данные о процессах заключения договоров за определенный " "год или за все время." -#: data_registry/templates/detail.html:313 +#: data_registry/templates/detail.html:325 msgid "" "Each contracting process is represented as one line of JSON text in the " ".jsonl file." @@ -337,7 +341,7 @@ msgstr "" "Каждый процесс заключения контракта представлен в виде одной строки текста " "JSON в .jsonl файле." -#: data_registry/templates/detail.html:318 +#: data_registry/templates/detail.html:330 msgid "" "The .jsonl file is compressed using Gzip. Windows users need 7-Zip, WinZip для распаковки " "файла .gz file." -#: data_registry/templates/detail.html:327 +#: data_registry/templates/detail.html:339 msgid "" "Each contracting process is represented as one row in the main " "sheet. Other sheets link to it via the _link_main column." @@ -360,7 +364,7 @@ msgstr "" "основном листе. Другие листы ссылаются на него через столбец " "_link_main." -#: data_registry/templates/detail.html:332 +#: data_registry/templates/detail.html:344 msgid "" "Excel files can have at most . Если год отсутствует, в нем было слишком много строк. В таком " "случае загрузите файлы в формате CSV." -#: data_registry/templates/detail.html:341 +#: data_registry/templates/detail.html:353 msgid "" "Each contracting process is represented as one row in the " "main.csv file. Other files link to it via the " @@ -384,7 +388,7 @@ msgstr "" "main.csv. Другие файлы ссылаются на него через столбец " "_link_main." -#: data_registry/templates/detail.html:346 +#: data_registry/templates/detail.html:358 msgid "" "The .csv files are archived using tar and compressed using " "Gzip. Windows users need WinRAR или WinZip для распаковки файла .tar.gz." -#: data_registry/templates/detail.html:365 +#: data_registry/templates/detail.html:378 msgid "Have questions, feedback on this dataset or content on this page?" msgstr "" "Есть ли у вас вопросы, отзывы об этом наборе данных или содержимом этой " "страницы?" -#: data_registry/templates/detail.html:370 +#: data_registry/templates/detail.html:383 msgid "Contact Data Support Team" msgstr "Связаться со службой поддержки данных" diff --git a/data_registry/migrations/0062_collection_no_data_rationale_alter_collection_public.py b/data_registry/migrations/0062_collection_no_data_rationale_alter_collection_public.py new file mode 100644 index 00000000..3dff3ff7 --- /dev/null +++ b/data_registry/migrations/0062_collection_no_data_rationale_alter_collection_public.py @@ -0,0 +1,60 @@ +# Generated by Django 4.2.18 on 2025-04-03 13:40 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("data_registry", "0061_auto_20250206_0406"), + ] + + operations = [ + migrations.AddField( + model_name="collection", + name="no_data_rationale", + field=models.TextField( + default="", + blank=True, + help_text="A short rationale of why an existing publication does not have data in the Data Registry. If thisfield is set, then the collection should be frozen and their retrieval frequency set to NEVER", + verbose_name="no data rationale", + ), + ), + migrations.AddField( + model_name="collection", + name="no_data_rationale_en", + field=models.TextField( + default="", + blank=True, + help_text="A short rationale of why an existing publication does not have data in the Data Registry. If thisfield is set, then the collection should be frozen and their retrieval frequency set to NEVER", + verbose_name="no data rationale", + ), + ), + migrations.AddField( + model_name="collection", + name="no_data_rationale_es", + field=models.TextField( + default="", + blank=True, + help_text="A short rationale of why an existing publication does not have data in the Data Registry. If thisfield is set, then the collection should be frozen and their retrieval frequency set to NEVER", + verbose_name="no data rationale", + ), + ), + migrations.AddField( + model_name="collection", + name="no_data_rationale_ru", + field=models.TextField( + default="", + blank=True, + help_text="A short rationale of why an existing publication does not have data in the Data Registry. If thisfield is set, then the collection should be frozen and their retrieval frequency set to NEVER", + verbose_name="no data rationale", + ), + ), + migrations.AlterField( + model_name="collection", + name="public", + field=models.BooleanField( + default=False, + help_text="If the active job's tasks completed without errors or no_data_rationale is set, and all the fieldsbelow in all languages are filled in, check this box to make the publication visible to anonymous users. Otherwise, it is visible to administrators only.", + ), + ), + ] diff --git a/data_registry/migrations/0063_alter_collection_no_data_rationale_and_more.py b/data_registry/migrations/0063_alter_collection_no_data_rationale_and_more.py new file mode 100644 index 00000000..a8cf9a54 --- /dev/null +++ b/data_registry/migrations/0063_alter_collection_no_data_rationale_and_more.py @@ -0,0 +1,59 @@ +# Generated by Django 4.2.18 on 2025-05-18 05:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("data_registry", "0062_collection_no_data_rationale_alter_collection_public"), + ] + + operations = [ + migrations.AlterField( + model_name="collection", + name="no_data_rationale", + field=models.TextField( + blank=True, + help_text="The short reason why the publication has no active job. If set, freeze the publication.", + verbose_name="no data rationale", + ), + ), + migrations.AlterField( + model_name="collection", + name="no_data_rationale_en", + field=models.TextField( + blank=True, + help_text="The short reason why the publication has no active job. If set, freeze the publication.", + null=True, + verbose_name="no data rationale", + ), + ), + migrations.AlterField( + model_name="collection", + name="no_data_rationale_es", + field=models.TextField( + blank=True, + help_text="The short reason why the publication has no active job. If set, freeze the publication.", + null=True, + verbose_name="no data rationale", + ), + ), + migrations.AlterField( + model_name="collection", + name="no_data_rationale_ru", + field=models.TextField( + blank=True, + help_text="The short reason why the publication has no active job. If set, freeze the publication.", + null=True, + verbose_name="no data rationale", + ), + ), + migrations.AlterField( + model_name="collection", + name="public", + field=models.BooleanField( + default=False, + help_text="If the active job's tasks completed without errors or 'No data rationale' is set, and all fields below in all languages are filled in, check this box to make the publication visible to anonymous users. Otherwise, it is visible to administrators only.", + ), + ), + ] diff --git a/data_registry/models.py b/data_registry/models.py index 85a61736..fb8ac139 100644 --- a/data_registry/models.py +++ b/data_registry/models.py @@ -1,6 +1,7 @@ from datetime import date, timedelta from django.db import models +from django.db.models import Q from django.db.models.functions import Now from django.utils.translation import gettext_lazy as _ @@ -143,8 +144,10 @@ def complete(self): class CollectionQuerySet(models.QuerySet): def visible(self): - """Return a query set of public collections with active jobs.""" - return self.filter(public=True, active_job__isnull=False) + """Return a query set of public collections, excluding those without an active job for no reason.""" + return self.filter(public=True).exclude( + Q(active_job__isnull=True) & (Q(no_data_rationale__isnull=True) | Q(no_data_rationale="")) + ) class Collection(models.Model): @@ -266,6 +269,8 @@ class UpdateFrequency(models.TextChoices): verbose_name="data license", help_text="If not set, the Overview section will display the license URL within the OCDS package.", ) + + # Documentation publication_policy = models.TextField(blank=True, verbose_name="publication policy") # Provenance @@ -302,10 +307,15 @@ class UpdateFrequency(models.TextChoices): ) # Visibility logic + no_data_rationale = models.TextField( + blank=True, + verbose_name="no data rationale", + help_text="The short reason why the publication has no active job. If set, freeze the publication.", + ) public = models.BooleanField( default=False, - help_text="If the active job's tasks completed without errors and all the fields below in all languages are " - "filled in, check this box to make the publication visible to anonymous users. " + help_text="If the active job's tasks completed without errors or 'No data rationale' is set, and all fields " + "below in all languages are filled in, check this box to make the publication visible to anonymous users. " "Otherwise, it is visible to administrators only.", ) diff --git a/data_registry/templates/detail.html b/data_registry/templates/detail.html index 4372974d..169b3063 100644 --- a/data_registry/templates/detail.html +++ b/data_registry/templates/detail.html @@ -155,8 +155,7 @@

{% translate "Overview" %}

{% endif %}
{% translate "Publication policy:" %}
-
{% firstof collection.publication_policy|urlize job.publication_policy|urlize "-" %} -
+
{% firstof collection.publication_policy|urlize job.publication_policy|urlize "-" %}
{% translate "Last retrieved:" %}
{{ collection.last_retrieved|date:"M Y" }} @@ -299,6 +298,19 @@

{% translate "Data quality" %}

+{% if not job and collection.frozen and collection.no_data_rationale %} +
+
+
+
+

{% translate "Data not available" %}

+ + {{ collection.no_data_rationale|markdownify }} +
+
+
+
+{% else %}
@@ -352,6 +364,7 @@

CSV

+{% endif %}
diff --git a/data_registry/translation.py b/data_registry/translation.py index c7cf2d6c..8e487c79 100644 --- a/data_registry/translation.py +++ b/data_registry/translation.py @@ -12,7 +12,16 @@ @register(models.Collection) class CollectionTranslation(TranslationOptions): - fields = ["title", "description", "description_long", "summary", "additional_data", "country", "language"] + fields = [ + "title", + "description", + "description_long", + "summary", + "additional_data", + "country", + "language", + "no_data_rationale", + ] required_languages = {language: ("title",) for language, _ in settings.LANGUAGES} fallback_undefined = "" diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po index 8400bff5..c14e7640 100644 --- a/locale/en_US/LC_MESSAGES/django.po +++ b/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-05-25 01:45+0000\n" +"POT-Creation-Date: 2025-06-05 11:03-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,14 +17,14 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: core/settings.py:251 +#: core/settings.py:258 msgid "English" msgstr "" -#: core/settings.py:252 +#: core/settings.py:259 msgid "Spanish" msgstr "" -#: core/settings.py:253 +#: core/settings.py:260 msgid "Russian" msgstr "" diff --git a/src/scss/_custom.scss b/src/scss/_custom.scss index 68e9433a..65002dca 100644 --- a/src/scss/_custom.scss +++ b/src/scss/_custom.scss @@ -99,7 +99,7 @@ $b-icon-animation-throb-duration: .75s; // https://getbootstrap.com/docs/5.2/utilities/colors/#sass $grays: (); // 0.2 KiB $colors: (); // 0.3 KiB -$theme-colors: map-merge(map-remove($theme-colors, "danger", "warning"), ("white": $white)); // 2 KiB +$theme-colors: map-merge(map-remove($theme-colors, "danger"), ("white": $white)); // 2 KiB $grid-breakpoints: map-remove($grid-breakpoints, "xxl"); // 13 KiB $container-max-widths: map-remove($container-max-widths, "xxl"); // 0.1 KiB $display-font-sizes: (); // 0.7 KiB diff --git a/tests/data_registry/test_models.py b/tests/data_registry/test_models.py index 105c16bb..399d4ea7 100644 --- a/tests/data_registry/test_models.py +++ b/tests/data_registry/test_models.py @@ -15,6 +15,23 @@ def test_is_out_of_date(self): self.assertTrue(collection.is_out_of_date()) + def test_visible(self): + self.assertEqual(Collection.objects.visible().count(), 0) + + Collection.objects.create(public=True) + + self.assertEqual(Collection.objects.visible().count(), 0) + + Collection.objects.create(public=True, no_data_rationale="nonempty") + + self.assertEqual(Collection.objects.visible().count(), 1) + + collection = Collection.objects.create(public=True) + collection.active_job = collection.job_set.create() + collection.save() + + self.assertEqual(Collection.objects.visible().count(), 2) + class JobTests(TransactionTestCase): @classmethod