feature: scheduled flag removal

This commit is contained in:
Gary Sharp
2025-09-19 12:18:45 +10:00
parent 356762c811
commit 7603cac01a
34 changed files with 2210 additions and 1055 deletions
@@ -776,12 +776,12 @@
{
@Html.AntiForgeryToken()
<input id="Device_Show_Details_Actions_AddFlag_Dialog_Id" type="hidden" name="id" />
<input id="Device_Show_Details_Actions_AddFlag_Dialog_DeviceSerialNumber" type="hidden" name="DeviceSerialNumber" value="@Model.Device.SerialNumber" />
<input id="Device_Show_Details_Actions_AddFlag_Dialog_DeviceSerialNumber" type="hidden" name="deviceSerialNumber" value="@Model.Device.SerialNumber" />
<div class="flagPicker">
<input id="Device_Show_Details_Actions_AddFlag_Dialog_Filter" type="text" placeholder="Filter" autocomplete="off" />
@foreach (var flag in Model.AvailableDeviceFlags.OrderBy(jq => jq.Name))
{
<div class="flag" data-flagid="@(flag.Id)" data-flagname="@flag.Name">
<div class="flag" data-flagid="@(flag.Id)" data-flagname="@flag.Name" data-flagcanremove="@Model.Device.CanRemoveDeviceFlag(flag)" data-flagremovedays="@flag.DefaultRemoveDays">
<i class="fa fa-@(flag.Icon) fa-fw fa-lg d-@(flag.IconColour)"></i>@flag.Name
</div>
}
@@ -789,7 +789,12 @@
<div class="details">
<div>
<h4>Comments</h4>
<textarea name="Comments" id="Device_Show_Details_Actions_AddFlag_Dialog_Comments"></textarea>
<textarea name="comments" id="Device_Show_Details_Actions_AddFlag_Dialog_Comments"></textarea>
</div>
<div>
<h4>Remove On</h4>
<input name="removeDate" id="Device_Show_Details_Actions_AddFlag_Dialog_RemoveDate" type="date" min="@(DateTime.Today.AddDays(1).ToString("yyyy-MM-dd"))" />
<span>12:00 AM</span>
</div>
</div>
}
@@ -802,6 +807,7 @@
let flagPicker = null;
let flagAddId = null;
let flagAddComments = null;
let flagAddRemoveDate = null;
let details = null;
function flagSelected() {
@@ -812,6 +818,26 @@
flagAddId.val(flag.attr('data-flagid'));
const removeDays = flag.attr('data-flagremovedays');
if (removeDays) {
const date = new Date();
date.setDate(date.getDate() + parseInt(removeDays) - 1);
flagAddRemoveDate[0].valueAsDate = date;
flagAddRemoveDate.trigger('change');
} else {
flagAddRemoveDate[0].valueAsDate = null;
flagAddRemoveDate.trigger('change');
}
flagAddRemoveDate.closest('div').show();
if (flag.attr('data-flagcanremove') === 'True') {
flagAddRemoveDate.prop('disabled', false);
} else {
flagAddRemoveDate.prop('disabled', true);
if (!removeDays) {
flagAddRemoveDate.closest('div').hide();
}
}
details.show();
flagAddComments.focus().select();
@@ -844,6 +870,7 @@
flagAddId = $('#Device_Show_Details_Actions_AddFlag_Dialog_Id');
flagAddComments = buttonDialog.find('#Device_Show_Details_Actions_AddFlag_Dialog_Comments');
flagAddRemoveDate = buttonDialog.find('#Device_Show_Details_Actions_AddFlag_Dialog_RemoveDate');
flagPicker = buttonDialog.find('.flagPicker');
details = buttonDialog.find('.details');
@@ -864,6 +891,13 @@
});
flagPicker.on('click', 'div.flag', flagSelected);
flagAddRemoveDate.on('change', function () {
if (flagAddRemoveDate.val()) {
flagAddRemoveDate.next('span').show();
} else {
flagAddRemoveDate.next('span').hide();
}
});
}
$('#Device_Show_Details_Actions_AddFlag_Dialog_Filter').val('');