Start Date and Expiry Date for Module instances and Pages #3538

This is complete excluding Reporting and Notifications which can be added at a later date.  I just really wanted to get the schema and the functionality into place.
This commit is contained in:
Leigh Pointer
2023-12-31 12:21:38 +01:00
parent b0a079dce9
commit 233f40f3e9
16 changed files with 571 additions and 182 deletions

View File

@ -48,6 +48,18 @@
</select>
</div>
</div>
<div class="row mb-1 align-items-center">
<Label Class="col-sm-3" For="effectiveDate" HelpText="The date that this module is active" ResourceKey="EffectiveDate">Effective Date: </Label>
<div class="col-sm-9">
<input type="date" id="effectiveDate" class="form-control" @bind="@_effectivedate" />
</div>
</div>
<div class="row mb-1 align-items-center">
<Label Class="col-sm-3" For="expiryDate" HelpText="The date that this module expires" ResourceKey="ExpiryDate">Expiry Date: </Label>
<div class="col-sm-9">
<input type="date" id="expiryDate" class="form-control" @bind="@_expirydate" />
</div>
</div>
<div class="row mb-1 align-items-center">
<Label Class="col-sm-3" For="allpages" HelpText="Indicate if this module should be displayed on all pages" ResourceKey="DisplayOnAllPages">Display On All Pages? </Label>
<div class="col-sm-9">
@ -114,7 +126,7 @@
<AuditInfo CreatedBy="@createdby" CreatedOn="@createdon" ModifiedBy="@modifiedby" ModifiedOn="@modifiedon"></AuditInfo>
</form>
@code {
@code {
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Edit;
public override string Title => "Module Settings";
@ -141,7 +153,8 @@
private DateTime createdon;
private string modifiedby;
private DateTime modifiedon;
private DateTime? _effectivedate = null;
private DateTime? _expirydate = null;
protected override void OnInitialized()
{
_module = ModuleState.ModuleDefinition.Name;
@ -156,6 +169,8 @@
createdon = ModuleState.CreatedOn;
modifiedby = ModuleState.ModifiedBy;
modifiedon = ModuleState.ModifiedOn;
_effectivedate = ModuleState.EffectiveDate;
_expirydate = ModuleState.ExpiryDate;
if (ModuleState.ModuleDefinition != null)
{
@ -214,12 +229,20 @@
var interop = new Interop(JSRuntime);
if (await interop.FormValid(form))
{
if (!string.IsNullOrEmpty(_title))
{
if (!ValidateEffectiveExpiryDates(_effectivedate, _expirydate))
{
AddModuleMessage(SharedLocalizer["Message.EffectiveExpiryDateError"], MessageType.Warning);
return;
}
var pagemodule = await PageModuleService.GetPageModuleAsync(ModuleState.PageModuleId);
pagemodule.PageId = int.Parse(_pageId);
pagemodule.Title = _title;
pagemodule.Pane = _pane;
pagemodule.EffectiveDate = _effectivedate;
pagemodule.ExpiryDate = _expirydate;
pagemodule.ContainerType = (_containerType != "-") ? _containerType : string.Empty;
if (!string.IsNullOrEmpty(pagemodule.ContainerType) && pagemodule.ContainerType == PageState.Page.DefaultContainerType)
{
@ -269,5 +292,33 @@
AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning);
}
}
private bool ValidateEffectiveExpiryDates(DateTime? effectiveDate, DateTime? expiryDate)
{
// Check if both dates are null, in which case the validation passes
if (effectiveDate == DateTime.MinValue && expiryDate == DateTime.MinValue)
{
return true;
}
// Check if EffectiveDate is not null and ExpiryDate is null
if (effectiveDate != DateTime.MinValue && expiryDate == DateTime.MinValue)
{
return true;
}
// Check if EffectiveDate is null and ExpiryDate is not null
if (effectiveDate == DateTime.MinValue && expiryDate != DateTime.MinValue)
{
return true;
}
// Check if ExpiryDate is not null and EffectiveDate is after ExpiryDate
if (expiryDate != DateTime.MinValue && effectiveDate != DateTime.MinValue && effectiveDate > expiryDate)
{
return false;
}
// If none of the above conditions are met, validation passes
return true;
}
}