210 lines
7.6 KiB
Plaintext
210 lines
7.6 KiB
Plaintext
@using BeWoPlanerMobil.Models
|
|
@using BeWoPlanerMobil.Util
|
|
@using BS.Shared
|
|
@using BS.Shared.DataContracts
|
|
@model MainModel
|
|
|
|
<script type="text/javascript">
|
|
function toggleGoalHeader(branchId) {
|
|
try {
|
|
$(branchId).collapse("toggle");
|
|
} catch(error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function stopToggle(e) {
|
|
try {
|
|
e.stopPropagation();
|
|
} catch(error) {
|
|
showErrorPopup(error);;
|
|
}
|
|
}
|
|
|
|
function goalTreeSearchOnChangeV2() {
|
|
try {
|
|
var text = $("#goal-search-input").val().toLowerCase();
|
|
|
|
if(text.length === 0 || !text.replace(/\s\g/, '').length) {
|
|
resetGoalTreeSearch();
|
|
return;
|
|
}
|
|
|
|
$(".goal-card, .goal-text").hide();
|
|
|
|
var goalLabels = $(".goal-name-label");
|
|
|
|
$.each(goalLabels, function (index, item) {
|
|
var label = $(item);
|
|
|
|
var goalText = $.trim(label.text());
|
|
|
|
if (false === goalText.toLowerCase().includes(text)) {
|
|
return;
|
|
}
|
|
|
|
var parents = label.parents(".goal-card, .goal-text");
|
|
parents.show();
|
|
});
|
|
} catch(error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function resetGoalTreeSearch() {
|
|
try {
|
|
$("#goal-search-input").val("");
|
|
|
|
var entries = $(".goal-text");
|
|
var treeCard = $(".goal-card");
|
|
var collapsable = treeCard.find(".collapse");
|
|
|
|
entries.show();
|
|
treeCard.show();
|
|
|
|
hideCollapsable(collapsable);
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function getCheckedGoals() {
|
|
try {
|
|
var rootElement = $("#goals-tree");
|
|
var checkboxes = rootElement.find("input");
|
|
|
|
var selectedGoals = "";
|
|
|
|
$.each(checkboxes, function(index, checkbox) {
|
|
var box = $(checkbox);
|
|
var id = box.attr("id").split("-")[2];
|
|
|
|
if(box.prop("checked") === true && !id.includes("goal")) {
|
|
selectedGoals += id + ";";
|
|
}
|
|
});
|
|
|
|
return selectedGoals.substr(0, selectedGoals.length - 1);
|
|
} catch(error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function updateSelectedGoals() {
|
|
try {
|
|
var selectedGoals = getCheckedGoals();
|
|
|
|
$.get("@Url.Action("UpdateGoals")", {pGoalOids: selectedGoals}, function (numberOfSelectedGoals) {
|
|
$("#goals-button").html(`Ziele <span class='badge badge-light text-primary'>${numberOfSelectedGoals}</span>`);
|
|
});
|
|
} catch(error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function toggleAllGoalsSelection(element) {
|
|
try {
|
|
$('.goal-input').prop("checked", $(element).is(':checked'));
|
|
updateSelectedGoals();
|
|
} catch(error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function showAllGoals() {
|
|
try {
|
|
$(".goal-collapse").collapse("show");
|
|
} catch(error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function hideAllGoals() {
|
|
try {
|
|
$(".goal-collapse").collapse("hide");
|
|
} catch(error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
</script>
|
|
|
|
@*
|
|
ToDo für Montag, 15.07.2024: Bis 30 Ziele/Maßnahmen standardmäßig alles ausklappen, ansonsten einklappen
|
|
ToDo: Alles/Nichts auswählen implementieren
|
|
*@
|
|
|
|
@helper BuildGoalTreeBranch(GoalTreeItem goalTreeItem)
|
|
{
|
|
var collapseClass = Model.GoalTree.Count <= 30 ? "collapse show" : "collapse";
|
|
|
|
var isChecked = Model.SelectedGoals.Any(a => a.ValueListEntryOid.HasValue && a.ValueListEntryOid.Value == goalTreeItem.ValueListEntryOid);
|
|
var isCheckedValue = isChecked ? "checked" : string.Empty;
|
|
|
|
var textClass = goalTreeItem.ValueListEntryType == ValueListEntryType.SupportConceptIndividualGoalCategoryType ||
|
|
goalTreeItem.ValueListEntryType == ValueListEntryType.SupportConceptIndividualGoalType
|
|
? "text-bewo-custom-goal"
|
|
: string.Empty;
|
|
|
|
RatingTypeDC ratingType = null;
|
|
|
|
if(isChecked)
|
|
{
|
|
var selectedGoal = Model.SelectedGoals.FirstOrDefault(f => f.ValueListEntryOid.HasValue && f.ValueListEntryOid.Value == goalTreeItem.ValueListEntryOid);
|
|
|
|
if(!(selectedGoal is null))
|
|
{
|
|
ratingType = Model.GoalRatingTypes.FirstOrDefault(f => f.RatingTypeOid.HasValue && f.RatingTypeOid.Value == selectedGoal.RatingTypeOid);
|
|
}
|
|
}
|
|
|
|
if(!goalTreeItem.IsLeaf)
|
|
{
|
|
<div class="card w-100 mb-3 goal-card" id="c-@goalTreeItem.ValueListEntryOid">
|
|
<div class="card-header px-2" onclick="cardHeaderClick('#goal-chevron-@goalTreeItem.ValueListEntryOid', '#collapsable-goal-tree-branch-@goalTreeItem.ValueListEntryOid')">
|
|
<div class="clearfix">
|
|
<div class="custom-control custom-checkbox goal-card-header float-left" onclick="stopToggle(event)" >
|
|
<input type="checkbox" class="custom-control-input goal-input" value="@goalTreeItem.ValueListEntryOid" @isCheckedValue id="goal-cb-@goalTreeItem.ValueListEntryOid" onchange="updateSelectedGoals()" />
|
|
<label class="custom-control-label goal-name-label @textClass" for="goal-cb-@goalTreeItem.ValueListEntryOid">@goalTreeItem.Header</label>
|
|
@if(Model.HasRightToRateGoals)
|
|
{
|
|
<span style="cursor: pointer;" id="goal-rating-@goalTreeItem.ValueListEntryOid" class="badge badge-bewo-goal-rating goal-rating-badge ml-1" onclick="showGoalRatingPopup(@goalTreeItem.ValueListEntryOid)">
|
|
@(ratingType?.DisplayName ?? goalTreeItem.RatingName)
|
|
</span>
|
|
}
|
|
</div>
|
|
<div class="btn-group float-right" role="group">
|
|
<span class="fas fa-chevron-down text-primary align-middle" id="goal-chevron-@goalTreeItem.ValueListEntryOid"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="@collapseClass goal-collapse" id="collapsable-goal-tree-branch-@goalTreeItem.ValueListEntryOid">
|
|
<div class="card-body p-1 goal-list">
|
|
@foreach(var child in goalTreeItem.Children.OrderBy(child => child.Header))
|
|
{
|
|
@BuildGoalTreeBranch(child)
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
else
|
|
{
|
|
var marginBottom = goalTreeItem.IsGoal ? "mb-3 mx-2" : "";
|
|
|
|
<div class="custom-control custom-checkbox goal-text @marginBottom">
|
|
<input type="checkbox" class="custom-control-input goal-input" id="goal-cb-@goalTreeItem.ValueListEntryOid" @isCheckedValue onchange="updateSelectedGoals()">
|
|
<label for="goal-cb-@goalTreeItem.ValueListEntryOid" class="custom-control-label goal-name-label @textClass">@goalTreeItem.Header</label>
|
|
@if(Model.HasRightToRateGoals)
|
|
{
|
|
<span id="goal-rating-@goalTreeItem.ValueListEntryOid" style="cursor: pointer;" class="badge badge-bewo-goal-rating goal-rating-badge ml-1" onclick="showGoalRatingPopup(@goalTreeItem.ValueListEntryOid)">
|
|
@(ratingType?.DisplayName ?? goalTreeItem.RatingName)
|
|
</span>
|
|
}
|
|
</div>
|
|
}
|
|
}
|
|
|
|
@foreach(var branch in Model.GoalTree.OrderBy(goalTreeItem => goalTreeItem.Header))
|
|
{
|
|
@BuildGoalTreeBranch(branch)
|
|
} |