Less requests to get Data faster
Load settings with `GetEntryWithSettingsAsync`, update `Hours` and `ViewModels`.
This commit is contained in:
@@ -13,4 +13,5 @@ public interface IHoursService {
|
||||
Task<DayTime> GetEntryAsync(int id);
|
||||
Task<DayTime> SaveEntryAsync(DayTime stunde);
|
||||
Task DeleteEntryAsync(DayTime stunde);
|
||||
Task<(DayTime dayTime, Settings settings, List<DayTime> existingDayTimes)> GetEntryWithSettingsAsync(int id);
|
||||
}
|
||||
@@ -48,6 +48,15 @@ internal class HoursService : IHoursService {
|
||||
|
||||
public async Task<DayTime> GetEntryAsync(int id) => await _repo.LoadEntry(id);
|
||||
|
||||
public async Task<(DayTime dayTime, Settings settings, List<DayTime> existingDayTimes)> GetEntryWithSettingsAsync(int id) {
|
||||
//var stunde = await _repo.LoadEntry(id);
|
||||
//var (existingDayTimes, settings) = await GetDayWithSettingsAsync(stunde.Day);
|
||||
//return (stunde, settings, existingDayTimes);
|
||||
string q = $"id={id}";
|
||||
var baseRes = await _repo.LoadBase(q);
|
||||
return (baseRes.daytime ?? new DayTime(), baseRes.settings, baseRes.daytimes ?? new List<DayTime>());
|
||||
}
|
||||
|
||||
public async Task<DayTime> SaveEntryAsync(DayTime stunde) {
|
||||
var settings = await _repo.LoadSettings();
|
||||
_validator.Validate(stunde, settings);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Jugenddienst_Stunden.Models;
|
||||
using Jugenddienst_Stunden.Types;
|
||||
|
||||
namespace Jugenddienst_Stunden.Types;
|
||||
|
||||
@@ -8,12 +9,12 @@ internal class BaseResponse {
|
||||
/// <summary>
|
||||
/// Monatsübersicht
|
||||
/// </summary>
|
||||
public Hours hour { get; set; }
|
||||
public Types.Hours hour { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Stundenliste ... für die Katz?
|
||||
/// </summary>
|
||||
public List<Hours> hours { get; set; }
|
||||
public List<Types.Hours> hours { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Liste der Stundeneinträge
|
||||
|
||||
@@ -4,24 +4,45 @@ using System.Collections.ObjectModel;
|
||||
namespace Jugenddienst_Stunden.Types;
|
||||
|
||||
public partial class Hours : ObservableObject {
|
||||
public double? Zeit;
|
||||
/// <summary>
|
||||
/// Total time in seconds for the current context.
|
||||
/// "zeit" is used by the API to represent the current recorded time value.
|
||||
/// </summary>
|
||||
public int zeit;
|
||||
|
||||
public double? Nominal;
|
||||
/// <summary>
|
||||
/// Nominal working time expectation (e.g. seconds per day or month depending on API semantics).
|
||||
/// Represents the expected amount of time to be worked.
|
||||
/// </summary>
|
||||
public int nominal;
|
||||
|
||||
//public Dictionary<DateOnly,NominalDay> nominal_day_api;
|
||||
/// <summary>
|
||||
/// List of nominal day records returned by the API.
|
||||
/// May be null when the API does not provide per-day nominal data.
|
||||
/// </summary>
|
||||
public List<NominalDay>? Nominal_day_api;
|
||||
|
||||
//public Dictionary<int,NominalWeek> nominal_week_api;
|
||||
/// <summary>
|
||||
/// List of nominal week records returned by the API.
|
||||
/// May be null when the API does not provide per-week nominal data.
|
||||
/// </summary>
|
||||
public List<NominalWeek>? Nominal_week_api;
|
||||
|
||||
//public List<string> time_line;
|
||||
public double? Zeit_total;
|
||||
|
||||
//https://stackoverflow.com/questions/29449641/deserialize-json-when-a-value-can-be-an-object-or-an-empty-array/29450279#29450279
|
||||
//[JsonConverter(typeof(JsonSingleOrEmptyArrayConverter<Hours>))]
|
||||
//public Dictionary<int,decimal> zeit_total_daily;
|
||||
/// <summary>
|
||||
/// Total time in seconds reported by the API for the current period. Nullable if not provided.
|
||||
/// </summary>
|
||||
public double? zeit_total;
|
||||
|
||||
/// <summary>
|
||||
/// Daily total time values returned by the API.
|
||||
/// Each entry represents a day with its associated time value.
|
||||
/// </summary>
|
||||
public List<TimeDay> zeit_total_daily_api;
|
||||
|
||||
/// <summary>
|
||||
/// Collection of daytime entries representing individual recorded time slots or events.
|
||||
/// Nullable when the API returns no detailed daytime information.
|
||||
/// </summary>
|
||||
public List<DayTime>? daytime;
|
||||
//public List<string> wochensumme;
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ public partial class StundeViewModel : ObservableObject, IQueryAttributable {
|
||||
alertService.AlertRaised += (s, msg) => AlertEvent?.Invoke(this, msg);
|
||||
}
|
||||
|
||||
LoadSettingsAsync();
|
||||
//LoadSettingsAsync();
|
||||
}
|
||||
|
||||
private async void LoadSettingsAsync() {
|
||||
@@ -105,6 +105,16 @@ public partial class StundeViewModel : ObservableObject, IQueryAttributable {
|
||||
}
|
||||
}
|
||||
|
||||
private async void UpdateSettingsAsync(Settings settings) {
|
||||
GlobalVar.Settings = settings;
|
||||
OptionsGemeinde = settings.Gemeinden;
|
||||
OptionsProjekt = settings.Projekte;
|
||||
OptionsFreistellung = settings.Freistellungen;
|
||||
|
||||
GemeindeAktivSet = settings.GemeindeAktivSet;
|
||||
ProjektAktivSet = settings.ProjektAktivSet;
|
||||
}
|
||||
|
||||
async Task Save() {
|
||||
bool exceptionOccurred = false;
|
||||
bool proceed = true;
|
||||
@@ -185,7 +195,9 @@ public partial class StundeViewModel : ObservableObject, IQueryAttributable {
|
||||
if (query.ContainsKey("load")) {
|
||||
//DateTime heute = DateTime.Now;
|
||||
try {
|
||||
var entry = await _hoursService.GetEntryAsync(Convert.ToInt32(query["load"]));
|
||||
//var entry = await _hoursService.GetEntryAsync(Convert.ToInt32(query["load"]));
|
||||
var (entry, settings, daytimes) = await _hoursService.GetEntryWithSettingsAsync(Convert.ToInt32(query["load"]));
|
||||
UpdateSettingsAsync(settings);
|
||||
|
||||
DayTime = entry;
|
||||
DayTime.TimeSpanVon = entry.Begin.ToTimeSpan();
|
||||
@@ -208,13 +220,16 @@ public partial class StundeViewModel : ObservableObject, IQueryAttributable {
|
||||
OnPropertyChanged(nameof(SubTitle));
|
||||
|
||||
FreistellungEnabled = !DayTime.Approved;
|
||||
|
||||
DayTimes = daytimes;
|
||||
OnPropertyChanged(nameof(DayTimes));
|
||||
} catch (Exception e) {
|
||||
AlertEvent?.Invoke(this, e.Message);
|
||||
} finally {
|
||||
//Evtl. noch die anderen Zeiten des gleichen Tages holen
|
||||
var day = await _hoursService.GetDayWithSettingsAsync(DayTime.Day);
|
||||
DayTimes = day.dayTimes;
|
||||
OnPropertyChanged(nameof(DayTimes));
|
||||
//var day = await _hoursService.GetDayWithSettingsAsync(DayTime.Day);
|
||||
//DayTimes = day.dayTimes;
|
||||
//OnPropertyChanged(nameof(DayTimes));
|
||||
}
|
||||
|
||||
//OnPropertyChanged(nameof(DayTime));
|
||||
@@ -227,15 +242,9 @@ public partial class StundeViewModel : ObservableObject, IQueryAttributable {
|
||||
//Bei neuem Eintrag die vorhandenen des gleichen Tages anzeigen
|
||||
try {
|
||||
var (list, settings) = await _hoursService.GetDayWithSettingsAsync(_date);
|
||||
GlobalVar.Settings = settings;
|
||||
UpdateSettingsAsync(settings);
|
||||
DayTimes = list;
|
||||
|
||||
OptionsGemeinde = settings.Gemeinden;
|
||||
OptionsProjekt = settings.Projekte;
|
||||
OptionsFreistellung = settings.Freistellungen;
|
||||
|
||||
GemeindeAktivSet = settings.GemeindeAktivSet;
|
||||
ProjektAktivSet = settings.ProjektAktivSet;
|
||||
} catch (Exception) {
|
||||
//Ein Tag ohne Einträge gibt eine Fehlermeldung,
|
||||
//die soll aber ignoriert werden, weil beim Neueintrag ist das ja Wurscht
|
||||
|
||||
@@ -101,14 +101,14 @@ public partial class StundenViewModel : ObservableObject, IQueryAttributable, IN
|
||||
/// Monatsübersicht: Geleistete Stunden
|
||||
/// </summary>
|
||||
public double? ZeitCalculated {
|
||||
get => Hours.Zeit_total;
|
||||
get => Hours.zeit_total;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Monatsübersicht: Sollstunden
|
||||
/// </summary>
|
||||
public double? Nominal {
|
||||
get => Hours.Nominal;
|
||||
get => Hours.nominal;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -287,7 +287,7 @@ public partial class StundenViewModel : ObservableObject, IQueryAttributable, IN
|
||||
|
||||
//Nach der Tagessumme die anderen Tage anhängen
|
||||
if (DayTimes != null) {
|
||||
var more = await _hoursService.GetDayRangeAsync(date, date.AddDays(3));
|
||||
var more = await _hoursService.GetDayRangeAsync(date.AddDays(1), date.AddDays(3));
|
||||
if (more != null && more.Count > 0)
|
||||
{
|
||||
await MainThread.InvokeOnMainThreadAsync(() =>
|
||||
|
||||
Reference in New Issue
Block a user