Mit dem IDayAtAGlanceWidget
können Sie das Widget “Tag auf einem Blick” um weitere Datentypen erweitern.
Die Datentabelle sollte mindestens ein Datumsfeld haben, um es anzeigen zu können.
Zu definieren in dem Interface sind:
Eigenschaften
Guid Ihres Adapters. Als Guid nehmen Sie am Besten die DataSource Guid
:
public Guid Guid => EnumDataSourceExtension.[YOURDATATABLE].ValueGuid;
Namen Ihres Adapters. Als Name nehmen Sie am besten die übersetzte DataSource:
public string Name => EnumDataSourceExtension.[YOURDATATABLE].Text;
Methoden
IQueryable<DayAtAGlanceWidgetDataModel> GetDataQuery(DayAtAGlanceFilterModel filter).
Diese Methode wird benötigt um die Datensätze in der Liste anzuzeigen. Mit dem Filtermodel erhalten Sie das Startdatum, das Enddatum und das aktuelle Benutzerprofil. Als Rückgabewert muss die Methode
ein IQueryable
von DayAtAGlanceWidgetDataModels
haben:
IQueryable<DayAtAGlanceWidgetDataModel> IDayAtAGlanceWidget.GetDataQuery(DayAtAGlanceFilterModel filter)
{
Session session = Api.ORM.GetDefaultSession();
return Api.ORM.GetQueryWithReadPermissions<[YOURDATATABLE]>(session)
.Where(ff => !ff.IsInRecycleBin)
.Where(ff => ff.Date < filter.EndDate.AddDays(1) && ff.Date >= filter.StartDate)
.Where(ff => filter.ProfileGuids.Any(gg => gg == ff.RelatedResponsible.Oid))
.Select(ff => new DayAtAGlanceWidgetDataModel()
{
Oid = ff.Oid,
EntityTitle = ff.EntityTitle,
AllDay = ff.Date.Value < ff.Date.Value, // SQL Server can't handle constant values
Start = ff.Date,
RealStart = ff.Date,
RealEnd = ff.Date,
RelatedOwner = ff.RelatedResponsible.Oid,
OpenBehavior = EnumGridOpenActionCreateRecordTypes.TabGuid,
MainInformation = new ListControlDataText(
new ListControlDataContent(Name + ": " + ff.EntityTitle))
});
}
void GetDatesToHighlight(int month, int year, List<HighlightDateModel> highlightDates)
Diese Methode kümmert sich um die Highlights und Tooltips im Kalendar, wenn dieser Tag einen Datensatz
enthält. Dazu muss die Liste mit den HighlightDateModel
entsprechend befüllt werden:
void IDayAtAGlanceWidget.GetDatesToHighlight(int month, int year, List<HighlightDateModel> highlightDates, List<Guid> profileGuids)
{
Session session = Api.ORM.GetDefaultSession();
DateTime filterStart = new DateTime(year, month, 1);
DateTime filterEnd = filterStart.AddMonths(1);
IEnumerable<IGrouping<DateTime, DayAtAGlanceWidgetDataModel>> groupedAppointments = Api.ORM.GetQueryWithReadPermissions<[YOURDATATABLE]>(session)
.Where(ff => !ff.IsInRecycleBin)
.Where(ff => ff.Date < filterEnd && ff.Date >= filterStart)
.Where(ff => filter.ProfileGuids.Any(gg => gg == ff.RelatedResponsible.Oid))
.Select(ff => new DayAtAGlanceWidgetDataModel()
{
Oid = ff.Oid,
EntityTitle = ff.EntityTitle,
AllDay = ff.Date.Value < ff.Date.Value, // SQL Server can't handle constant values
Start = ff.Date,
RealStart = ff.Date,
RealEnd = ff.Date,
RelatedOwner = ff.RelatedResponsible.Oid,
OpenBehavior = EnumGridOpenActionCreateRecordTypes.TabGuid,
Tooltip = [YOURDATATABLE].Text + " " + ff.Date.ToShortTimeString() + " (" + Api.Enum.GetEnumValue<EnumFollowUpStatus>(ff.Status.ToGuid()).Text + ") <br/>" + ff.EntityTitle
})
.AsEnumerable()
.GroupBy(ff => ff.Start.Date).ToList();
foreach (IGrouping<DateTime, DayAtAGlanceWidgetDataModel> dayGroup in groupedAppointments)
{
foreach (DayAtAGlanceWidgetDataModel day in dayGroup.OrderByDescending(ff => ff.AllDay).ThenBy(ff => ff.Start).ThenByDescending(ff => ff.EntityTitle))
{
HighlightDateModel model = highlightDates.FirstOrDefault(b => b.DayToHighlight == dayGroup.Key.Day);
if (model == null)
{
model = new HighlightDateModel() { DayToHighlight = dayGroup.Key.Day, DayAtAGlanceWidgetDataModels = new List<DayAtAGlanceWidgetDataModel>() { day } };
highlightDates.Add(model);
}
else
model.DayAtAGlanceWidgetDataModels.Add(day);
}
}
}