Feat: Architecture redesign for Assessments, Commands, Modalities, Training Techniques, Reinforcement Schedules, Distractions, and Assessment Responses.

This commit is contained in:
2025-09-06 12:13:16 +01:00
parent 12f5fc994f
commit 2da465935d
158 changed files with 14781 additions and 3477 deletions

View File

@@ -85,21 +85,28 @@
<table id="{{ model.ID_TABLE_ASSESSMENT }}" class="{{ model.FLAG_TABLE_MAIN }} {{ model.FLAG_ROW }} {{ model.FLAG_CARD }} {{ model.FLAG_ASSESSMENT }}">
<thead>
<tr class="{{ model.FLAG_ASSESSMENT }}">
<th class="{{ model.FLAG_ASSESSMENT_TYPE }} {{ model.FLAG_DDL_PREVIEW }}">Type</th>
<th class="{{ model.FLAG_WEATHER }} {{ model.FLAG_DDL_PREVIEW }}">Weather</th>
<th class="{{ model.FLAG_LIGHTING_LEVEL }} {{ model.FLAG_DDL_PREVIEW }}">Lighting Level</th>
<th class="{{ model.FLAG_TEMPERATURE_CELCIUS }}">Temperature (&deg;C)</th>
<th class="{{ model.FLAG_LOCATION }} {{ model.FLAG_DDL_PREVIEW }}">Location</th>
<th class="{{ model.FLAG_USER_HANDLER }}">Handler</th>
<th class="{{ model.FLAG_START_ON }}">Start</th>
<th class="{{ model.FLAG_END_ON }}">End</th>
<th class="{{ model.FLAG_NOTES }}">Notes</th>
</tr>
</thead>
<tbody>
{% set is_blank_row = (assessment.id_assessment < 1) %}
<tr class="{{ model.FLAG_ASSESSMENT }}" {{ model.ATTR_ID_ASSESSMENT }}="{{ assessment.id_assessment }}">
{% set assessment_type_preview = assessment.assessment_type %}
<td class="{{ model.FLAG_ASSESSMENT_TYPE }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_assessment_type.html' %}
</td>
{% set weather_preview = assessment.weather %}
<td class="{{ model.FLAG_WEATHER }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_weather.html' %}
</td>
</td>
{% set lighting_level_preview = assessment.lighting_level %}
<td class="{{ model.FLAG_LIGHTING_LEVEL }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_lighting_level.html' %}
@@ -120,13 +127,19 @@
<td class="{{ model.FLAG_USER_HANDLER }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_user.html' %}
</td>
<td class="{{ model.FLAG_START_ON }}">
<input type="datetime-local">
</td>
<td class="{{ model.FLAG_END_ON }}">
<input type="datetime-local">
</td>
{% set notes = assessment.notes %}
{% include 'components/dog/_td_notes.html' %}
</tr>
</tbody>
</table>
</form>
{#
<form id="{{ model.ID_FORM_DISTRACTIONS }}" class="{{ model.FLAG_ROW }} {{ model.FLAG_CARD }}">
<h2>Distractions</h2>
<table id="{{ model.ID_TABLE_DISTRACTIONS}}" class="{{ model.FLAG_TABLE_MAIN }} {{ model.FLAG_ROW }} {{ model.FLAG_CARD }} {{ model.FLAG_DISTRACTION }}">
@@ -159,29 +172,32 @@
</tbody>
</table>
</form>
#}
<form id="{{ model.ID_FORM_ASSESSMENT_COMMAND_MODALITY_LINKS }}" class="{{ model.FLAG_ROW }} {{ model.FLAG_CARD }}">
<form id="{{ model.ID_FORM_ASSESSMENT_COMMAND_LINKS }}" class="{{ model.FLAG_ROW }} {{ model.FLAG_CARD }}">
<h2>Commands and Responses</h2>
<table id="{{ model.ID_TABLE_ASSESSMENT_COMMAND_MODALITY_LINKS }}" class="{{ model.FLAG_TABLE_MAIN }} {{ model.FLAG_ROW }} {{ model.FLAG_CARD }} {{ model.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK }}">
<table id="{{ model.ID_TABLE_ASSESSMENT_COMMAND_LINKS }}" class="{{ model.FLAG_TABLE_MAIN }} {{ model.FLAG_ROW }} {{ model.FLAG_CARD }} {{ model.FLAG_ASSESSMENT_COMMAND_LINK }}">
<thead>
<tr class="{{ model.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK }}">
<tr class="{{ model.FLAG_ASSESSMENT_COMMAND_LINK }}">
<th class="{{ model.FLAG_COMMAND_CATEGORY }} {{ model.FLAG_DDL_PREVIEW }}" rowspan="2">Command Category</th>
<th class="{{ model.FLAG_COMMAND }} {{ model.FLAG_DDL_PREVIEW }}" rowspan="2">Command</th>
<th class="{{ model.FLAG_COMMAND_MODALITY }} {{ model.FLAG_DDL_PREVIEW }}" rowspan="2">Command Modality</th>
<th class="{{ model.FLAG_BRIBE }} {{ model.FLAG_DDL_PREVIEW }}" rowspan="2">Bribe</th>
<th class="{{ model.FLAG_REINFORCEMENT_SCHEDULE }} {{ model.FLAG_DDL_PREVIEW }}" rowspan="2">Reinforcement Schedule</th>
<th class="{{ model.FLAG_DISTANCE_FROM_HANDLER_METRES }} {{ model.FLAG_DDL_PREVIEW }}" rowspan="2">Distance From Handler</th>
<th class="{{ model.FLAG_IS_IN_SIGHT_OF_HANDLER }}" colspan="3" rowspan="1">In Range Of Handler?</th>
<th class="{{ model.FLAG_IS_ON_LEAD }} {{ model.FLAG_DDL_PREVIEW }}" rowspan="2">On Lead?</th>
<th class="{{ model.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK }}" rowspan="2">Modalities</th>
<th class="{{ model.FLAG_ASSESSMENT_COMMAND_TECHNIQUE_LINK }}" rowspan="2">Techniques</th>
<th class="{{ model.FLAG_DISTRACTION }}" rowspan="2">Distractions</th>
<th class="{{ model.FLAG_TRIAL_COUNT }} {{ model.FLAG_DDL_PREVIEW }}" rowspan="2">Trial Count</th>
<th class="{{ model.FLAG_NOTES }}" rowspan="2">Notes</th>
<th class="{{ model.FLAG_ASSESSMENT_RESPONSE }}" rowspan="2">Responses</th>
<th class="{{ model.FLAG_NOTES }}" rowspan="2">Notes</th>
<th class="{{ model.FLAG_ACTIVE }}" rowspan="2">
{% set class_name = model.FLAG_ACTIVE %}
{% set attribute_text = '' %}
{% include 'components/common/buttons/_icon_add.html' %}
</th>
</tr>
<tr class="{{ model.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK }}">
<tr class="{{ model.FLAG_ASSESSMENT_COMMAND_LINK }}">
<th class="{{ model.FLAG_IS_IN_HEARING_RANGE_OF_HANDLER }} {{ model.FLAG_DDL_PREVIEW }}" rowspan="1">Sound</th>
<th class="{{ model.FLAG_IS_IN_SCENT_RANGE_OF_HANDLER }} {{ model.FLAG_DDL_PREVIEW }}" rowspan="1">Scent</th>
<th class="{{ model.FLAG_IS_IN_SIGHT_OF_HANDLER }} {{ model.FLAG_DDL_PREVIEW }}" rowspan="1">Sight</th>
@@ -189,12 +205,12 @@
</thead>
<tbody>
{% set is_blank_row = False %}
{% for link in assessment.assessment_command_modality_links %}
{% include 'components/dog/_row_assessment_command_modality_link.html' %}
{% for link in assessment.assessment_command_links %}
{% include 'components/dog/_row_assessment_command_link.html' %}
{% endfor %}
{% set is_blank_row = True %}
{% include 'components/dog/_row_assessment_command_modality_link.html' %}
{% include 'components/dog/_row_assessment_command_link.html' %}
</tbody>
</table>
</form>
@@ -216,7 +232,7 @@
<script>
var assessments = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.assessments) | tojson | safe }};
var assessment = assessments[{{ assessment.id_assessment }}];
var filterBribes = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_bribes) | tojson | safe }};
var filterAssessmentTypes = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_assessment_types) | tojson | safe }};
var filterCommandCategories = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_command_categories) | tojson | safe }};
var filterCommandModalities = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_command_modalities) | tojson | safe }};
var filterCommands = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_commands) | tojson | safe }};
@@ -225,17 +241,17 @@
var filterLightingLevels = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_lighting_levels) | tojson | safe }};
var filterLocations = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_locations) | tojson | safe }};
var filterObedienceLevels = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_obedience_levels) | tojson | safe }};
var filterReinforcementSchedules = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_reinforcement_schedules) | tojson | safe }};
var filterResponseQualityMetrics = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_response_quality_metrics) | tojson | safe }};
var filterTrainingTechniques = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_training_techniques) | tojson | safe }};
var filterUserHandlers = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_user_handlers) | tojson | safe }};
var filterWeathers = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_weathers) | tojson | safe }};
var flagCommandModality = "{{ model.FLAG_COMMAND_MODALITY }}";
var flagDistanceFromHandlerMetres = "{{ model.FLAG_DISTANCE_FROM_HANDLER_METRES }}";
var flagDistractionIntensityLevelEmotional = "{{ model.FLAG_DISTRACTION_INTENSITY_LEVEL_EMOTIONAL }}";
var flagDistractionIntensityLevelScent = "{{ model.FLAG_DISTRACTION_INTENSITY_LEVEL_SCENT }}";
var flagDistractionIntensityLevelSight = "{{ model.FLAG_DISTRACTION_INTENSITY_LEVEL_SIGHT }}";
var flagDistractionIntensityLevelSound = "{{ model.FLAG_DISTRACTION_INTENSITY_LEVEL_SOUND }}";
var flagDistractionIntensityLevelTouch = "{{ model.FLAG_DISTRACTION_INTENSITY_LEVEL_TOUCH }}";
var flagDistractionType = "{{ model.FLAG_DISTRACTION_TYPE }}";
var flagIsInHearingRangeOfHandler = "{{ model.FLAG_IS_IN_HEARING_RANGE_OF_HANDLER }}";
var flagIsInScentRangeOfHandler = "{{ model.FLAG_IS_IN_SCENT_RANGE_OF_HANDLER }}";
var flagIsInSightOfHandler = "{{ model.FLAG_IS_IN_SIGHT_OF_HANDLER }}";
@@ -246,11 +262,11 @@
var flagUserHandler = "{{ model.FLAG_USER_HANDLER }}";
var flagValueMeasured = "{{ model.FLAG_VALUE_MEASURED }}";
var idFormAssessment = "#{{ model.ID_FORM_ASSESSMENT }}";
var idFormAssessmentCommandModalityLinks = "#{{ model.ID_FORM_ASSESSMENT_COMMAND_MODALITY_LINKS }}";
var idFormDistractions = "#{{ model.ID_FORM_DISTRACTIONS }}";
var idFormAssessmentCommandLinks = "#{{ model.ID_FORM_ASSESSMENT_COMMAND_LINKS }}";
{# var idFormDistractions = "#{{ model.ID_FORM_DISTRACTIONS }}"; #}
var idTableAssessment = "#{{ model.ID_TABLE_ASSESSMENT }}";
var idTableAssessmentCommandModalityLinks = "#{{ model.ID_TABLE_ASSESSMENT_COMMAND_MODALITY_LINKS }}";
var idTableAssessmentResponses = "#{{ model.ID_TABLE_ASSESSMENT_RESPONSES }}";
var idTableDistractions = "#{{ model.ID_TABLE_DISTRACTIONS }}";
var idTableAssessmentCommandLinks = "#{{ model.ID_TABLE_ASSESSMENT_COMMAND_LINKS }}";
{# var idTableAssessmentResponses = "#{{ model.ID_TABLE_ASSESSMENT_RESPONSES }}"; #}
{# var idTableDistractions = "#{{ model.ID_TABLE_DISTRACTIONS }}"; #}
</script>
{% endblock %}

View File

@@ -61,12 +61,16 @@
<thead>
<tr class="{{ model.FLAG_ASSESSMENT }}">
<th class="{{ model.FLAG_DETAIL }}">Detail</th>
<th class="{{ model.FLAG_ASSESSMENT_TYPE }} {{ model.FLAG_DDL_PREVIEW }}">Type</th>
{#
<th class="{{ model.FLAG_WEATHER }} {{ model.FLAG_DDL_PREVIEW }}">Weather</th>
<th class="{{ model.FLAG_LIGHTING_LEVEL }} {{ model.FLAG_DDL_PREVIEW }}">Lighting Level</th>
<th class="{{ model.FLAG_TEMPERATURE_CELCIUS }}">Temperature (&deg;C)</th>
#}
<th class="{{ model.FLAG_LOCATION }} {{ model.FLAG_DDL_PREVIEW }}">Location</th>
<th class="{{ model.FLAG_USER_HANDLER }}">Handler</th>
<th class="{{ model.FLAG_NOTES }}">Notes</th>
<th class="{{ model.FLAG_START_ON }}">Date</th>
<th class="{{ model.FLAG_ACTIVE }}">
{% set class_name = model.FLAG_ACTIVE %}
{% set attribute_text = '' %}
@@ -101,6 +105,7 @@
<script>
var assessments = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.assessments) | tojson | safe }};
var filterAssessmentTypes = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_assessment_types) | tojson | safe }};
var filterLightingLevels = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_lighting_levels) | tojson | safe }};
var filterLocations = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_locations) | tojson | safe }};
var filterUserHandlers = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_user_handlers) | tojson | safe }};