emrt.necd.content 2.5.47__zip → 2.5.48__zip
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/PKG-INFO +6 -1
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/docs/HISTORY.txt +5 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/reminder.py +71 -7
- emrt.necd.content-2.5.48/emrt/necd/content/browser/templates/reminder.pt +109 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/reviewfolderview.pt +2 -2
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/metadata.xml +1 -1
- emrt.necd.content-2.5.48/emrt/necd/content/profiles/default/necdvocabularies/highlight_2024_onwards.csv +17 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/reviewfolder.py +15 -11
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/setuphandlers.py +5 -1
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/configure.zcml +14 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/vocabularies.py +9 -4
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt.necd.content.egg-info/PKG-INFO +6 -1
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt.necd.content.egg-info/SOURCES.txt +1 -1
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/setup.py +1 -1
- emrt.necd.content-2.5.47/TAGS +0 -1153
- emrt.necd.content-2.5.47/emrt/necd/content/browser/templates/reminder.pt +0 -80
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/.editorconfig +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/.gitignore +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/MANIFEST.in +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/Makefile +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/README.txt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/bootstrap.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/build_manylinux.sh +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/buildout.cfg +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/docs/INSTALL.txt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/docs/LICENSE.GPL +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/docs/LICENSE.txt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/__init__.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/__init__.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/INTEGRATION.txt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/__init__.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/adapters/__init__.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/adapters/configure.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/adapters/reference_number.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/__init__.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/attachmentdownload.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/bulk_update.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/carryover.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/comments.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/configure.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/copyfiles.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/flatten_json.so +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/get_sample_xls.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/interfaces.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/macros.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/observation_import.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/statechange.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/statisticsview.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/tableau.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/assign_answerer_form.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/assign_conclusion_reviewer_form.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/assign_counterpart_form.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/bulk_update.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/carryover.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/finalisedfolderview.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/import_observation.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/inboxreviewfolderview.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/macros.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/multi_input.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/reminder_default_content.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/reviewfolder_get_table.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/statisticsview.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/tableau_connector.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/templates/tableau_dashboard.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/browser/xls_utils.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/comment.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/commentanswer.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/commentextender.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/conclusions.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/configure.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/constants.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/converter.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/crons.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/forms/__init__.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/forms/configure.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/forms/redraft.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/inbox_sections.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/indexers.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/locales/README.txt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/necdfile.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/nfr_code_matching.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/__init__.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/answer_acknowledged.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/answer_acknowledged.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/answer_to_msexperts.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/answer_to_msexperts.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/comment_added.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/comment_added.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/comment_to_msa.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/comment_to_mse.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/conclusion_to_comment.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/conclusion_to_comment.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/configure.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/new_comment.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/observation_finalisation_denied.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/observation_finalisation_denied.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/observation_finalisation_request.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/observation_finalisation_request.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/observation_finalised.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/observation_finalised.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/observation_finalised_rev_msg.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/observation_recalled.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/observation_recalled.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/observation_recalled_closed_msa.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/observation_recalled_closed_se.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/observation_recalled_denied_se.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/question_answered.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/question_answered_lr_msg.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/question_answered_msexperts_msg.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/question_answered_rev_msg.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/question_ready_for_approval.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/question_ready_for_approval.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/question_redraft.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/question_redraft.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/question_redraft.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/question_to_counterpart.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/question_to_counterpart.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/question_to_ms.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/question_to_ms.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/question_to_ms_rev_msg.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/notifications/utils.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/observation.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/overrides.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/patches.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/patches.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/permissions.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/catalog.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/cssregistry.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/diff_tool.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/emrt.necd.content_various.txt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/jsregistry.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/ldap_plugin.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/necdvocabularies/conclusion_reasons.csv +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/necdvocabularies/eea_member_states.csv +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/necdvocabularies/fuel.csv +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/necdvocabularies/ghg_source_category.csv +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/necdvocabularies/ghg_source_sectors.csv +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/necdvocabularies/highlight.csv +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/necdvocabularies/highlight_projection.csv +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/necdvocabularies/parameter.csv +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/necdvocabularies/pollutants.csv +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/necdvocabularies/scenario_type.csv +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/registry.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/rolemap.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/sharing.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/tinymce.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/types/Comment.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/types/CommentAnswer.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/types/Conclusions.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/types/Folder.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/types/NECDFile.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/types/Observation.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/types/Question.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/types/ReviewFolder.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/types.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/workflows/esd-answer-workflow/definition.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/workflows/esd-comment-workflow/definition.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/workflows/esd-conclusion-workflow/definition.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/workflows/esd-file-workflow/definition.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/workflows/esd-question-review-workflow/definition.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/workflows/esd-review-workflow/definition.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/workflows/esd-reviewtool-folder-workflow/definition.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles/default/workflows.xml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/profiles.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/question.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/roles/__init__.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/roles/configure.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/roles/localroles.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/roles/localrolesubscriber.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/chosen-sprite.png +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/chosen-sprite@2x.png +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/chosen.jquery.js +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/chosen.min.css +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/cookies.js +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/eea-tabs.css +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/eea-tabs.js +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/emrt.necd.content.css +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/flags.css +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/flags.png +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/inbox_view.css +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/inbox_view.js +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/moment.min.js +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/phase-1.png +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/phase-12.png +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/phase-2.png +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/tableauwdc-2.3.1.min.js +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/static/tableauwdc-2.3.latest.min.js +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/subscribers.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/subscriptionconfiguration.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/subscriptions/__init__.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/subscriptions/configure.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/subscriptions/dexterity.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/subscriptions/interfaces.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/templates/conclusion_layout.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/templates/diffedview.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/templates/macro_qa_chat.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/templates/observationview.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/templates/subscriptionconfiguration.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/templates/subscriptionconfigurationreview.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/templates/widget_activity.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/templates/widget_activity_type.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/templates/widget_highlight.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/templates/widget_pollutants.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/tests.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/timeit.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/transform_html_to_docx.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/__init__.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2010.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2015.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2016.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2022.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2024.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2025.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2029.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2032.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2037.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2038.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2042.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2044.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2045.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve205.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve206.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve207.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2201.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve230.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve235.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve236.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve237.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve240.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve243.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve252.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2524.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2537.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2538.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2540.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve2542.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/evolve258.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/portal_workflow.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/templates/portal_workflow_apply_and_reindex.pt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/utilities/__init__.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/utilities/configure.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/utilities/interfaces.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/utilities/ldap_utils.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/utilities/ldap_wrapper.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/utilities/ms_user.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/utilities/question.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/utilities/roles.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/utils.py +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/views.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/vocabularies.zcml +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt.necd.content.egg-info/dependency_links.txt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt.necd.content.egg-info/entry_points.txt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt.necd.content.egg-info/namespace_packages.txt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt.necd.content.egg-info/not-zip-safe +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt.necd.content.egg-info/requires.txt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt.necd.content.egg-info/top_level.txt +0 -0
- {emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 1.1
|
|
2
2
|
Name: emrt.necd.content
|
|
3
|
-
Version: 2.5.
|
|
3
|
+
Version: 2.5.48
|
|
4
4
|
Summary: Content-types for EMRT-NECD Review Tool
|
|
5
5
|
Home-page: https://github.com/eea/emrt.necd.content/
|
|
6
6
|
Author: Mikel Larreategi
|
|
@@ -15,6 +15,11 @@ Description: Introduction
|
|
|
15
15
|
Changelog
|
|
16
16
|
=========
|
|
17
17
|
|
|
18
|
+
2.5.48 (2024-04-11)
|
|
19
|
+
|
|
20
|
+
- Feature #260968 - Reminder button: allow user / country selection
|
|
21
|
+
- Task #260971 - Review if flags need updating/ all are still relevant
|
|
22
|
+
|
|
18
23
|
2.5.47 (2024-04-11)
|
|
19
24
|
|
|
20
25
|
- Bug #268428 - Unable to take extract from test site
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
2.5.48 (2024-04-11)
|
|
5
|
+
|
|
6
|
+
- Feature #260968 - Reminder button: allow user / country selection
|
|
7
|
+
- Task #260971 - Review if flags need updating/ all are still relevant
|
|
8
|
+
|
|
4
9
|
2.5.47 (2024-04-11)
|
|
5
10
|
|
|
6
11
|
- Bug #268428 - Unable to take extract from test site
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from operator import attrgetter
|
|
3
3
|
from collections import namedtuple
|
|
4
|
+
from collections import defaultdict
|
|
4
5
|
|
|
5
6
|
from zope.component import getMultiAdapter
|
|
7
|
+
from zope.component import getUtility
|
|
8
|
+
|
|
9
|
+
from zope.schema.interfaces import IVocabularyFactory
|
|
6
10
|
|
|
7
11
|
from chameleon.zpt.template import PageTextTemplate
|
|
8
12
|
|
|
@@ -34,8 +38,15 @@ with open(DEFAULT_CONTENT_PATH) as default_content:
|
|
|
34
38
|
|
|
35
39
|
|
|
36
40
|
|
|
37
|
-
UserData = namedtuple(
|
|
41
|
+
UserData = namedtuple(
|
|
42
|
+
"UserData",
|
|
43
|
+
["user_id", "name", "email", "roles", "country_a2", "country_name"]
|
|
44
|
+
)
|
|
38
45
|
|
|
46
|
+
CountryData = namedtuple(
|
|
47
|
+
"CountryData",
|
|
48
|
+
["a2", "name", "user_count"]
|
|
49
|
+
)
|
|
39
50
|
|
|
40
51
|
class ReminderView(BrowserView):
|
|
41
52
|
|
|
@@ -44,6 +55,10 @@ class ReminderView(BrowserView):
|
|
|
44
55
|
("tool_url", "The absolute URL of this review folder.", ),
|
|
45
56
|
)
|
|
46
57
|
|
|
58
|
+
@property
|
|
59
|
+
def mail_from_address(self):
|
|
60
|
+
return api.portal.get().email_from_address
|
|
61
|
+
|
|
47
62
|
@property
|
|
48
63
|
def default_content(self):
|
|
49
64
|
return DEFAULT_CONTENT
|
|
@@ -60,31 +75,76 @@ class ReminderView(BrowserView):
|
|
|
60
75
|
|
|
61
76
|
@property
|
|
62
77
|
def manager_users_to_notify(self):
|
|
78
|
+
v_ms = getUtility(
|
|
79
|
+
IVocabularyFactory,
|
|
80
|
+
name='emrt.necd.content.eea_member_states')(self.context)
|
|
81
|
+
|
|
63
82
|
if "Manager" in api.user.get_roles():
|
|
64
83
|
result = []
|
|
65
|
-
for user in self._get_users_to_notify():
|
|
84
|
+
for user, country_a2 in self._get_users_to_notify():
|
|
66
85
|
roles = api.user.get_roles(user=user, obj=self.context)
|
|
67
86
|
user_data = (
|
|
87
|
+
user.getId(),
|
|
68
88
|
safer_unicode(user.getProperty("fullname", user.getId())),
|
|
69
89
|
user.getProperty("email", "-"),
|
|
70
90
|
[r for r in roles if r != "Authenticated"],
|
|
91
|
+
country_a2,
|
|
92
|
+
v_ms.getTerm(country_a2).title
|
|
71
93
|
)
|
|
72
94
|
result.append(UserData(*user_data))
|
|
73
95
|
return sorted(result, key=attrgetter("name"))
|
|
74
96
|
|
|
75
97
|
|
|
98
|
+
@property
|
|
99
|
+
def countries_to_notify(self):
|
|
100
|
+
v_ms = getUtility(
|
|
101
|
+
IVocabularyFactory,
|
|
102
|
+
name='emrt.necd.content.eea_member_states')(self.context)
|
|
103
|
+
|
|
104
|
+
result = defaultdict(set)
|
|
105
|
+
for user, country_a2 in self._get_users_to_notify():
|
|
106
|
+
result[country_a2].add(user.getId())
|
|
107
|
+
|
|
108
|
+
return sorted(
|
|
109
|
+
[
|
|
110
|
+
CountryData(a2, v_ms.getTerm(a2).title, len(users))
|
|
111
|
+
for a2, users
|
|
112
|
+
in result.items()
|
|
113
|
+
],
|
|
114
|
+
key=attrgetter("name")
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
|
|
76
118
|
def send_reminder(self):
|
|
77
119
|
subject = self.request.get("subject", self.default_subject)
|
|
78
120
|
content = self.request.get("content", self.default_content)
|
|
121
|
+
countries_a2 = self.request.get("countries_a2", [])
|
|
122
|
+
user_ids = (
|
|
123
|
+
self.request.get("user_ids", [])
|
|
124
|
+
if "Manager" in api.user.get_roles()
|
|
125
|
+
else []
|
|
126
|
+
)
|
|
79
127
|
|
|
80
128
|
template = PageTextTemplate(content)
|
|
81
129
|
|
|
82
|
-
|
|
130
|
+
if user_ids:
|
|
131
|
+
to_notify = [
|
|
132
|
+
user for user, _ in self._get_users_to_notify()
|
|
133
|
+
if user.getId() in user_ids
|
|
134
|
+
]
|
|
135
|
+
else:
|
|
136
|
+
to_notify = [
|
|
137
|
+
user for user, a2 in self._get_users_to_notify()
|
|
138
|
+
if a2 in countries_a2
|
|
139
|
+
]
|
|
83
140
|
|
|
84
141
|
for user in to_notify:
|
|
85
142
|
self._send_email(subject, template, user)
|
|
86
143
|
|
|
87
|
-
|
|
144
|
+
if to_notify:
|
|
145
|
+
portal_message = "Notified {} users.".format(len(to_notify))
|
|
146
|
+
else:
|
|
147
|
+
portal_message = "Nothing selected, nobody was notified."
|
|
88
148
|
api.portal.show_message(portal_message, request=self.request)
|
|
89
149
|
|
|
90
150
|
return self.request.RESPONSE.redirect(self.context.absolute_url())
|
|
@@ -116,10 +176,14 @@ class ReminderView(BrowserView):
|
|
|
116
176
|
to_notify = set()
|
|
117
177
|
|
|
118
178
|
for obs in observations:
|
|
119
|
-
msa_users =
|
|
179
|
+
msa_users = [
|
|
180
|
+
(user, obs.country)
|
|
181
|
+
for user
|
|
182
|
+
in get_users_in_context(obs, ROLE_MSA, "reminder")
|
|
183
|
+
]
|
|
120
184
|
to_notify.update(msa_users)
|
|
121
185
|
|
|
122
186
|
return [
|
|
123
|
-
user for user in to_notify
|
|
187
|
+
(user, a2) for user, a2 in to_notify
|
|
124
188
|
if "Manager" not in api.user.get_roles(user=user)
|
|
125
|
-
]
|
|
189
|
+
]
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
<metal:page use-macro="here/main_template/macros/master">
|
|
2
|
+
<tal:block metal:fill-slot="style_slot">
|
|
3
|
+
<style type="text/css">
|
|
4
|
+
.field input[type="text"] {
|
|
5
|
+
padding: 0.5em 0.3em;
|
|
6
|
+
width: 100%;
|
|
7
|
+
}
|
|
8
|
+
.field textarea {
|
|
9
|
+
padding: 1em;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
form button[disabled] {
|
|
13
|
+
background-color: #b3b3b3;
|
|
14
|
+
border-color: #f3f3f3;
|
|
15
|
+
}
|
|
16
|
+
form button[disabled]:hover {
|
|
17
|
+
cursor: not-allowed;
|
|
18
|
+
}
|
|
19
|
+
</style>
|
|
20
|
+
</tal:block>
|
|
21
|
+
<metal:content fill-slot="main"
|
|
22
|
+
tal:define="is_projection python:options.get('is_projection');
|
|
23
|
+
will_notify_num python:view.will_notify_num_users;
|
|
24
|
+
countries_to_notify python:view.countries_to_notify;
|
|
25
|
+
manager_users_to_notify python:view.manager_users_to_notify;">
|
|
26
|
+
<h1 class="documentFirstHeading">Send reminder</h1>
|
|
27
|
+
<p class="discreet">Send email reminder to MS coordinators</p>
|
|
28
|
+
|
|
29
|
+
<p>Submitting this form will send an email to <strong>${will_notify_num}</strong> MS coordinators which have outstanding questions.</p>
|
|
30
|
+
|
|
31
|
+
<form action="./reminder" method="POST" enctype="multipart/form-data">
|
|
32
|
+
<tal:manager condition="manager_users_to_notify">
|
|
33
|
+
<p><strong>NOTE:</strong> The table below displays the users that will be notified and <strong>is only visible to Secretariat</strong></p>
|
|
34
|
+
<table class="listing">
|
|
35
|
+
<thead>
|
|
36
|
+
<tr>
|
|
37
|
+
<th>Notify?</th>
|
|
38
|
+
<th>Name</th>
|
|
39
|
+
<th>e-Mail</th>
|
|
40
|
+
<th>Roles</th>
|
|
41
|
+
<th>Country</th>
|
|
42
|
+
</tr>
|
|
43
|
+
</thead>
|
|
44
|
+
<tbody>
|
|
45
|
+
<tr tal:repeat="user_data manager_users_to_notify">
|
|
46
|
+
<td><input type="checkbox" name="user_ids:list" value="${python:user_data.user_id}" checked="checked" /></td>
|
|
47
|
+
<td>${python:user_data.name}</td>
|
|
48
|
+
<td>${python:user_data.email}</td>
|
|
49
|
+
<td>${python:", ".join(user_data.roles)}</td>
|
|
50
|
+
<td>${python:user_data.country_name}</td>
|
|
51
|
+
</tr>
|
|
52
|
+
</tbody>
|
|
53
|
+
</table>
|
|
54
|
+
</tal:manager>
|
|
55
|
+
|
|
56
|
+
<tal:user condition="not:manager_users_to_notify">
|
|
57
|
+
<p><strong>NOTE:</strong> The table below displays the countries that will be notified, and the number of users for each country.</p>
|
|
58
|
+
<table class="listing">
|
|
59
|
+
<thead>
|
|
60
|
+
<tr>
|
|
61
|
+
<th>Notify?</th>
|
|
62
|
+
<th>Name</th>
|
|
63
|
+
<th>Number of users</th>
|
|
64
|
+
</tr>
|
|
65
|
+
</thead>
|
|
66
|
+
<tbody>
|
|
67
|
+
<tr tal:repeat="country_data countries_to_notify">
|
|
68
|
+
<td><input type="checkbox" name="countries_a2:list" value="${python:country_data.a2}" checked="checked" /></td>
|
|
69
|
+
<td>${python:country_data.name}</td>
|
|
70
|
+
<td>${python:country_data.user_count}</td>
|
|
71
|
+
</tr>
|
|
72
|
+
</tbody>
|
|
73
|
+
</table>
|
|
74
|
+
</tal:user>
|
|
75
|
+
|
|
76
|
+
<div class="field">
|
|
77
|
+
<label for="mailFrom">From</label>
|
|
78
|
+
<div class="formHelp">The email address from which the email will be sent. <strong>This cannot be changed.</strong></div>
|
|
79
|
+
<input id="mailFrom" type="text" value="${python:view.mail_from_address}" disabled="disabled" readonly="readonly" />
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<div class="field">
|
|
83
|
+
<label for="mailSubject">Message subject</label>
|
|
84
|
+
<div class="formHelp">The subject that will be used in the email.</div>
|
|
85
|
+
<input id="mailSubject" type="text" name="subject" value="${python:view.default_subject}" disabled="${python:not(will_notify_num) and 'disabled' or None}" />
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<div class="field">
|
|
89
|
+
<label for="mailContent">Message content</label>
|
|
90
|
+
<div class="formHelp">
|
|
91
|
+
You can customise the message being sent, below. There are some parameters that you can use, described below:
|
|
92
|
+
<dl>
|
|
93
|
+
<tal:ditem repeat="param python:view.known_parameters">
|
|
94
|
+
<dt>${python:param[0]}</dt>
|
|
95
|
+
<dd>${python:param[1]}</dd>
|
|
96
|
+
</tal:ditem>
|
|
97
|
+
</dl>
|
|
98
|
+
</div>
|
|
99
|
+
<textarea id="mailContent" name="content" rows="15" disabled="${python:not(will_notify_num) and 'disabled' or None}">${python:view.default_content}</textarea>
|
|
100
|
+
</div>
|
|
101
|
+
|
|
102
|
+
<button type="submit" class="standardButton" disabled="${python:not(will_notify_num) and 'disabled' or None}">Confirm sending reminder</button>
|
|
103
|
+
<strong tal:condition="python:not(will_notify_num)">Sending disabled as it will not notify anyone (there are no observations in the required state).</strong>
|
|
104
|
+
|
|
105
|
+
</form>
|
|
106
|
+
|
|
107
|
+
</metal:content>
|
|
108
|
+
|
|
109
|
+
</metal:page>
|
|
@@ -321,8 +321,8 @@
|
|
|
321
321
|
id python:item[0]"/>
|
|
322
322
|
<label tal:attributes="for python:item[0];"
|
|
323
323
|
tal:content="python:item[1]"></label><br/>
|
|
324
|
-
<br tal:condition="python:item[0] in ['unece','acc']"/>
|
|
325
|
-
<div tal:condition="python:item[0] in ['unece','acc']" class="esdLabel">Draft/final conclusion flags</div>
|
|
324
|
+
<br tal:condition="python:item[0] in ['unece', 'acc', 'comparability']"/>
|
|
325
|
+
<div tal:condition="python:item[0] in ['unece', 'acc', 'comparability']" class="esdLabel">Draft/final conclusion flags</div>
|
|
326
326
|
|
|
327
327
|
</tal:block>
|
|
328
328
|
</tal:block>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
rec-fu,Recommendation follow-up
|
|
2
|
+
re-fu,RE follow-up
|
|
3
|
+
tc-fu,TC follow-up
|
|
4
|
+
adjustment,Adjustment
|
|
5
|
+
guidebook-2019,Guidebook 2019 Finding
|
|
6
|
+
ptc,Potential technical correction (PTC)
|
|
7
|
+
transparency,Transparency
|
|
8
|
+
cccuracy,Accuracy
|
|
9
|
+
completeness,Completeness
|
|
10
|
+
consistency,Consistency
|
|
11
|
+
comparability,Comparability
|
|
12
|
+
nsms,Not sent to Member State
|
|
13
|
+
tc,Technical Correction (TC)
|
|
14
|
+
rev-est,Revised Estimate
|
|
15
|
+
recommendation,Recommendation
|
|
16
|
+
unquantified-potential-technical-correction,Unquantified Potential Technical Correction
|
|
17
|
+
proxy-solution,Proxy Solution (PS)
|
|
@@ -79,6 +79,12 @@ REVIEWFOLDER_TYPES = SimpleVocabulary.fromItems((
|
|
|
79
79
|
(u'Projection', 'projection')))
|
|
80
80
|
|
|
81
81
|
|
|
82
|
+
HIGHLIGHT_VOCABULARY_TYPES = SimpleVocabulary.fromItems((
|
|
83
|
+
(u'Default: Projection or Inventory pre 2024', ''),
|
|
84
|
+
(u'Inventory 2024 onwards', 'highlight_2024_onwards'),
|
|
85
|
+
(u'Inventory pre 2024', 'highlight'),
|
|
86
|
+
(u'Projection', 'highlight_projection')))
|
|
87
|
+
|
|
82
88
|
# Cache helper methods
|
|
83
89
|
def _user_name(fun, self, userid):
|
|
84
90
|
return (userid, time.time() // 86400)
|
|
@@ -201,6 +207,13 @@ class IReviewFolder(directives.form.Schema, IImageScaleTraversable):
|
|
|
201
207
|
required=True,
|
|
202
208
|
)
|
|
203
209
|
|
|
210
|
+
highlight_vocabulary = schema.Choice(
|
|
211
|
+
title=u"Highlight vocabulary",
|
|
212
|
+
source=HIGHLIGHT_VOCABULARY_TYPES,
|
|
213
|
+
required=True,
|
|
214
|
+
default='',
|
|
215
|
+
)
|
|
216
|
+
|
|
204
217
|
tableau_statistics = schema.Text(
|
|
205
218
|
title=u'Tableau statistics embed code',
|
|
206
219
|
required=False,
|
|
@@ -313,17 +326,8 @@ class ReviewFolderMixin(BrowserView):
|
|
|
313
326
|
return countries
|
|
314
327
|
|
|
315
328
|
def get_highlights(self):
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
voc = vtool.getVocabularyByName('highlight')
|
|
319
|
-
else:
|
|
320
|
-
voc = vtool.getVocabularyByName('highlight_projection')
|
|
321
|
-
highlights = []
|
|
322
|
-
voc_terms = voc.getDisplayList(self).items()
|
|
323
|
-
for term in voc_terms:
|
|
324
|
-
highlights.append((term[0], term[1]))
|
|
325
|
-
|
|
326
|
-
return highlights
|
|
329
|
+
factory = getUtility(IVocabularyFactory, name='emrt.necd.content.highlight')
|
|
330
|
+
return [[term.value, term.title] for term in factory(self.context)]
|
|
327
331
|
|
|
328
332
|
def get_review_years(self):
|
|
329
333
|
catalog = api.portal.get_tool('portal_catalog')
|
|
@@ -41,9 +41,13 @@ VOCABULARIES = [
|
|
|
41
41
|
'filename': 'scenario_type.csv',
|
|
42
42
|
},
|
|
43
43
|
{'id': 'highlight',
|
|
44
|
-
'title': '
|
|
44
|
+
'title': 'Highlight',
|
|
45
45
|
'filename': 'highlight.csv',
|
|
46
46
|
},
|
|
47
|
+
{'id': 'highlight_2024_onwards',
|
|
48
|
+
'title': 'Highlight 2024 onwards',
|
|
49
|
+
'filename': 'highlight_2024_onwards.csv',
|
|
50
|
+
},
|
|
47
51
|
{'id': 'highlight_projection',
|
|
48
52
|
'title': 'Highlight Projection',
|
|
49
53
|
'filename': 'highlight_projection.csv',
|
{emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt/necd/content/upgrades/configure.zcml
RENAMED
|
@@ -797,4 +797,18 @@
|
|
|
797
797
|
|
|
798
798
|
</genericsetup:upgradeSteps>
|
|
799
799
|
|
|
800
|
+
<genericsetup:upgradeSteps
|
|
801
|
+
source="2.5.47"
|
|
802
|
+
destination="2.5.48"
|
|
803
|
+
profile="emrt.necd.content:default">
|
|
804
|
+
|
|
805
|
+
<genericsetup:upgradeDepends
|
|
806
|
+
title="Reimport missing vocabularies."
|
|
807
|
+
description="[refs #260971] Import new highlight_2024_onwards vocabulary"
|
|
808
|
+
import_steps="emrt.necd.content.setup.vocabularies"
|
|
809
|
+
/>
|
|
810
|
+
|
|
811
|
+
</genericsetup:upgradeSteps>
|
|
812
|
+
|
|
813
|
+
|
|
800
814
|
</configure>
|
|
@@ -201,10 +201,15 @@ class Highlight(object):
|
|
|
201
201
|
|
|
202
202
|
def __call__(self, context):
|
|
203
203
|
pvoc = api.portal.get_tool('portal_vocabularies')
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
204
|
+
|
|
205
|
+
if context.highlight_vocabulary:
|
|
206
|
+
voc_name = context.highlight_vocabulary
|
|
207
|
+
else:
|
|
208
|
+
voc_name = (
|
|
209
|
+
'highlight' if context.type == 'inventory'
|
|
210
|
+
else 'highlight_projection'
|
|
211
|
+
)
|
|
212
|
+
|
|
208
213
|
voc = pvoc.getVocabularyByName(voc_name)
|
|
209
214
|
if voc is None:
|
|
210
215
|
return SimpleVocabulary([])
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 1.1
|
|
2
2
|
Name: emrt.necd.content
|
|
3
|
-
Version: 2.5.
|
|
3
|
+
Version: 2.5.48
|
|
4
4
|
Summary: Content-types for EMRT-NECD Review Tool
|
|
5
5
|
Home-page: https://github.com/eea/emrt.necd.content/
|
|
6
6
|
Author: Mikel Larreategi
|
|
@@ -15,6 +15,11 @@ Description: Introduction
|
|
|
15
15
|
Changelog
|
|
16
16
|
=========
|
|
17
17
|
|
|
18
|
+
2.5.48 (2024-04-11)
|
|
19
|
+
|
|
20
|
+
- Feature #260968 - Reminder button: allow user / country selection
|
|
21
|
+
- Task #260971 - Review if flags need updating/ all are still relevant
|
|
22
|
+
|
|
18
23
|
2.5.47 (2024-04-11)
|
|
19
24
|
|
|
20
25
|
- Bug #268428 - Unable to take extract from test site
|
{emrt.necd.content-2.5.47 → emrt.necd.content-2.5.48}/emrt.necd.content.egg-info/SOURCES.txt
RENAMED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
MANIFEST.in
|
|
4
4
|
Makefile
|
|
5
5
|
README.txt
|
|
6
|
-
TAGS
|
|
7
6
|
bootstrap.py
|
|
8
7
|
build_manylinux.sh
|
|
9
8
|
buildout.cfg
|
|
@@ -155,6 +154,7 @@ emrt/necd/content/profiles/default/necdvocabularies/fuel.csv
|
|
|
155
154
|
emrt/necd/content/profiles/default/necdvocabularies/ghg_source_category.csv
|
|
156
155
|
emrt/necd/content/profiles/default/necdvocabularies/ghg_source_sectors.csv
|
|
157
156
|
emrt/necd/content/profiles/default/necdvocabularies/highlight.csv
|
|
157
|
+
emrt/necd/content/profiles/default/necdvocabularies/highlight_2024_onwards.csv
|
|
158
158
|
emrt/necd/content/profiles/default/necdvocabularies/highlight_projection.csv
|
|
159
159
|
emrt/necd/content/profiles/default/necdvocabularies/parameter.csv
|
|
160
160
|
emrt/necd/content/profiles/default/necdvocabularies/pollutants.csv
|