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

@@ -0,0 +1,5 @@
{% set value_previous = '0' if is_blank_row else assessment_type_preview.id_type %}
{% set text_previous = '' if is_blank_row else assessment_type_preview.name %}
<div class="{{ model.FLAG_ASSESSMENT_TYPE }}" {{ model.ATTR_VALUE_PREVIOUS }}="{{ value_previous }}" {{ model.ATTR_VALUE_CURRENT }}="{{ value_previous }}">{{ text_previous }}</div>

View File

@@ -0,0 +1,5 @@
{% set value_previous = '0' if is_blank_row else reinforcement_schedule_preview.id_type %}
{% set text_previous = '' if is_blank_row else reinforcement_schedule_preview.name %}
<div class="{{ model.FLAG_REINFORCEMENT_SCHEDULE }}" {{ model.ATTR_VALUE_PREVIOUS }}="{{ value_previous }}" {{ model.ATTR_VALUE_CURRENT }}="{{ value_previous }}">{{ text_previous }}</div>

View File

@@ -0,0 +1,11 @@
<div class="{{ model.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK }} {{ model.FLAG_DDL_PREVIEW }} {{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
{% if is_blank_row or assessment_command_modality_link_previews == none or assessment_command_modality_link_previews | length == 0 %}
Add Modality
{% else %}
{% for acm_link_preview in assessment_command_modality_link_previews %}
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">{{ acm_link_preview.command_modality.name }}</div>
{% endfor %}
{% endif %}
</div>

View File

@@ -0,0 +1,11 @@
<div class="{{ model.FLAG_ASSESSMENT_COMMAND_TECHNIQUE_LINK }} {{ model.FLAG_DDL_PREVIEW }} {{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
{% if is_blank_row or assessment_command_technique_link_previews == none or assessment_command_technique_link_previews | length == 0 %}
Add Training Technique
{% else %}
{% for acm_link_preview in assessment_command_technique_link_previews %}
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">{{ acm_link_preview.command_technique.name }}</div>
{% endfor %}
{% endif %}
</div>

View File

@@ -2,7 +2,7 @@
<div class="{{ model.FLAG_ASSESSMENT_RESPONSE }} {{ model.FLAG_DDL_PREVIEW }} {{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
{% if is_blank_row or assessment_response_previews == none or assessment_response_previews | length == 0 %}
Add response
Add Response
{% else %}
{% for assessment_response_preview in assessment_response_previews %}
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">{{ assessment_response_preview.response_quality_metric.name }} - {{ assessment_response_preview.obedience_level.name }} - {{ assessment_response_preview.value_measured }} {{ assessment_response_preview.response_quality_metric.unit_measurement.symbol }}</div>

View File

@@ -0,0 +1,11 @@
<div class="{{ model.FLAG_DISTRACTION }} {{ model.FLAG_DDL_PREVIEW }} {{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
{% if is_blank_row or distraction_previews == none or distraction_previews | length == 0 %}
Add response
{% else %}
{% for distraction_preview in distraction_previews %}
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">{{ distraction_preview.distraction_type.name }}</div>
{% endfor %}
{% endif %}
</div>

View File

@@ -23,6 +23,7 @@
{% include 'components/dog/_preview_DDL_user.html' %}
</td>
{% include 'components/dog/_td_notes.html' %}
<td class="{{ model.FLAG_START_ON }}"></td>
{% set active = True %}
{% include 'components/dog/_td_active.html' %}
</tr>
@@ -31,6 +32,11 @@
<td class="{{ model.FLAG_DETAIL }}">
<button class="{{ model.FLAG_DETAIL }} {{ model.FLAG_ASSESSMENT }}">Detail</button>
</td>
{% 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' %}
@@ -46,6 +52,7 @@
{{ model.ATTR_VALUE_PREVIOUS }}="{{ assessment.temperature_celcius }}"
value="{{ assessment.temperature_celcius }}" />
</td>
#}
{% set location_preview = assessment.location %}
<td class="{{ model.FLAG_LOCATION }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_location.html' %}
@@ -57,6 +64,7 @@
</td>
{% set notes = assessment.notes %}
{% include 'components/dog/_td_notes.html' %}
<td class="{{ model.FLAG_START_ON }}">{{ model.format_datetime_text(assessment.start_on) }}</td>
{% set active = assessment.active %}
{% include 'components/dog/_td_active.html' %}
</tr>

View File

@@ -0,0 +1,169 @@
{% if is_blank_row %}
<tr class="{{ model.FLAG_ROW_NEW }} {{ model.FLAG_ASSESSMENT_COMMAND_LINK }}" {{ model.ATTR_ID_ASSESSMENT_COMMAND_LINK }}>
<td class="{{ model.FLAG_COMMAND_CATEGORY }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_command_category.html' %}
</td>
<td class="{{ model.FLAG_COMMAND }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_command.html' %}
</td>
<td class="{{ model.FLAG_REINFORCEMENT_SCHEDULE }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_reinforcement_schedule.html' %}
</td>
{#
<td class="{{ model.FLAG_COMMAND_MODALITY }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_command_modality.html' %}
</td>
<td class="{{ model.FLAG_BRIBE }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_bribe.html' %}
</td>
#}
<td class="{{ model.FLAG_DISTANCE_FROM_HANDLER_METRES }}">
<input type="number" min="0" step="0.01"
class="{{ model.FLAG_DISTANCE_FROM_HANDLER_METRES }}"
{{ model.ATTR_VALUE_CURRENT }}="0" {{ model.ATTR_VALUE_PREVIOUS }}="0"
value="0" />
</td>
<td class="{{ model.FLAG_IS_IN_HEARING_RANGE_OF_HANDLER }}">
<input type="checkbox"
class="{{ model.FLAG_IS_IN_HEARING_RANGE_OF_HANDLER }}"
{{ model.ATTR_VALUE_CURRENT }}="true" {{ model.ATTR_VALUE_PREVIOUS }}="true"
checked />
</td>
<td class="{{ model.FLAG_IS_IN_SCENT_RANGE_OF_HANDLER }}">
<input type="checkbox"
class="{{ model.FLAG_IS_IN_SCENT_RANGE_OF_HANDLER }}"
{{ model.ATTR_VALUE_CURRENT }}="true" {{ model.ATTR_VALUE_PREVIOUS }}="true"
checked />
</td>
<td class="{{ model.FLAG_IS_IN_SIGHT_OF_HANDLER }}">
<input type="checkbox"
class="{{ model.FLAG_IS_IN_SIGHT_OF_HANDLER }}"
{{ model.ATTR_VALUE_CURRENT }}="true" {{ model.ATTR_VALUE_PREVIOUS }}="true"
checked />
</td>
<td class="{{ model.FLAG_IS_ON_LEAD }}">
<input type="checkbox"
class="{{ model.FLAG_IS_ON_LEAD }}"
{{ model.ATTR_VALUE_CURRENT }}="true" {{ model.ATTR_VALUE_PREVIOUS }}="true"
checked />
</td>
<td class="{{ model.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK }}">
{% include 'components/dog/_preview_table_assessment_command_modality_link.html' %}
</td>
<td class="{{ model.FLAG_ASSESSMENT_COMMAND_TECHNIQUE_LINK }}">
{% include 'components/dog/_preview_table_assessment_command_technique_link.html' %}
</td>
<td class="{{ model.FLAG_DISTRACTION }}">
{% include 'components/dog/_preview_table_distraction.html' %}
</td>
<td class="{{ model.FLAG_TRIAL_COUNT }}">
<!--
<input type="number" min="0" step="1"
class="{{ model.FLAG_TRIAL_COUNT }}"
{{ model.ATTR_VALUE_CURRENT }}="0" {{ model.ATTR_VALUE_PREVIOUS }}="0"
value="0" />
-->
<div class="{{ model.FLAG_TRIAL_COUNT }}" {{ model.ATTR_VALUE_CURRENT }}="0" {{ model.ATTR_VALUE_PREVIOUS }}="0">0</div>
</td>
<td class="{{ model.FLAG_ASSESSMENT_RESPONSE }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_table_assessment_response.html' %}
</td>
{% include 'components/dog/_td_notes.html' %}
{% set active = True %}
{% include 'components/dog/_td_active.html' %}
</tr>
{% else %}
<tr class="{{ model.FLAG_ASSESSMENT_COMMAND_LINK }}" {{ model.ATTR_ID_ASSESSMENT_COMMAND_LINK }}="{{ link.id_link }}">
{% set command_preview = link.command %}
{% set command_category_preview = command_preview.command_category %}
<td class="{{ model.FLAG_COMMAND_CATEGORY }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_command_category.html' %}
</td>
<td class="{{ model.FLAG_COMMAND }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_command.html' %}
</td>
{% set reinforcement_schedule_preview = link.reinforcement_schedule %}
<td class="{{ model.FLAG_REINFORCEMENT_SCHEDULE }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_reinforcement_schedule.html' %}
</td>
{#
{% set command_modality_preview = link.command_modality %}
<td class="{{ model.FLAG_COMMAND_MODALITY }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_command_modality.html' %}
</td>
{% set bribe_preview = link.bribe %}
<td class="{{ model.FLAG_BRIBE }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_bribe.html' %}
</td>
#}
<td class="{{ model.FLAG_DISTANCE_FROM_HANDLER_METRES }}">
<input type="number" min="0" step="0.01"
class="{{ model.FLAG_DISTANCE_FROM_HANDLER_METRES }}"
{{ model.ATTR_VALUE_CURRENT }}="{{ link.distance_from_handler_metres }}"
{{ model.ATTR_VALUE_PREVIOUS }}="{{ link.distance_from_handler_metres }}"
value="{{ link.distance_from_handler_metres }}" />
</td>
<td class="{{ model.FLAG_IS_IN_HEARING_RANGE_OF_HANDLER }}">
<input type="checkbox"
class="{{ model.FLAG_IS_IN_HEARING_RANGE_OF_HANDLER }}"
{{ model.ATTR_VALUE_CURRENT }}="{{ link.active | lower }}"
{{ model.ATTR_VALUE_PREVIOUS }}="{{ link.active | lower }}"
{% if link.active %}checked{% endif %} />
</td>
<td class="{{ model.FLAG_IS_IN_SCENT_RANGE_OF_HANDLER }}">
<input type="checkbox"
class="{{ model.FLAG_IS_IN_SCENT_RANGE_OF_HANDLER }}"
{{ model.ATTR_VALUE_CURRENT }}="{{ link.active | lower }}"
{{ model.ATTR_VALUE_PREVIOUS }}="{{ link.active | lower }}"
{% if link.active %}checked{% endif %} />
</td>
<td class="{{ model.FLAG_IS_IN_SIGHT_OF_HANDLER }}">
<input type="checkbox"
class="{{ model.FLAG_IS_IN_SIGHT_OF_HANDLER }}"
{{ model.ATTR_VALUE_CURRENT }}="{{ link.active | lower }}"
{{ model.ATTR_VALUE_PREVIOUS }}="{{ link.active | lower }}"
{% if link.active %}checked{% endif %} />
</td>
<td class="{{ model.FLAG_IS_ON_LEAD }}">
<input type="checkbox"
class="{{ model.FLAG_IS_ON_LEAD }}"
{{ model.ATTR_VALUE_CURRENT }}="{{ link.active | lower }}"
{{ model.ATTR_VALUE_PREVIOUS }}="{{ link.active | lower }}"
{% if link.active %}checked{% endif %} />
</td>
<td class="{{ model.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK }}">
{% set assessment_command_modality_link_previews = link.assessment_command_modality_links %}
{% include 'components/dog/_preview_table_assessment_command_modality_link.html' %}
</td>
<td class="{{ model.FLAG_ASSESSMENT_COMMAND_TECHNIQUE_LINK }}">
{% set assessment_command_modality_link_previews = link.assessment_command_technique_links %}
{% include 'components/dog/_preview_table_assessment_command_technique_link.html' %}
</td>
<td class="{{ model.FLAG_DISTRACTION }}">
{% set distraction_previews = link.distractions %}
{% include 'components/dog/_preview_table_distraction.html' %}
</td>
<td class="{{ model.FLAG_TRIAL_COUNT }}">
<!--
<input type="number" min="0" step="1"
class="{{ model.FLAG_TRIAL_COUNT }}"
{{ model.ATTR_VALUE_CURRENT }}="{{ link.trial_count }}"
{{ model.ATTR_VALUE_PREVIOUS }}="{{ link.trial_count }}"
value="{{ link.trial_count }}" />
-->
<div class="{{ model.FLAG_TRIAL_COUNT }}"
{{ model.ATTR_VALUE_CURRENT }}="{{ link.trial_count }}"
{{ model.ATTR_VALUE_PREVIOUS }}="{{ link.trial_count }}"
>{{ link.trial_count }}</div>
</td>
<td class="{{ model.FLAG_ASSESSMENT_RESPONSE }} {{ model.FLAG_DDL_PREVIEW }}">
{% set assessment_response_previews = link.assessment_responses %}
{% include 'components/dog/_preview_table_assessment_response.html' %}
</td>
{% set notes = link.notes %}
{% include 'components/dog/_td_notes.html' %}
{% set active = link.active %}
{% include 'components/dog/_td_active.html' %}
</tr>
{% endif %}

View File

@@ -1,6 +1,6 @@
{% if is_blank_row %}
<tr class="{{ model.FLAG_ROW_NEW }} {{ model.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK }}" {{ model.ATTR_ID_ASSESSMENT_COMMAND_MODALITY_LINK }}>
<tr class="{{ model.FLAG_ROW_NEW }} {{ model.FLAG_ASSESSMENT_COMMAND_LINK }}" {{ model.ATTR_ID_ASSESSMENT_COMMAND_LINK }}>
<td class="{{ model.FLAG_COMMAND_CATEGORY }} {{ model.FLAG_DDL_PREVIEW }}">
{% include 'components/dog/_preview_DDL_command_category.html' %}
</td>
@@ -60,7 +60,7 @@
{% include 'components/dog/_td_active.html' %}
</tr>
{% else %}
<tr class="{{ model.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK }}" {{ model.ATTR_ID_ASSESSMENT_COMMAND_MODALITY_LINK }}="{{ link.id_link }}">
<tr class="{{ model.FLAG_ASSESSMENT_COMMAND_LINK }}" {{ model.ATTR_ID_ASSESSMENT_COMMAND_LINK }}="{{ link.id_link }}">
{% set command_preview = link.command %}
{% set command_category_preview = command_preview.command_category %}
<td class="{{ model.FLAG_COMMAND_CATEGORY }} {{ model.FLAG_DDL_PREVIEW }}">