NEMO-CE 7.3.5__tar.gz → 7.3.7__tar.gz
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.
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/admin.py +12 -1
- nemo_ce-7.3.7/NEMO/migrations/0141_toolqualificationexpiration.py +103 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/models.py +81 -15
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/calendar.html +3 -1
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_tool.html +5 -88
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_training.html +9 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/tool_control/tool_status.html +2 -2
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/tool_control/usage_data.html +46 -6
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/training_new/training_base.html +11 -8
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_tools/test_tool_qualification_expiration.py +40 -30
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/api.py +6 -1
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/calendar.py +2 -3
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/customization.py +2 -9
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/timed_services.py +37 -28
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/tool_control.py +52 -24
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/training_new.py +4 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO_CE.egg-info/PKG-INFO +1 -1
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO_CE.egg-info/SOURCES.txt +1 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/PKG-INFO +1 -1
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/pyproject.toml +1 -1
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/LICENSE +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/actions.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/apps.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/static/area_access/area_access.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/already_logged_in.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/badge_not_found.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/base.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/choose_area.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/choose_project.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/door_is_open.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/farewell_screen.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/inactive.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/login_success.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/logout_success.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/logout_warning.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/no_active_projects.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/not_logged_in.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/physical_access_denied.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/resource_unavailable.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/templates/area_access/welcome_screen.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/urls.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/area_access/views.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/apps.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/static/kiosk/kiosk.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/acknowledgement.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/category_choices.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/choices.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/consumables.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/consumables_order.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/error.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/individual_reservation.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/kiosk.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/success.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/tool_categories.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/tool_information.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/tool_post_comment.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/tool_project_selection_snippet.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/tool_report_problem.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/tool_reservation.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/templates/kiosk/tool_reservation_extra.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/urls.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/kiosk/views.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/management/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/management/commands/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/management/commands/makemigrations.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migration_utils.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0001_ce_tool_accessories.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0002_ce_tool_reservation_required.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0003_ce_training_module.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0004_ce_qualification_levels.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0005_ce_add_project_to_training_request.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0006_ce_qualification_history_in_training.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0007_ce_recording_training_events.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0008_ce_qualification_level_in_training_history.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0009_ce_add_tool_grant_qualification_levels.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0010_ce_add_invitation_only_training.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0011_ce_shadowing_verification.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0012_ce_notification_types_update.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0013_ce_shadowing_reviewers_in_tool.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0014_ce_remove_default_value_tool_shadowing.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0015_ce_precursor_configurations.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0016_ce_precursor_config_allow_duplicates.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0017_ce_training_request_message.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0018_ce_training_qualification.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0019_tool_training_details_without_area_access.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0020_training_events_auto_cancel.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0021_ce_tool_logout_grace_period.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0022_ce_training_technique_description.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0023_ce_training_qualification_levels.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0024_ce_training_location.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0025_ce_charfield_max_length_constants.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0026_ce_qualification_level_fulfill_training_option.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/0027_ce_qualification_level_during_closures.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/apps/nemo_ce/migrations/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/constants.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/context_processors.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/decorators.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/evaluators.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/exceptions.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/fields.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/forms.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/interlocks.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/log.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/area_auto_logout_users.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/auto_cancel_training_sessions.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/auto_validate_charges.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/cancel_unused_reservations.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/check_and_update_wait_list.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/create_closure_alerts.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/deactivate_access_expired_users.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/manage_recurring_charges.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/manage_tool_qualifications.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/send_email_grant_access.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/send_email_interlock_usage_report.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/send_email_out_of_time_reservation_notification.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/send_email_reservation_ending_reminders.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/send_email_reservation_reminders.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/send_email_scheduled_outage_reminders.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/send_email_usage_reminders.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/send_email_user_access_expiration_reminders.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/management/commands/send_email_weekend_access_notification.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/middleware.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0001_version_1_0_0.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0002_version_1_0_0_squashed.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0012_version_2_0_0_squashed.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0020_version_3_0_0_squashed.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0038_version_4_0_0_squashed.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0055_reservationconfigurationoption.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0056_version_5_2_0.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0057_version_5_3_0.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0058_reservation_confirmation_override_prefs.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0059_tool_pre_usage_questions.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0060_add_impersonate_permission.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0061_alter_interlock_unique_together.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0062_migrate_email_upcoming_reservation.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0063_knowledge_base.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0064_consumable_self_checkout_only_users.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0065_door_adjacent_area.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0066_tool_ask_to_leave_area_when_done_using.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0067_project_allow_staff_charges.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0068_door_multiple_areas.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0069_version_5_5_0.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0070_calendar_axis_time_format_rename.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0071_wait_list.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0072_documents_display_order.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0073_knowledge_safety_items_display_order.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0074_scheduled_outage_reminders.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0075_adjustmentrequest_applied.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0076_default_display_order.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0077_interlock_name.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0078_version_5_6_0.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0079_user_active_access_expiration_verbose_names.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0080_version_6_0_0.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0081_oracle_django_4_rename.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0082_alter_userpreferences_tool_task_notifications.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0083_toolcredentials.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0084_remove_tool__allow_delayed_logoff_and_more.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0085_contactinformation_title_and_more.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0086_adjustmentrequest_new_quantity.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0087_version_7_0_0.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0088_alter_configurationoption_options.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0089_door_farewell_message.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0090_toolusagecounter_counter_direction_and_more.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0091_adjustmentrequest_waive_charges.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0092_alter_accounttype_name_alter_alert_category_and_more.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0093_trainingsession_usage_event_usageevent_training.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0094_interlockcard_extra_args.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0095_reservationquestions_enabled.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0096_alter_landingpagechoice_notifications_and_more.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0097_fundtype_project_fund_types.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0098_tool_area_maximum_future_reservations.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0099_rename_fundtype_projecttype_and_more.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0100_staff_assistance_requests.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0101_alter_emaillog_category.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0102_version_7_0_1.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0103_alter_projectdocuments_display_order_and_more.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0104_version_7_0_2.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0105_version_7_1_0.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0106_toolusagecounter_tool_pre_post_usage_question.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0107_customization_remote_work_on_behalf_update.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0108_landingpagechoice_view_permission.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0109_customization_area_logout_already_logged_in_update.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0110_version_7_1_1.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0111_version_7_1_3.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0112_fix_project_name_uniqueness.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0113_version_7_2_0.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0114_alter_temporaryphysicalaccess_options_tool__staff.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0115_tool__properties.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0116_comment_pinned.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0117_usageevent_has_ended.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0118_areaaccessrecord_has_ended.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0119_taskstatus_notify_tool_staff.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0120_alter_userpreferences_options_and_more.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0121_version_7_3_0.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0122_user_managed_accounts.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0123_account_note.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0124_userpreferences_login_redirect_url.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0125_alter_reservationquestions_name_toolusagequestions.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0126_area_abuse_weight_tool__abuse_weight.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0127_usercalendartoollist.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0128_adjustmentrequest_new_project.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0129_adjustmentrequest_original_end_and_more.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0130_reservation_note_alter_tool__staff.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0131_user_managed_users.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0132_toolusagequestions_users_and_tools_and_more.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0133_toolusagequestions_only_for_groups.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0134_usageevent_note.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0135_tool__problem_shutdown_enabled.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0136_tool__requires_area_occupancy_minimum.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0137_area_nemo_area_tree_id_lft_idx.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0138_area_late_cancellation_reservation_threshold_and_more.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0139_unplannedoutage.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/0140_alter_user_options.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/migrations_utils.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/mixins.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/model_tree.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/parsers.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/permissions.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/plugins/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/plugins/utils.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/policy.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/properties_schemas.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/provisioning.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/rates.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/rest_filter_backend.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/rest_pagination.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/serializers.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/admin/dynamic_form_preview/dynamic_form_preview.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/admin/dynamic_form_preview/dynamic_form_preview.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/admin/json_editor/jsoneditor-django.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/admin/json_editor/jsoneditor.min.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/admin/json_editor/jsoneditor_widget.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/admin/physical_access_level/access_level.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/admin/time_options_override.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/admin/tool/tool.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/badge_reader.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/bootstrap/css/bootstrap-theme.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/bootstrap/css/bootstrap-theme.css.map +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/bootstrap/css/bootstrap-theme.min.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/bootstrap/css/bootstrap.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/bootstrap/css/bootstrap.css.map +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/bootstrap/css/bootstrap.min.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/bootstrap/fonts/glyphicons-halflings-regular.svg +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/bootstrap/js/bootstrap.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/bootstrap/js/bootstrap.min.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/datetimepicker/bootstrap-datetimepicker.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/datetimepicker/bootstrap-datetimepicker.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/favicon.ico +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/fullcalendar/fullcalendar.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/fullcalendar/fullcalendar.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/fullcalendar/fullcalendar.min.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/fullcalendar/fullcalendar.min.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/icons/agreement.png +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/icons/caution.png +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/icons/preferences.png +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/jquery.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/jquery.min.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/jumbotron_watermark.bmp +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/mobile.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/moment.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/moment.min.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/moment.min.js.map +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/nemo.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/nemo.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/numpad/custom_numpad.jquery.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/numpad/numpad.jquery.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/pickadate/default.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/pickadate/default.date.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/pickadate/default.time.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/pickadate/picker.date.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/pickadate/picker.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/pickadate/picker.time.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/robots.txt +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/select2/css/select2-bootstrap.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/select2/css/select2-bootstrap.min.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/select2/css/select2.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/select2/css/select2.min.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/select2/js/select2.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/select2/js/select2.min.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/typeahead.jquery.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/typeahead.jquery.min.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/virtualkeyboard/jquery.keyboard.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/virtualkeyboard/jquery.keyboard.min.js +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/virtualkeyboard/keyboard-basic.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/static/virtualkeyboard/keyboard-basic.min.css +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/abuse/abuse.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/abuse/user_drill_down.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/accounts_and_projects/account_and_projects.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/accounts_and_projects/accounts_and_projects.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/accounts_and_projects/create_account.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/accounts_and_projects/create_project.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/accounts_and_projects/documents_for_project.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/accounts_and_projects/project.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/accounts_and_projects/projects.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/accounts_and_projects/transfer_charges.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/accounts_and_projects/users_for_project.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/acknowledgement.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/alerts.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/area_access/area_access.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/area_access/calendar_self_login.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/area_access/change_project.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/area_access/login_areas.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/area_access/new_area_access_record.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/area_access/new_area_access_record_details.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/area_access/self_login.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/authorization_failed.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/base/footer.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/base/impersonate_header.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/base/navbar.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/base/navbar_base.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/base/popup.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/base.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/accessories.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/accessories_helper.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/configuration.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/configuration_event_feed.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/new_training_event.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/policy_dialog.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/project_choice.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/proxy_reservation.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/reservation_event_feed.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/reservation_questions.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/reservation_warning.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/scheduled_outage_information.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/specific_user_feed.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/usage_event_feed.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/calendar/user_tool_lists.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/configuration/configuration_history.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/configuration/configuration_line_item.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/configuration/configuration_reservation_helper.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/configuration_agenda.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/consumables/consumables.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/consumables/consumables_order.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/consumables/recurring_charge.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/consumables/recurring_charges.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/contact/contact_staff.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_adjustment_requests.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_application.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_calendar.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_dashboard.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_emails.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_interlock.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_knowledge_base.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_projects_and_accounts.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_rates.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_recurring_charges.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_remote_work.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_requests.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_safety.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_shadowing_verification.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_templates.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_upload.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/customizations/customizations_user.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/display_success_and_redirect.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/email/compose_email.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/email/email_broadcast.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/email/email_form.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/event_details/area_access_details.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/event_details/outage_details.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/event_details/reservation_details.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/event_details/training_event_details.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/event_details/usage_details.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/facility_rules.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/feedback.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/history.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/impersonate.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/jumbotron/jumbotron.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/jumbotron/jumbotron_content.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/knowledge_base/knowledge_base.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/knowledge_base/knowledge_base_base.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/knowledge_base/knowledge_base_items.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/landing.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/login.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/maintenance/closed_task_details.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/maintenance/maintenance.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/maintenance/pending_task_details.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/mobile/cancellation_result.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/mobile/choose_item.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/mobile/error.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/mobile/individual_outage.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/mobile/individual_reservation.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/mobile/individual_training_event.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/mobile/new_reservation.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/mobile/no_active_projects.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/mobile/reservation_extra.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/mobile/reservation_success.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/mobile/view_calendar.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/news/archived_news.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/news/new_news_form.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/news/news_update_form.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/news/recent_news.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/occupancy/occupancy.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/occupancy/occupancy_content.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/occupancy/occupancy_count.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/pagination/pagination_base.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/pagination/pagination_column.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/pagination/pagination_pages.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/pagination/pagination_selector.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/qualifications.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/refresh_sidebar_icons.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/remote_work/remote_work.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/remote_work/remote_work_base.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/requests/access_requests/access_request.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/requests/access_requests/access_requests.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/requests/access_requests/access_requests_table.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/requests/adjustment_requests/adjustment_charge_summary_table.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/requests/adjustment_requests/adjustment_request.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/requests/adjustment_requests/adjustment_requests.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/requests/buddy_requests/buddy_request.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/requests/buddy_requests/buddy_requests.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/requests/staff_assistance_requests/open_staff_assistance_requests.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/requests/staff_assistance_requests/resolved_staff_assistance_requests.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/requests/staff_assistance_requests/staff_assistance_requests.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/requests/user_requests.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/resources/modify_resource.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/resources/resource_details.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/resources/resources.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/resources/scheduled_outage.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/rest_framework/api.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/rest_framework/custom_error.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/safety/safety.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/safety/safety_base.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/safety/safety_data_sheets.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/safety/safety_issues.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/safety/safety_issues_create.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/safety/safety_issues_resolved.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/safety/safety_issues_update.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/safety/safety_items.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/shadowing_verification/shadowing_verification_request.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/shadowing_verification/shadowing_verification_requests.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/shadowing_verification/shadowing_verification_requests_table.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/snippets/admin_json_editor.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/snippets/button.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/snippets/confirm_action_modal.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/snippets/contact_person.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/snippets/document_list.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/snippets/embedded_document.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/snippets/item_status_icons.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/snippets/tool_calendar_info.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/snippets/tool_info.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/snippets/tool_reservation_info.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/staff_charges/change_status.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/staff_charges/choose_project.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/staff_charges/end_area_charge.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/staff_charges/new_staff_charge.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/staff_charges/reminder.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/staff_charges/staff_charges_base.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/status_dashboard/alerts.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/status_dashboard/occupancy.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/status_dashboard/staff.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/status_dashboard/staff_absence.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/status_dashboard/status_dashboard.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/status_dashboard/tools.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/tasks/resolve.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/tasks/update.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/tool_control/get_projects.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/tool_control/interlock_error.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/tool_control/logout_user.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/tool_control/past_tasks_and_comments.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/tool_control/qualified_users.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/tool_control/tool_control.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/tool_control/use_tool_for_other.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/tool_credentials/tool_credentials.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/training/get_projects.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/training/training.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/training/training_entry.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/training/training_recording.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/training_new/training_events/create_event.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/training_new/training_events/manage_training_events.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/training_new/training_events/manage_training_events_table.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/training_new/training_events/schedule_training_events.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/training_new/training_events/schedule_training_events_list.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/training_new/training_events/upcoming_training_events.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/training_new/training_history.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/training_new/training_requests/create_request.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/training_new/training_requests/training_requests.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/training_new/training_sessions.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/usage/adjustment_request_button.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/usage/billing.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/usage/usage.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/usage/usage_base.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/users/create_or_modify_user.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/users/preferences.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/users/safe_deactivation.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/users/users.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templates/users/view_user.html +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templatetags/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templatetags/custom_tags_and_filters.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/templatetags/training_tags.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_admin.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_api/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_api/test_billing.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_api/test_crud.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_area_access.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_calendar/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_calendar/test_area_reservation.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_calendar/test_calendar.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_calendar/test_outage.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_calendar/test_tool_freed_time.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_calendar/test_tool_reservation.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_ce/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_ce/test_grant_access_email.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_ce/test_precursor_schedule.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_ce/test_trainings_auto_cancel.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_closures.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_consumables.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_deactivate_access_expired_users.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_dynamic_form.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_evaluators.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_formats.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_interlocks/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_interlocks/test_modbus_interlock.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_interlocks/test_stanford_interlock.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_interlocks/test_web_relay_interlock.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_misc.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_requests/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_requests/test_adjustment_requests.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_send_email.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_settings.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_shadowing_verification.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_staff_charges.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_staff_on_tool.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_tools/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_tools/test_tool.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_tools/test_waitlist.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_urls.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_urls_api.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_users.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/tests/test_utilities.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/typing.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/urls.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/utilities.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/validators.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/abuse.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/access_requests.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/accounts_and_projects.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/adjustment_requests.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/admin_autocomplete.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/alerts.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/api_billing.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/area_access.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/authentication.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/buddy_requests.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/charge_validation.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/configuration_agenda.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/constants.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/consumables.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/contact_staff.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/documents.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/email.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/event_details.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/feedback.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/get_projects.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/history.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/jumbotron.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/knowledge_base.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/landing.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/maintenance.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/mobile.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/news.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/notifications.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/pagination.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/qualifications.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/remote_work.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/resources.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/safety.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/shadowing_verification.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/sidebar.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/staff_assistance_requests.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/status_dashboard.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/tasks.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/tool_credentials.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/training.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/tutorials.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/usage.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/user_requests.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/views/users.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/widgets/__init__.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/widgets/configuration_editor.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/widgets/dynamic_form.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/widgets/item_tree.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO/wsgi.py +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO_CE.egg-info/dependency_links.txt +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO_CE.egg-info/entry_points.txt +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO_CE.egg-info/requires.txt +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/NEMO_CE.egg-info/top_level.txt +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/README.md +0 -0
- {nemo_ce-7.3.5 → nemo_ce-7.3.7}/setup.cfg +0 -0
|
@@ -287,7 +287,7 @@ class ToolAdmin(admin.ModelAdmin):
|
|
|
287
287
|
"parent_tool",
|
|
288
288
|
"_category",
|
|
289
289
|
"_operation_mode",
|
|
290
|
-
"
|
|
290
|
+
"qualified_users",
|
|
291
291
|
"_problem_shutdown_enabled",
|
|
292
292
|
"_reservation_required",
|
|
293
293
|
"_logout_grace_period",
|
|
@@ -342,6 +342,17 @@ class ToolAdmin(admin.ModelAdmin):
|
|
|
342
342
|
)
|
|
343
343
|
},
|
|
344
344
|
),
|
|
345
|
+
(
|
|
346
|
+
"Qualification expiration",
|
|
347
|
+
{
|
|
348
|
+
"fields": (
|
|
349
|
+
"_qualification_reminder_days",
|
|
350
|
+
"_qualification_expiration_days",
|
|
351
|
+
"_qualification_expiration_never_used_days",
|
|
352
|
+
"_qualification_notification_email",
|
|
353
|
+
)
|
|
354
|
+
},
|
|
355
|
+
),
|
|
345
356
|
(
|
|
346
357
|
"Area Access",
|
|
347
358
|
{
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Generated by Django 4.2.27 on 2026-01-26 20:42
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
|
|
5
|
+
import django.core.validators
|
|
6
|
+
import django.db.models.deletion
|
|
7
|
+
from django.db import migrations, models
|
|
8
|
+
|
|
9
|
+
import NEMO.fields
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def migrate_tool_qualification_expiration_forward(apps, schema_editor):
|
|
13
|
+
Tool = apps.get_model("NEMO", "Tool")
|
|
14
|
+
Customization = apps.get_model("NEMO", "Customization")
|
|
15
|
+
tool_qualification_reminder_days = Customization.objects.filter(name="tool_qualification_reminder_days").first()
|
|
16
|
+
tool_qualification_expiration_days = Customization.objects.filter(name="tool_qualification_expiration_days").first()
|
|
17
|
+
tool_qualification_expiration_never_used_days = Customization.objects.filter(
|
|
18
|
+
name="tool_qualification_expiration_never_used_days"
|
|
19
|
+
).first()
|
|
20
|
+
tool_qualification_notification = Customization.objects.filter(name="tool_qualification_cc").first()
|
|
21
|
+
for tool in Tool.objects.filter(_qualifications_never_expire=False, parent_tool__isnull=True):
|
|
22
|
+
if tool_qualification_expiration_days or tool_qualification_expiration_never_used_days:
|
|
23
|
+
if tool_qualification_reminder_days and tool_qualification_reminder_days.value:
|
|
24
|
+
tool._qualification_reminder_days = tool_qualification_reminder_days.value
|
|
25
|
+
if tool_qualification_expiration_days and tool_qualification_expiration_days.value:
|
|
26
|
+
tool._qualification_expiration_days = tool_qualification_expiration_days.value
|
|
27
|
+
if tool_qualification_expiration_never_used_days and tool_qualification_expiration_never_used_days.value:
|
|
28
|
+
tool._qualification_expiration_never_used_days = tool_qualification_expiration_never_used_days.value
|
|
29
|
+
if tool_qualification_notification and tool_qualification_notification.value:
|
|
30
|
+
tool._qualification_notification_email = tool_qualification_notification.value
|
|
31
|
+
tool.save()
|
|
32
|
+
if tool_qualification_reminder_days:
|
|
33
|
+
tool_qualification_reminder_days.delete()
|
|
34
|
+
if tool_qualification_expiration_days:
|
|
35
|
+
tool_qualification_expiration_days.delete()
|
|
36
|
+
if tool_qualification_expiration_never_used_days:
|
|
37
|
+
tool_qualification_expiration_never_used_days.delete()
|
|
38
|
+
if tool_qualification_notification:
|
|
39
|
+
tool_qualification_notification.delete()
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class Migration(migrations.Migration):
|
|
43
|
+
|
|
44
|
+
dependencies = [
|
|
45
|
+
("NEMO", "0140_alter_user_options"),
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
operations = [
|
|
49
|
+
migrations.AddField(
|
|
50
|
+
model_name="tool",
|
|
51
|
+
name="_qualification_expiration_days",
|
|
52
|
+
field=models.PositiveIntegerField(
|
|
53
|
+
db_column="qualification_expiration_days",
|
|
54
|
+
blank=True,
|
|
55
|
+
help_text="The number of days from the user’s last tool use until the qualification expires.",
|
|
56
|
+
null=True,
|
|
57
|
+
),
|
|
58
|
+
),
|
|
59
|
+
migrations.AddField(
|
|
60
|
+
model_name="tool",
|
|
61
|
+
name="_qualification_expiration_never_used_days",
|
|
62
|
+
field=models.PositiveIntegerField(
|
|
63
|
+
db_column="qualification_expiration_never_used_days",
|
|
64
|
+
blank=True,
|
|
65
|
+
help_text="Number of days from the user's first qualification until the qualification expires (if the user never used the tool).",
|
|
66
|
+
null=True,
|
|
67
|
+
),
|
|
68
|
+
),
|
|
69
|
+
migrations.AddField(
|
|
70
|
+
model_name="tool",
|
|
71
|
+
name="_qualification_notification_email",
|
|
72
|
+
field=NEMO.fields.MultiEmailField(
|
|
73
|
+
db_column="qualification_notification_email",
|
|
74
|
+
blank=True,
|
|
75
|
+
help_text="The email addresses to cc on tool qualification expiration and on reminders. Separate multiple emails with commas.",
|
|
76
|
+
max_length=2000,
|
|
77
|
+
null=True,
|
|
78
|
+
),
|
|
79
|
+
),
|
|
80
|
+
migrations.AddField(
|
|
81
|
+
model_name="tool",
|
|
82
|
+
name="_qualification_reminder_days",
|
|
83
|
+
field=models.CharField(
|
|
84
|
+
db_column="qualification_reminder_days",
|
|
85
|
+
blank=True,
|
|
86
|
+
help_text="The (optional) number of days to send a reminder prior to the user's tool qualification expiration (below). A comma-separated list can be used for multiple reminders. This applies to both expiration cases.",
|
|
87
|
+
max_length=255,
|
|
88
|
+
null=True,
|
|
89
|
+
validators=[
|
|
90
|
+
django.core.validators.RegexValidator(
|
|
91
|
+
re.compile("^\\d+(?:,\\d+)*\\Z"),
|
|
92
|
+
code="invalid",
|
|
93
|
+
message="Enter only digits separated by commas.",
|
|
94
|
+
)
|
|
95
|
+
],
|
|
96
|
+
),
|
|
97
|
+
),
|
|
98
|
+
migrations.RunPython(migrate_tool_qualification_expiration_forward, migrations.RunPython.noop),
|
|
99
|
+
migrations.RemoveField(
|
|
100
|
+
model_name="tool",
|
|
101
|
+
name="_qualifications_never_expire",
|
|
102
|
+
),
|
|
103
|
+
]
|
|
@@ -1349,10 +1349,32 @@ class Tool(SerializationByNameModel):
|
|
|
1349
1349
|
_interlock = models.OneToOneField(
|
|
1350
1350
|
"Interlock", db_column="interlock_id", blank=True, null=True, on_delete=models.SET_NULL
|
|
1351
1351
|
)
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
db_column="
|
|
1355
|
-
|
|
1352
|
+
# Qualification expiration fields
|
|
1353
|
+
_qualification_reminder_days = models.CharField(
|
|
1354
|
+
db_column="qualification_reminder_days",
|
|
1355
|
+
null=True,
|
|
1356
|
+
blank=True,
|
|
1357
|
+
max_length=CHAR_FIELD_MEDIUM_LENGTH,
|
|
1358
|
+
validators=[validate_comma_separated_integer_list],
|
|
1359
|
+
help_text="The (optional) number of days to send a reminder prior to the user's tool qualification expiration (below). A comma-separated list can be used for multiple reminders. This applies to both expiration cases.",
|
|
1360
|
+
)
|
|
1361
|
+
_qualification_expiration_days = models.PositiveIntegerField(
|
|
1362
|
+
db_column="qualification_expiration_days",
|
|
1363
|
+
null=True,
|
|
1364
|
+
blank=True,
|
|
1365
|
+
help_text="The number of days from the user’s last tool use until the qualification expires.",
|
|
1366
|
+
)
|
|
1367
|
+
_qualification_expiration_never_used_days = models.PositiveIntegerField(
|
|
1368
|
+
db_column="qualification_expiration_never_used_days",
|
|
1369
|
+
null=True,
|
|
1370
|
+
blank=True,
|
|
1371
|
+
help_text="Number of days from the user's first qualification until the qualification expires (if the user never used the tool).",
|
|
1372
|
+
)
|
|
1373
|
+
_qualification_notification_email = fields.MultiEmailField(
|
|
1374
|
+
db_column="qualification_notification_email",
|
|
1375
|
+
null=True,
|
|
1376
|
+
blank=True,
|
|
1377
|
+
help_text="The email addresses to cc on tool qualification expiration and on reminders. Separate multiple emails with commas.",
|
|
1356
1378
|
)
|
|
1357
1379
|
# Policy fields:
|
|
1358
1380
|
_requires_area_access = TreeForeignKey(
|
|
@@ -1530,17 +1552,6 @@ class Tool(SerializationByNameModel):
|
|
|
1530
1552
|
self.raise_setter_error_if_child_tool("category")
|
|
1531
1553
|
self._category = value
|
|
1532
1554
|
|
|
1533
|
-
@property
|
|
1534
|
-
def qualifications_never_expire(self):
|
|
1535
|
-
return (
|
|
1536
|
-
self.parent_tool.qualifications_never_expire if self.is_child_tool() else self._qualifications_never_expire
|
|
1537
|
-
)
|
|
1538
|
-
|
|
1539
|
-
@qualifications_never_expire.setter
|
|
1540
|
-
def qualifications_never_expire(self, value):
|
|
1541
|
-
self.raise_setter_error_if_child_tool("qualifications_never_expire")
|
|
1542
|
-
self._qualifications_never_expire = value
|
|
1543
|
-
|
|
1544
1555
|
@property
|
|
1545
1556
|
def description(self):
|
|
1546
1557
|
return self.parent_tool.description if self.is_child_tool() else self._description
|
|
@@ -1689,6 +1700,56 @@ class Tool(SerializationByNameModel):
|
|
|
1689
1700
|
self.raise_setter_error_if_child_tool("interlock")
|
|
1690
1701
|
self._interlock = value
|
|
1691
1702
|
|
|
1703
|
+
@property
|
|
1704
|
+
def qualification_reminder_days(self):
|
|
1705
|
+
return (
|
|
1706
|
+
self.parent_tool.qualification_reminder_days if self.is_child_tool() else self._qualification_reminder_days
|
|
1707
|
+
)
|
|
1708
|
+
|
|
1709
|
+
@qualification_reminder_days.setter
|
|
1710
|
+
def qualification_reminder_days(self, value):
|
|
1711
|
+
self.raise_setter_error_if_child_tool("qualification_reminder_days")
|
|
1712
|
+
self._qualification_reminder_days = value
|
|
1713
|
+
|
|
1714
|
+
@property
|
|
1715
|
+
def qualification_expiration_days(self):
|
|
1716
|
+
return (
|
|
1717
|
+
self.parent_tool.qualification_expiration_days
|
|
1718
|
+
if self.is_child_tool()
|
|
1719
|
+
else self._qualification_expiration_days
|
|
1720
|
+
)
|
|
1721
|
+
|
|
1722
|
+
@qualification_expiration_days.setter
|
|
1723
|
+
def qualification_expiration_days(self, value):
|
|
1724
|
+
self.raise_setter_error_if_child_tool("qualification_expiration_days")
|
|
1725
|
+
self._qualification_expiration_days = value
|
|
1726
|
+
|
|
1727
|
+
@property
|
|
1728
|
+
def qualification_expiration_never_used_days(self):
|
|
1729
|
+
return (
|
|
1730
|
+
self.parent_tool.qualification_expiration_never_used_days
|
|
1731
|
+
if self.is_child_tool()
|
|
1732
|
+
else self._qualification_expiration_never_used_days
|
|
1733
|
+
)
|
|
1734
|
+
|
|
1735
|
+
@qualification_expiration_never_used_days.setter
|
|
1736
|
+
def qualification_expiration_never_used_days(self, value):
|
|
1737
|
+
self.raise_setter_error_if_child_tool("qualification_expiration_never_used_days")
|
|
1738
|
+
self._qualification_expiration_never_used_days = value
|
|
1739
|
+
|
|
1740
|
+
@property
|
|
1741
|
+
def qualification_notification_email(self):
|
|
1742
|
+
return (
|
|
1743
|
+
self.parent_tool.qualification_notification_email
|
|
1744
|
+
if self.is_child_tool()
|
|
1745
|
+
else self._qualification_notification_email
|
|
1746
|
+
)
|
|
1747
|
+
|
|
1748
|
+
@qualification_notification_email.setter
|
|
1749
|
+
def qualification_notification_email(self, value):
|
|
1750
|
+
self.raise_setter_error_if_child_tool("qualification_notification_email")
|
|
1751
|
+
self._qualification_notification_email = value
|
|
1752
|
+
|
|
1692
1753
|
@property
|
|
1693
1754
|
def requires_area_access(self):
|
|
1694
1755
|
return self.parent_tool.requires_area_access if self.is_child_tool() else self._requires_area_access
|
|
@@ -2379,6 +2440,11 @@ class Tool(SerializationByNameModel):
|
|
|
2379
2440
|
else:
|
|
2380
2441
|
raise ValueError(f"A {'project' if user else 'user'} must be provided for usage questions")
|
|
2381
2442
|
|
|
2443
|
+
def get_qualification_reminder_days(self) -> List[int]:
|
|
2444
|
+
if not self.qualification_reminder_days:
|
|
2445
|
+
return []
|
|
2446
|
+
return [int(days) for days in self.qualification_reminder_days.split(",") if days]
|
|
2447
|
+
|
|
2382
2448
|
def clean(self):
|
|
2383
2449
|
errors = {}
|
|
2384
2450
|
if self.parent_tool_id:
|
|
@@ -646,7 +646,7 @@ function create_calendar()
|
|
|
646
646
|
{
|
|
647
647
|
"header":
|
|
648
648
|
{
|
|
649
|
-
left: "prev,next today{% if user.is_staff or user.is_tool_staff %} proxyReservation scheduledOutage{% endif %}{% if customizations|get_item:"training_module_enabled" == "enabled" %}{% if user|is_trainer %} scheduleTraining{% endif %} requestTraining{% endif %} login logout",
|
|
649
|
+
left: "prev,next today{% if user.is_staff or user.is_tool_staff %} proxyReservation scheduledOutage{% endif %}{% if customizations|get_item:"training_module_enabled" == "enabled" %}{% if user|is_trainer %} scheduleTraining{% endif %} {% if customizations|get_item:"training_requests_enabled" == "enabled" %}requestTraining{% endif %}{% endif %} login logout",
|
|
650
650
|
center: "title",
|
|
651
651
|
right: "agendaDay,agendaWeek,month"
|
|
652
652
|
},
|
|
@@ -752,6 +752,7 @@ function reserve_for_someone_else_callback(response, status, xml_http_request)
|
|
|
752
752
|
|
|
753
753
|
function request_training()
|
|
754
754
|
{
|
|
755
|
+
{% if customizations|get_item:"training_requests_enabled" == "enabled" %}
|
|
755
756
|
let item = get_selected_item();
|
|
756
757
|
if (item && item !== "personal_schedule" && item !== "all_tools" && item !== "all_areas" && item !== "all_areastools")
|
|
757
758
|
{
|
|
@@ -779,6 +780,7 @@ function request_training()
|
|
|
779
780
|
}
|
|
780
781
|
ajax_get(url, event_changes, function(response, status, xml_http_request) { return event_creation_success_callback(response, status, xml_http_request, post_data, callback) }, [ajax_failure_callback("Training request creation failed")])
|
|
781
782
|
}
|
|
783
|
+
{% endif %}
|
|
782
784
|
}
|
|
783
785
|
|
|
784
786
|
function login_to_area()
|
|
@@ -623,97 +623,14 @@
|
|
|
623
623
|
</div>
|
|
624
624
|
</div>
|
|
625
625
|
<div class="customization-separation" style="margin-bottom: 15px"></div>
|
|
626
|
-
<
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
<p>
|
|
630
|
-
The <a href="{% url 'customization' 'templates' %}?#tool_qualification_expiration_email_id">user tool qualification expiration email</a> need to be set to enable this feature.
|
|
631
|
-
</p>
|
|
632
|
-
<br />
|
|
633
|
-
<div class="form-group {% if errors.tool_qualification_reminder_days %}has-error{% endif %}">
|
|
634
|
-
<label class="control-label col-md-3" for="tool_qualification_reminder_days">Reminder days</label>
|
|
635
|
-
<div class="col-md-5">
|
|
636
|
-
<input type="text"
|
|
637
|
-
id="tool_qualification_reminder_days"
|
|
638
|
-
name="tool_qualification_reminder_days"
|
|
639
|
-
class="form-control"
|
|
640
|
-
value="{% if errors.tool_qualification_reminder_days %}{{ errors.tool_qualification_reminder_days.value }}{% else %}{{ tool_qualification_reminder_days }}{% endif %}" />
|
|
641
|
-
</div>
|
|
642
|
-
<div class="col-md-offset-3 col-md-9 help-block light-grey">
|
|
643
|
-
{% if errors.tool_qualification_reminder_days %}
|
|
644
|
-
{{ errors.tool_qualification_reminder_days.error }}
|
|
645
|
-
{% else %}
|
|
646
|
-
The (optional) number of days to send a reminder prior to the user's tool qualification expiration (below). A comma-separated list can be used for multiple reminders. This applies to both expiration cases.
|
|
647
|
-
{% endif %}
|
|
648
|
-
</div>
|
|
649
|
-
</div>
|
|
650
|
-
<div class="form-group {% if errors.tool_qualification_expiration_days %}has-error{% endif %}">
|
|
651
|
-
<label class="control-label col-md-3" for="tool_qualification_expiration_days">
|
|
652
|
-
Expiration days (previous tool usage)
|
|
653
|
-
</label>
|
|
654
|
-
<div class="col-md-5">
|
|
655
|
-
<input type="number"
|
|
656
|
-
step="1"
|
|
657
|
-
id="tool_qualification_expiration_days"
|
|
658
|
-
name="tool_qualification_expiration_days"
|
|
659
|
-
class="form-control"
|
|
660
|
-
value="{% if errors.tool_qualification_expiration_days %}{{ errors.tool_qualification_expiration_days.value }}{% else %}{{ tool_qualification_expiration_days }}{% endif %}" />
|
|
661
|
-
</div>
|
|
662
|
-
<div class="col-md-offset-3 col-md-9 help-block light-grey">
|
|
663
|
-
{% if errors.tool_qualification_expiration_days %}
|
|
664
|
-
{{ errors.tool_qualification_expiration_days.error }}
|
|
665
|
-
{% else %}
|
|
666
|
-
The number of days before the user's tool qualification expires since the user last used the tool.
|
|
667
|
-
{% endif %}
|
|
668
|
-
</div>
|
|
669
|
-
</div>
|
|
670
|
-
<div class="form-group {% if errors.tool_qualification_expiration_never_used_days %}has-error{% endif %}">
|
|
671
|
-
<label class="control-label col-md-3" for="tool_qualification_expiration_never_used_days">
|
|
672
|
-
Expiration days (no tool usage)
|
|
673
|
-
</label>
|
|
674
|
-
<div class="col-md-5">
|
|
675
|
-
<input type="number"
|
|
676
|
-
step="1"
|
|
677
|
-
id="tool_qualification_expiration_never_used_days"
|
|
678
|
-
name="tool_qualification_expiration_never_used_days"
|
|
679
|
-
class="form-control"
|
|
680
|
-
value="{% if errors.tool_qualification_expiration_never_used_days %}{{ errors.tool_qualification_expiration_never_used_days.value }}{% else %}{{ tool_qualification_expiration_never_used_days }}{% endif %}" />
|
|
681
|
-
</div>
|
|
682
|
-
<div class="col-md-offset-3 col-md-9 help-block light-grey">
|
|
683
|
-
{% if errors.tool_qualification_expiration_never_used_days %}
|
|
684
|
-
{{ errors.tool_qualification_expiration_never_used_days.error }}
|
|
685
|
-
{% else %}
|
|
686
|
-
The number of days before the user's tool qualification expires since the user qualified for the first time.
|
|
687
|
-
{% endif %}
|
|
688
|
-
</div>
|
|
689
|
-
</div>
|
|
690
|
-
<div class="form-group {% if errors.tool_qualification_cc %}has-error{% endif %}">
|
|
691
|
-
<label class="control-label col-md-3" for="tool_qualification_cc">Reminder/expiration CC</label>
|
|
692
|
-
<div class="col-md-5">
|
|
693
|
-
<input type="text"
|
|
694
|
-
id="tool_qualification_cc"
|
|
695
|
-
name="tool_qualification_cc"
|
|
696
|
-
class="form-control"
|
|
697
|
-
value="{% if errors.tool_qualification_cc %}{{ errors.tool_qualification_cc.value }}{% else %}{{ tool_qualification_cc }}{% endif %}"
|
|
698
|
-
placeholder="information@example.org" />
|
|
699
|
-
</div>
|
|
700
|
-
<div class="col-md-offset-3 col-md-9 help-block light-grey">
|
|
701
|
-
{% if errors.tool_qualification_cc %}
|
|
702
|
-
{{ errors.tool_qualification_cc.error }}
|
|
703
|
-
{% else %}
|
|
704
|
-
Extra email address to copy when a user's tool qualification reminder/expiration email is sent. A comma-separated list can be used.
|
|
705
|
-
{% endif %}
|
|
706
|
-
</div>
|
|
707
|
-
</div>
|
|
708
|
-
<div class="customization-separation" style="margin-bottom: 15px"></div>
|
|
709
|
-
<div class="text-center">{% button type="save" value="Save settings" %}</div>
|
|
710
|
-
</div>
|
|
711
|
-
<script type="text/javascript">
|
|
626
|
+
<div class="text-center">{% button type="save" value="Save settings" %}</div>
|
|
627
|
+
</div>
|
|
628
|
+
<script type="text/javascript">
|
|
712
629
|
$("#tool-tab-link").click(function() {setTimeout(on_tool_tab_show, 50)});
|
|
713
630
|
function on_tool_tab_show()
|
|
714
631
|
{
|
|
715
632
|
auto_size_textarea(document.getElementById('tool_control_configuration_setting_template'))
|
|
716
633
|
}
|
|
717
634
|
on_tool_tab_show();
|
|
718
|
-
|
|
719
|
-
|
|
635
|
+
</script>
|
|
636
|
+
</form>
|
|
@@ -82,6 +82,15 @@
|
|
|
82
82
|
Enable training requests/sessions scheduling
|
|
83
83
|
</label>
|
|
84
84
|
<br />
|
|
85
|
+
<input type="hidden" name="training_requests_enabled" value="off" />
|
|
86
|
+
<label>
|
|
87
|
+
<input type="checkbox"
|
|
88
|
+
name="training_requests_enabled"
|
|
89
|
+
{% if training_requests_enabled == "enabled" %}checked{% endif %}
|
|
90
|
+
value="enabled">
|
|
91
|
+
Allow users to request training (via calendar or training module)
|
|
92
|
+
</label>
|
|
93
|
+
<br />
|
|
85
94
|
<label>
|
|
86
95
|
<input type="checkbox"
|
|
87
96
|
name="training_show_in_user_requests"
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
History</a>
|
|
18
18
|
</li>
|
|
19
19
|
{% endif %}
|
|
20
|
-
{% if
|
|
20
|
+
{% if not hide_data_history or user.is_any_part_of_staff %}
|
|
21
21
|
<li style="width: 48%; text-align: center">
|
|
22
22
|
<a href="#usage_data" style="padding: 10px 5px;" onclick="load_usage_data('{{ tool.id }}');">Usage Data History</a>
|
|
23
23
|
</li>
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
<a href="#config" onclick="load_config_history('{{ tool.id }}');">Config History</a>
|
|
51
51
|
</li>
|
|
52
52
|
{% endif %}
|
|
53
|
-
{% if
|
|
53
|
+
{% if not hide_data_history or user.is_any_part_of_staff %}
|
|
54
54
|
<li>
|
|
55
55
|
<a href="#usage_data" onclick="load_usage_data('{{ tool.id }}');">Run Data History</a>
|
|
56
56
|
</li>
|
|
@@ -98,21 +98,61 @@
|
|
|
98
98
|
</div>
|
|
99
99
|
</div>
|
|
100
100
|
</form>
|
|
101
|
-
{% if run_data_table.rows or pre_run_data_table.rows %}
|
|
101
|
+
{% if data_table.rows or run_data_table.rows or pre_run_data_table.rows %}
|
|
102
102
|
<ul class="nav nav-tabs" id="usage-tabs">
|
|
103
|
+
{% if data_table.rows %}
|
|
104
|
+
<li class="active">
|
|
105
|
+
<a data-toggle="tab" href="#run-data-tab">Usage history</a>
|
|
106
|
+
</li>
|
|
107
|
+
{% endif %}
|
|
103
108
|
{% if pre_run_data_table.rows %}
|
|
104
|
-
<li
|
|
109
|
+
<li>
|
|
105
110
|
<a data-toggle="tab" href="#pre-run-data-tab">Pre-Run Data</a>
|
|
106
111
|
</li>
|
|
107
112
|
{% endif %}
|
|
108
113
|
{% if run_data_table.rows %}
|
|
109
|
-
<li
|
|
110
|
-
<a data-toggle="tab" href="#run-data-tab">Run Data</a>
|
|
114
|
+
<li>
|
|
115
|
+
<a data-toggle="tab" href="#post-run-data-tab">Post-Run Data</a>
|
|
111
116
|
</li>
|
|
112
117
|
{% endif %}
|
|
113
118
|
</ul>
|
|
114
119
|
<div class="tab-content" style="margin-bottom: 0;">
|
|
115
|
-
<div class="tab-pane
|
|
120
|
+
<div class="tab-pane active" id="run-data-tab">
|
|
121
|
+
<div class="col-md-12">
|
|
122
|
+
<div class="form-group pull-right extra-side-padding" style="padding-top: 10px">
|
|
123
|
+
{% button type="export" value="Export" onclick="load_usage_data('"|concat:tool_id|concat:"', 'all');" %}
|
|
124
|
+
</div>
|
|
125
|
+
</div>
|
|
126
|
+
<div class="panel-body">
|
|
127
|
+
{% if data_table.rows %}
|
|
128
|
+
<table class="table table-bordered table-condensed" style="margin-top: 10px">
|
|
129
|
+
<thead>
|
|
130
|
+
<tr>
|
|
131
|
+
{% for header in data_table.flat_headers %}<th>{{ header }}</th>{% endfor %}
|
|
132
|
+
</tr>
|
|
133
|
+
</thead>
|
|
134
|
+
<tbody>
|
|
135
|
+
{% for row in data_table.flat_rows %}
|
|
136
|
+
<tr>
|
|
137
|
+
{% for item in row %}
|
|
138
|
+
<td>
|
|
139
|
+
{% if item|class_name == "list" %}
|
|
140
|
+
{{ item|join:", " }}
|
|
141
|
+
{% else %}
|
|
142
|
+
{{ item|default_if_none:"" }}
|
|
143
|
+
{% endif %}
|
|
144
|
+
</td>
|
|
145
|
+
{% endfor %}
|
|
146
|
+
</tr>
|
|
147
|
+
{% endfor %}
|
|
148
|
+
</tbody>
|
|
149
|
+
</table>
|
|
150
|
+
{% else %}
|
|
151
|
+
<span class="italic">No run data was found between these dates</span>
|
|
152
|
+
{% endif %}
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
<div class="tab-pane" id="pre-run-data-tab">
|
|
116
156
|
<div class="col-md-12">
|
|
117
157
|
<div class="form-group pull-right extra-side-padding" style="padding-top: 10px">
|
|
118
158
|
{% button type="export" value="Export" onclick="load_usage_data('"|concat:tool_id|concat:"', 'pre-run');" %}
|
|
@@ -147,7 +187,7 @@
|
|
|
147
187
|
{% endif %}
|
|
148
188
|
</div>
|
|
149
189
|
</div>
|
|
150
|
-
<div class="tab-pane
|
|
190
|
+
<div class="tab-pane" id="post-run-data-tab">
|
|
151
191
|
<div class="col-md-12">
|
|
152
192
|
<div class="form-group pull-right extra-side-padding" style="padding-top: 10px">
|
|
153
193
|
{% button type="export" value="Export" onclick="load_usage_data('"|concat:tool_id|concat:"', 'run');" %}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{% extends "base.html" %}
|
|
2
2
|
{% load training_tags %}
|
|
3
|
+
{% load custom_tags_and_filters %}
|
|
3
4
|
{% block extrahead %}
|
|
4
5
|
{% load static %}
|
|
5
6
|
<script type="text/javascript" src="{% static "datetimepicker/bootstrap-datetimepicker.js" %}"></script>
|
|
@@ -13,14 +14,16 @@
|
|
|
13
14
|
{% block content %}
|
|
14
15
|
<h1 style="margin-top: 0; margin-bottom: 25px">Training dashboard</h1>
|
|
15
16
|
<ul class="nav nav-tabs">
|
|
16
|
-
{%
|
|
17
|
-
|
|
18
|
-
<
|
|
19
|
-
{
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
{% if customizations|get_item:"training_requests_enabled" == "enabled" %}
|
|
18
|
+
{% url 'training_requests' as training_requests_url %}
|
|
19
|
+
<li class="nav-item{% if training_requests_url in request.path %} active{% endif %}">
|
|
20
|
+
<a class="nav-link" href="{{ training_requests_url }}">My training requests
|
|
21
|
+
{% if training_invitation_notification_count %}
|
|
22
|
+
<span class="badge badge-tab-top">{{ training_invitation_notification_count }}</span>
|
|
23
|
+
{% endif %}
|
|
24
|
+
</a>
|
|
25
|
+
</li>
|
|
26
|
+
{% endif %}
|
|
24
27
|
{% url 'training_history' as training_history_url %}
|
|
25
28
|
<li class="nav-item{% if training_history_url in request.path %} active{% endif %}">
|
|
26
29
|
<a class="nav-link" href="{{ training_history_url }}">Training history</a>
|