Anpassungen Detailseite
Auswahlliste Gemeinden und Projekte
This commit is contained in:
@@ -53,6 +53,8 @@ namespace Jugenddienst_Stunden.Models {
|
|||||||
string apiUrl = args[0]; // Ersetzen Sie dies durch die tatsächliche URL der API
|
string apiUrl = args[0]; // Ersetzen Sie dies durch die tatsächliche URL der API
|
||||||
string bearerToken = args[1]; // Ersetzen Sie hier durch Ihr tatsächliches Token
|
string bearerToken = args[1]; // Ersetzen Sie hier durch Ihr tatsächliches Token
|
||||||
|
|
||||||
|
Preferences.Default.Set("apiUrl", apiUrl);
|
||||||
|
|
||||||
string data = await GetApiDataWithAuthAsync(apiUrl, bearerToken);
|
string data = await GetApiDataWithAuthAsync(apiUrl, bearerToken);
|
||||||
|
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
|
using Jugenddienst_Stunden.ViewModels;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
@@ -41,25 +42,19 @@ namespace Jugenddienst_Stunden.Models {
|
|||||||
//throw new Exception("Keine Internetverbindung");
|
//throw new Exception("Keine Internetverbindung");
|
||||||
} else {
|
} else {
|
||||||
var tokendata = new TokenData(apiKey);
|
var tokendata = new TokenData(apiKey);
|
||||||
|
|
||||||
//try {
|
//try {
|
||||||
string data = await Auth.GetApiDataWithAuthAsync(tokendata.url, tokendata.apiKey);
|
string data = await Auth.GetApiDataWithAuthAsync(tokendata.url, tokendata.apiKey);
|
||||||
if (data == "\"Lalala\"") {
|
if (data == "\"Lalala\"") {
|
||||||
throw new Exception("Problem mit Token");
|
throw new Exception("Problem mit Token");
|
||||||
}
|
}
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
OperatorVar = Newtonsoft.Json.JsonConvert.DeserializeObject<Operator>(data);
|
OperatorVar = JsonConvert.DeserializeObject<Operator>(data);
|
||||||
Preferences.Default.Set("name", OperatorVar.name);
|
Preferences.Default.Set("name", OperatorVar.name);
|
||||||
Preferences.Default.Set("surname", OperatorVar.surname);
|
Preferences.Default.Set("surname", OperatorVar.surname);
|
||||||
|
Preferences.Default.Set("apiUrl", tokendata.url);
|
||||||
|
|
||||||
}
|
}
|
||||||
//} catch (Exception e) {
|
|
||||||
// //AlertEvent?.Invoke(this, e.Message);
|
|
||||||
// await App.Current.MainPage.DisplayAlert("Fehler",
|
|
||||||
// e.Message,
|
|
||||||
// "OK");
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return OperatorVar;
|
return OperatorVar;
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ using System.Collections.Generic;
|
|||||||
namespace Jugenddienst_Stunden.Models {
|
namespace Jugenddienst_Stunden.Models {
|
||||||
internal class Stunde : ObservableObject {
|
internal class Stunde : ObservableObject {
|
||||||
|
|
||||||
|
public DateTime Date { get; set; }
|
||||||
|
private static Hours Hours { get; set; }
|
||||||
|
|
||||||
//Default-Werte zum Testen
|
//Default-Werte zum Testen
|
||||||
|
|
||||||
@@ -25,48 +26,22 @@ namespace Jugenddienst_Stunden.Models {
|
|||||||
public static string apiKey = Preferences.Default.Get("apiKey", "MTQzfEFlMVRjQXdZMnI4RmpxZ0FSY3A0VEN2bVZYVXxodHRwOi8vaG91cnMuZGF1bmkubWluZS5udTo4MS9hcHBhcGk=");
|
public static string apiKey = Preferences.Default.Get("apiKey", "MTQzfEFlMVRjQXdZMnI4RmpxZ0FSY3A0VEN2bVZYVXxodHRwOi8vaG91cnMuZGF1bmkubWluZS5udTo4MS9hcHBhcGk=");
|
||||||
public static string name = Preferences.Default.Get("name", "Christine");
|
public static string name = Preferences.Default.Get("name", "Christine");
|
||||||
public static string surname = Preferences.Default.Get("surname", "Feichter");
|
public static string surname = Preferences.Default.Get("surname", "Feichter");
|
||||||
|
public static string apiUrl = Preferences.Default.Get("apiUrl", "https://");
|
||||||
|
|
||||||
//Damian
|
//Damian
|
||||||
//public static string apiKey = Preferences.Default.Get("apiKey", "MTU0fGpkQUNYTGkvcjMvVk4rNkMyK0dDQkJmMkFwVXxodHRwOi8vaG91cnMuZGF1bmkubWluZS5udTo4MS9hcHBhcGk=");
|
//public static string apiKey = Preferences.Default.Get("apiKey", "MTU0fGpkQUNYTGkvcjMvVk4rNkMyK0dDQkJmMkFwVXxodHRwOi8vaG91cnMuZGF1bmkubWluZS5udTo4MS9hcHBhcGk=");
|
||||||
|
|
||||||
//private static readonly string requestUrl = $"{BaseAddress}/appapi?hours";
|
//private static readonly string requestUrl = $"{BaseAddress}/appapi?hours";
|
||||||
|
|
||||||
public DateTime Date { get; set; }
|
|
||||||
private static Hours Hours { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static async Task<Hours> LoadData() {
|
public static async Task<Hours> LoadData() {
|
||||||
|
|
||||||
//Temporär fix für virtuelle App
|
//Temporär fix für virtuelle App
|
||||||
//apiKey = "MTAyfEJZZnB1L3VwcnhoVms0dDlLZENPZWtUVy85b3xodHRwOi8vaG91cnMuZGF1bmkubWluZS5udTo4MS9hcHBhcGk=";
|
|
||||||
//name = "Kathi";
|
|
||||||
//surname = "Wegi";
|
|
||||||
|
|
||||||
//apiKey = "MTQzfEFlMVRjQXdZMnI4RmpxZ0FSY3A0VEN2bVZYVXxodHRwOi8vaG91cnMuZGF1bmkubWluZS5udTo4MS9hcHBhcGk=";
|
|
||||||
//name = "Chri";
|
|
||||||
//surname = "Fe";
|
|
||||||
|
|
||||||
//apiKey = "MTI3fDEyYURVdHVZVWRaZk91eDlNcjZDUFlTdmdkNHxodHRwOi8vaG91cnMuZGF1bmkubWluZS5udTo4MS9hcHBhcGk=";
|
|
||||||
//name = "Ju";
|
|
||||||
//surname = "Ze";
|
|
||||||
|
|
||||||
//apiKey = "M3wvK09XQkZod1l4SXlVcGVWazdlUmYrTnBWaUl8aHR0cHM6Ly9ob3Vycy5waWRhLmluZm8vYXBwYXBp";
|
|
||||||
//name = "Le";
|
|
||||||
//surname = "Ma";
|
|
||||||
|
|
||||||
//apiKey = "OXxzTkxVWjJqdmI2VXFrdUhtcktwK1d1YU41cTh8aHR0cDovL2hvdXJzLmRhdW5pLm1pbmUubnU6ODEvYXBwYXBp";
|
|
||||||
//name = "Eli";
|
|
||||||
//surname = "Gap";
|
|
||||||
|
|
||||||
//apiKey = "NXw5eFF0RVQ5TFBMTXFVeFIzQURtd01idHFUb2d8aHR0cDovL2hvdXJzLmRhdW5pLm1pbmUubnU6ODEvYXBwYXBp"; //Johannes Fink
|
//apiKey = "NXw5eFF0RVQ5TFBMTXFVeFIzQURtd01idHFUb2d8aHR0cDovL2hvdXJzLmRhdW5pLm1pbmUubnU6ODEvYXBwYXBp"; //Johannes Fink
|
||||||
|
|
||||||
//Preferences.Default.Set("apiKey", apiKey);
|
|
||||||
//Preferences.Default.Set("name", name);
|
|
||||||
//Preferences.Default.Set("surname", surname);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Hours hours = new Hours();
|
Hours hours = new Hours();
|
||||||
|
|
||||||
@@ -88,9 +63,6 @@ namespace Jugenddienst_Stunden.Models {
|
|||||||
}
|
}
|
||||||
|
|
||||||
hours = JsonConvert.DeserializeObject<Hours>(data);
|
hours = JsonConvert.DeserializeObject<Hours>(data);
|
||||||
//Preferences.Default.Set("name", hours.operator_api.name);
|
|
||||||
//Preferences.Default.Set("surname", hours.operator_api.surname);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return hours;
|
return hours;
|
||||||
@@ -99,7 +71,6 @@ namespace Jugenddienst_Stunden.Models {
|
|||||||
|
|
||||||
public static async Task<List<DayTime>> LoadDay(DateTime date) {
|
public static async Task<List<DayTime>> LoadDay(DateTime date) {
|
||||||
|
|
||||||
|
|
||||||
List<DayTime> daytimes = new List<DayTime>();
|
List<DayTime> daytimes = new List<DayTime>();
|
||||||
|
|
||||||
if (Connectivity.Current.NetworkAccess == NetworkAccess.None) {
|
if (Connectivity.Current.NetworkAccess == NetworkAccess.None) {
|
||||||
@@ -121,25 +92,23 @@ namespace Jugenddienst_Stunden.Models {
|
|||||||
|
|
||||||
//daytimes = System.Text.Json.JsonSerializer.Deserialize<List<DayTime>>(data);
|
//daytimes = System.Text.Json.JsonSerializer.Deserialize<List<DayTime>>(data);
|
||||||
daytimes = JsonConvert.DeserializeObject<List<DayTime>>(data);
|
daytimes = JsonConvert.DeserializeObject<List<DayTime>>(data);
|
||||||
//Preferences.Default.Set("name", hours.operator_api.name);
|
|
||||||
//Preferences.Default.Set("surname", hours.operator_api.surname);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
//Hours = hours;
|
//Hours = hours;
|
||||||
return daytimes;
|
return daytimes;
|
||||||
}
|
}
|
||||||
public event EventHandler<string> AlertEvent;
|
|
||||||
|
|
||||||
public static async Task<DayTime> LoadEntry(int id) {
|
public static async Task<DayTime> LoadEntry(int id) {
|
||||||
|
|
||||||
var tokendata = new TokenData(apiKey);
|
var tokendata = new TokenData(apiKey);
|
||||||
|
|
||||||
var data = await Auth.GetApiDataWithAuthAsync(tokendata.url + "?id=" + id, tokendata.apiKey);
|
var data = await Auth.GetApiDataWithAuthAsync(tokendata.url + "?id=" + id, tokendata.apiKey);
|
||||||
if(String.IsNullOrEmpty(data))
|
|
||||||
AlertEvent?.Invoke(this, "Auswahl enthält keine Daten");
|
|
||||||
|
|
||||||
//DayTime hours = Hours.daytime.Find(x => x.id == id);
|
//DayTime hours = Hours.daytime.Find(x => x.id == id);
|
||||||
DayTime hours = JsonConvert.DeserializeObject<DayTime>(data);
|
DayTime hours = JsonConvert.DeserializeObject<DayTime>(data);
|
||||||
|
hours.TimeSpanVon = hours.begin.ToTimeSpan();
|
||||||
|
hours.TimeSpanBis = hours.end.ToTimeSpan();
|
||||||
|
|
||||||
return hours;
|
return hours;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
namespace Jugenddienst_Stunden.Types {
|
using Jugenddienst_Stunden.Models;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
|
namespace Jugenddienst_Stunden.Types {
|
||||||
public class DayTime {
|
public class DayTime {
|
||||||
public int? id;
|
public int? id;
|
||||||
public int EmployeeId;
|
public int EmployeeId;
|
||||||
@@ -10,10 +13,15 @@
|
|||||||
public string? free;
|
public string? free;
|
||||||
public bool? approved;
|
public bool? approved;
|
||||||
public int? type;
|
public int? type;
|
||||||
public int? project;
|
public int? projekt;
|
||||||
public int? gemeinde;
|
public int? gemeinde;
|
||||||
public TimeOnly night;
|
public TimeOnly night;
|
||||||
public Dictionary<string, TimeOnly> total;
|
public Dictionary<string, TimeOnly> total;
|
||||||
public TimeOnly end_print;
|
public TimeOnly end_print;
|
||||||
|
public TimeSpan TimeSpanVon { get; set; }
|
||||||
|
public TimeSpan TimeSpanBis { get; set; }
|
||||||
|
public Collection<Projekt> Projekte { get; set; }
|
||||||
|
public Collection<Gemeinde> Gemeinden { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,15 +6,18 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Jugenddienst_Stunden.Types
|
namespace Jugenddienst_Stunden.Types
|
||||||
{
|
{
|
||||||
internal class Gemeinde
|
/// <summary>
|
||||||
{
|
/// Repräsentiert eine Gemeinde mit einer eindeutigen Id und einem Namen.
|
||||||
|
/// </summary>
|
||||||
|
public class Gemeinde {
|
||||||
|
/// <summary>
|
||||||
|
/// Eindeutige Id der Gemeinde.
|
||||||
|
/// </summary>
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
|
||||||
|
|
||||||
public Gemeinde(int id, string name)
|
/// <summary>
|
||||||
{
|
/// Name der Gemeinde.
|
||||||
Id = id;
|
/// </summary>
|
||||||
Name = name;
|
public string Name { get; set; }
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,18 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Jugenddienst_Stunden.Types
|
namespace Jugenddienst_Stunden.Types
|
||||||
{
|
{
|
||||||
internal class Projekt
|
/// <summary>
|
||||||
{
|
/// Repräsentiert ein Projekt mit einer eindeutigen ID und einem Namen.
|
||||||
|
/// </summary>
|
||||||
|
public class Projekt {
|
||||||
|
/// <summary>
|
||||||
|
/// Holt oder setzt die eindeutige ID des Projekts.
|
||||||
|
/// </summary>
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Holt oder setzt den Namen des Projekts.
|
||||||
|
/// </summary>
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,18 @@
|
|||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using Microsoft.Maui.Dispatching;
|
using Microsoft.Maui.Dispatching;
|
||||||
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
//using BarcodeScanning;
|
//using BarcodeScanning;
|
||||||
|
|
||||||
namespace Jugenddienst_Stunden.ViewModels {
|
namespace Jugenddienst_Stunden.ViewModels {
|
||||||
internal class LoginViewModel {
|
public class LoginViewModel {
|
||||||
public string AppTitle => AppInfo.Name;
|
public string AppTitle => AppInfo.Name;
|
||||||
public string Version => AppInfo.VersionString;
|
public string Version => AppInfo.VersionString;
|
||||||
|
|
||||||
public string Message => "Scanne den QR-Code von deinem Benutzerprofil auf der Stundenseite.";
|
public string Message => "Scanne den QR-Code von deinem Benutzerprofil auf der Stundenseite.";
|
||||||
|
|
||||||
|
public string Server { get; set; } = "Server: " + Preferences.Default.Get("apiUrl", "https://");
|
||||||
|
|
||||||
public string Title { get; set; } = Preferences.Default.Get("name", "") + " " + Preferences.Default.Get("surname", "");
|
public string Title { get; set; } = Preferences.Default.Get("name", "") + " " + Preferences.Default.Get("surname", "");
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using Jugenddienst_Stunden.Models;
|
|||||||
using Jugenddienst_Stunden.Types;
|
using Jugenddienst_Stunden.Types;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@@ -14,18 +15,32 @@ namespace Jugenddienst_Stunden.ViewModels {
|
|||||||
|
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
|
|
||||||
private Types.DayTime _stunde;
|
private DayTime _stunde;
|
||||||
public DayTime Stunde { get => _stunde; }
|
public DayTime Stunde { get => _stunde; }
|
||||||
|
|
||||||
public string Description {
|
public ObservableCollection<Gemeinde> OptionsGemeinde { get; private set; }
|
||||||
get => _stunde.description;
|
public ObservableCollection<Projekt> OptionsProjekt { get; private set; }
|
||||||
set {
|
public ObservableCollection<string> OptionsFreistellung { get; }
|
||||||
if (_stunde.description != value) {
|
|
||||||
_stunde.description = value;
|
//public TimeSpan Von {
|
||||||
OnPropertyChanged();
|
// get => _stunde.begin.ToTimeSpan();
|
||||||
}
|
// set {
|
||||||
}
|
// if (_stunde.begin.ToTimeSpan() != value) {
|
||||||
}
|
// _stunde.begin = TimeOnly.FromTimeSpan(value);
|
||||||
|
// OnPropertyChanged(nameof(Von));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//public TimeSpan Bis {
|
||||||
|
// get => _stunde.end.ToTimeSpan();
|
||||||
|
// set {
|
||||||
|
// if (_stunde.end.ToTimeSpan() != value) {
|
||||||
|
// _stunde.end = TimeOnly.FromTimeSpan(value);
|
||||||
|
// OnPropertyChanged(nameof(Bis));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
public string SubTitle { get; set; } = DateTime.Today.ToString("dddd, d. MMM. yyyy");
|
public string SubTitle { get; set; } = DateTime.Today.ToString("dddd, d. MMM. yyyy");
|
||||||
|
|
||||||
@@ -36,14 +51,22 @@ namespace Jugenddienst_Stunden.ViewModels {
|
|||||||
|
|
||||||
|
|
||||||
public StundeViewModel() {
|
public StundeViewModel() {
|
||||||
_stunde = new Types.DayTime();
|
_stunde = new DayTime();
|
||||||
//SaveCommand = new AsyncRelayCommand(Save);
|
//SaveCommand = new AsyncRelayCommand(Save);
|
||||||
//DeleteCommand = new AsyncRelayCommand(Delete);
|
//DeleteCommand = new AsyncRelayCommand(Delete);
|
||||||
|
|
||||||
|
|
||||||
|
OptionsFreistellung = new ObservableCollection<string> {
|
||||||
|
"Urlaub",
|
||||||
|
"Krankheit",
|
||||||
|
"Elternzeit"
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public StundeViewModel(Types.DayTime stunde) {
|
public StundeViewModel(DayTime stunde) {
|
||||||
_stunde = stunde;
|
_stunde = stunde;
|
||||||
|
|
||||||
|
|
||||||
//SaveCommand = new AsyncRelayCommand(Save);
|
//SaveCommand = new AsyncRelayCommand(Save);
|
||||||
//DeleteCommand = new AsyncRelayCommand(Delete);
|
//DeleteCommand = new AsyncRelayCommand(Delete);
|
||||||
}
|
}
|
||||||
@@ -59,13 +82,70 @@ namespace Jugenddienst_Stunden.ViewModels {
|
|||||||
// await Shell.Current.GoToAsync($"..?deleted={_stunde.Filename}");
|
// await Shell.Current.GoToAsync($"..?deleted={_stunde.Filename}");
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
public event EventHandler<string> AlertEvent;
|
||||||
|
public event EventHandler<string> ErrorEvent;
|
||||||
|
|
||||||
async void IQueryAttributable.ApplyQueryAttributes(IDictionary<string, object> query) {
|
async void IQueryAttributable.ApplyQueryAttributes(IDictionary<string, object> query) {
|
||||||
if (query.ContainsKey("load")) {
|
if (query.ContainsKey("load")) {
|
||||||
//DateTime heute = DateTime.Now;
|
//DateTime heute = DateTime.Now;
|
||||||
_stunde = await Models.Stunde.LoadEntry(Convert.ToInt32(query["load"]));
|
_stunde = await Models.Stunde.LoadEntry(Convert.ToInt32(query["load"]));
|
||||||
|
if (String.IsNullOrEmpty(_stunde.description)) {
|
||||||
|
AlertEvent?.Invoke(this, "Eintrag hat keine Daten zurückgegeben");
|
||||||
|
}
|
||||||
SubTitle = _stunde.day.ToString("dddd, d. MMM. yyyy");
|
SubTitle = _stunde.day.ToString("dddd, d. MMM. yyyy");
|
||||||
|
|
||||||
|
OptionsProjekt = new ObservableCollection<Projekt>(_stunde.Projekte);
|
||||||
|
OptionsGemeinde = new ObservableCollection<Gemeinde>(_stunde.Gemeinden);
|
||||||
|
OnPropertyChanged(nameof(OptionsGemeinde));
|
||||||
|
OnPropertyChanged(nameof(OptionsProjekt));
|
||||||
|
|
||||||
|
//OptionsProjekt.FirstOrDefault(x => x.Id == _stunde.projekt);
|
||||||
|
|
||||||
|
SelectedOptionGemeinde = OptionsGemeinde.FirstOrDefault(item => item.Id == _stunde.gemeinde) ?? new Gemeinde();
|
||||||
|
OnPropertyChanged(nameof(SelectedOptionGemeinde));
|
||||||
|
|
||||||
|
|
||||||
|
SelectedOptionProjekt = OptionsProjekt.FirstOrDefault(Projekt => Projekt.Id == _stunde.projekt) ?? new Projekt();
|
||||||
|
OnPropertyChanged(nameof(SelectedOptionProjekt));
|
||||||
|
|
||||||
OnPropertyChanged(nameof(Stunde));
|
OnPropertyChanged(nameof(Stunde));
|
||||||
OnPropertyChanged(nameof(SubTitle));
|
OnPropertyChanged(nameof(SubTitle));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Gemeinde _selectedGemeinde;
|
||||||
|
public Gemeinde SelectedOptionGemeinde {
|
||||||
|
get => _selectedGemeinde;
|
||||||
|
set {
|
||||||
|
if (_selectedGemeinde != value) {
|
||||||
|
_selectedGemeinde = value;
|
||||||
|
OnPropertyChanged(nameof(SelectedOptionGemeinde));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Projekt _selectedProjekt;
|
||||||
|
public Projekt SelectedOptionProjekt {
|
||||||
|
get => _selectedProjekt;
|
||||||
|
set {
|
||||||
|
if (_selectedProjekt != value) {
|
||||||
|
_selectedProjekt = value;
|
||||||
|
//new AsyncRelayCommand(LoadData);
|
||||||
|
OnPropertyChanged(nameof(SelectedOptionProjekt));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string selectedFreistellung;
|
||||||
|
public string SelectedOptionFreistellung {
|
||||||
|
get => selectedFreistellung;
|
||||||
|
set {
|
||||||
|
if (selectedFreistellung != value) {
|
||||||
|
selectedFreistellung = value;
|
||||||
|
//new AsyncRelayCommand(LoadData);
|
||||||
|
OnPropertyChanged(nameof(SelectedOptionFreistellung));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,43 +94,16 @@ namespace Jugenddienst_Stunden.ViewModels {
|
|||||||
|
|
||||||
public string Title { get; set; } = Preferences.Default.Get("name", "") + " " + Preferences.Default.Get("surname", "");
|
public string Title { get; set; } = Preferences.Default.Get("name", "") + " " + Preferences.Default.Get("surname", "");
|
||||||
|
|
||||||
//public ObservableCollection<string> Options { get; }
|
|
||||||
//public ObservableCollection<string> OptionsProjekt { get; }
|
|
||||||
//public ObservableCollection<string> OptionsFreistellung { get; }
|
|
||||||
public List<TimeDay> TimeDay { get; set; }
|
public List<TimeDay> TimeDay { get; set; }
|
||||||
|
|
||||||
//private string selectedOption;
|
|
||||||
//public string SelectedOption {
|
|
||||||
// get => selectedOption;
|
|
||||||
// set {
|
|
||||||
// if (selectedOption != value) {
|
|
||||||
// selectedOption = value;
|
|
||||||
// //new AsyncRelayCommand(LoadData);
|
|
||||||
// OnPropertyChanged(nameof(SelectedOption));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
public StundenViewModel() {
|
public StundenViewModel() {
|
||||||
|
|
||||||
|
|
||||||
// Options = new ObservableCollection<string> {
|
|
||||||
// "Gemeinde 1",
|
|
||||||
// "Gemeinde 2",
|
|
||||||
// "Gemeinde 3",
|
|
||||||
// "Gemeinde 4"
|
|
||||||
//};
|
|
||||||
// OptionsProjekt = new ObservableCollection<string> {
|
|
||||||
// "Projekt 1",
|
|
||||||
// "Projekt 2",
|
|
||||||
// "Projekt 3"
|
|
||||||
//};
|
|
||||||
// OptionsFreistellung = new ObservableCollection<string> {
|
|
||||||
// "Urlaub",
|
|
||||||
// "Krankheit",
|
|
||||||
// "Elternzeit"
|
|
||||||
//};
|
|
||||||
_hour = new Types.Hours();
|
_hour = new Types.Hours();
|
||||||
LoadDataCommand = new AsyncRelayCommand(LoadData);
|
LoadDataCommand = new AsyncRelayCommand(LoadData);
|
||||||
|
|
||||||
|
|||||||
@@ -15,13 +15,13 @@
|
|||||||
<ToolbarItem Text="Add" Command="{Binding NewCommand}" IconImageSource="{FontImage Glyph='+', Color=Black, Size=22}" />
|
<ToolbarItem Text="Add" Command="{Binding NewCommand}" IconImageSource="{FontImage Glyph='+', Color=Black, Size=22}" />
|
||||||
</ContentPage.ToolbarItems>
|
</ContentPage.ToolbarItems>
|
||||||
|
|
||||||
<VerticalStackLayout>
|
<VerticalStackLayout Margin="20,0,0,0">
|
||||||
<Label Text="Werden nur lokal gespeichert"/>
|
<Label Text="Werden nur lokal gespeichert"/>
|
||||||
|
|
||||||
<!-- Display notes in a list -->
|
<!-- Display notes in a list -->
|
||||||
<CollectionView x:Name="notesCollection"
|
<CollectionView x:Name="notesCollection"
|
||||||
ItemsSource="{Binding AllNotes}"
|
ItemsSource="{Binding AllNotes}"
|
||||||
Margin="20"
|
Margin="0,20,0,0"
|
||||||
SelectionMode="Single"
|
SelectionMode="Single"
|
||||||
SelectionChangedCommand="{Binding SelectNoteCommand}"
|
SelectionChangedCommand="{Binding SelectNoteCommand}"
|
||||||
SelectionChangedCommandParameter="{Binding Source={RelativeSource Self}, Path=SelectedItem}">
|
SelectionChangedCommandParameter="{Binding Source={RelativeSource Self}, Path=SelectedItem}">
|
||||||
|
|||||||
@@ -17,7 +17,8 @@
|
|||||||
</HorizontalStackLayout>
|
</HorizontalStackLayout>
|
||||||
|
|
||||||
|
|
||||||
<Label Text="{Binding Message}" HeightRequest="110" />
|
<Label Text="{Binding Message}" HeightRequest="40" />
|
||||||
|
<Label Text="{Binding Server}" HeightRequest="40" Margin="0,0,0,40" />
|
||||||
|
|
||||||
<zxing:CameraBarcodeReaderView x:Name="barcodeScannerView"
|
<zxing:CameraBarcodeReaderView x:Name="barcodeScannerView"
|
||||||
BarcodesDetected="BarcodesDetected"
|
BarcodesDetected="BarcodesDetected"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Jugenddienst_Stunden.Models;
|
using Jugenddienst_Stunden.Models;
|
||||||
|
using Jugenddienst_Stunden.ViewModels;
|
||||||
using Microsoft.Maui.Controls;
|
using Microsoft.Maui.Controls;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using ZXing.Net.Maui;
|
using ZXing.Net.Maui;
|
||||||
@@ -9,6 +10,7 @@ public partial class LoginPage : ContentPage {
|
|||||||
|
|
||||||
private DateTime _lastDetectionTime;
|
private DateTime _lastDetectionTime;
|
||||||
private readonly TimeSpan _detectionInterval = TimeSpan.FromSeconds(5);
|
private readonly TimeSpan _detectionInterval = TimeSpan.FromSeconds(5);
|
||||||
|
private readonly LoginViewModel _loginViewModel = new LoginViewModel();
|
||||||
|
|
||||||
public LoginPage() {
|
public LoginPage() {
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
@@ -42,6 +44,9 @@ public partial class LoginPage : ContentPage {
|
|||||||
Preferences.Default.Set("apiKey", barcode.Value);
|
Preferences.Default.Set("apiKey", barcode.Value);
|
||||||
Preferences.Default.Set("name", op.name);
|
Preferences.Default.Set("name", op.name);
|
||||||
Preferences.Default.Set("surname", op.surname);
|
Preferences.Default.Set("surname", op.surname);
|
||||||
|
//Preferences.Default.Set("apiUrl", Pre);
|
||||||
|
_loginViewModel.Server = Preferences.Default.Get("apiUrl", "");
|
||||||
|
|
||||||
|
|
||||||
await DisplayAlert("Login erfolgreich", op.name + " " + op.surname, "OK");
|
await DisplayAlert("Login erfolgreich", op.name + " " + op.surname, "OK");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -51,8 +56,6 @@ public partial class LoginPage : ContentPage {
|
|||||||
"OK");
|
"OK");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
MainThread.InvokeOnMainThreadAsync(() => {
|
MainThread.InvokeOnMainThreadAsync(() => {
|
||||||
@@ -64,17 +67,6 @@ public partial class LoginPage : ContentPage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (first is null) {
|
|
||||||
// return;
|
|
||||||
//}
|
|
||||||
//Dispatcher.DispatchAsync(async () => {
|
|
||||||
// await DisplayAlert("Scan-Ergebnis", $"Barcode: {first.Value}", "OK");
|
|
||||||
//});
|
|
||||||
//MainThread.InvokeOnMainThreadAsync(() => {
|
|
||||||
// DisplayAlert("Barcode erkannt", $"Barcode: {first.Format} - {first.Value}", "OK");
|
|
||||||
// Models.Stunde.apiKey = first.Value;
|
|
||||||
//});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnDisappearing() {
|
protected override void OnDisappearing() {
|
||||||
@@ -90,6 +82,4 @@ public partial class LoginPage : ContentPage {
|
|||||||
barcodeScannerView.IsDetecting = true;
|
barcodeScannerView.IsDetecting = true;
|
||||||
barcodeScannerView.CameraLocation = CameraLocation.Rear;
|
barcodeScannerView.CameraLocation = CameraLocation.Rear;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3,22 +3,22 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
xmlns:viewModels="clr-namespace:Jugenddienst_Stunden.ViewModels"
|
xmlns:viewModels="clr-namespace:Jugenddienst_Stunden.ViewModels"
|
||||||
x:Class="Jugenddienst_Stunden.Views.NotePage"
|
x:Class="Jugenddienst_Stunden.Views.NotePage"
|
||||||
Title="Note">
|
Title="Notiz">
|
||||||
<ContentPage.BindingContext>
|
<ContentPage.BindingContext>
|
||||||
<viewModels:NoteViewModel />
|
<viewModels:NoteViewModel />
|
||||||
</ContentPage.BindingContext>
|
</ContentPage.BindingContext>
|
||||||
<VerticalStackLayout Spacing="10" Margin="5">
|
<VerticalStackLayout Spacing="10" Margin="5">
|
||||||
<Editor x:Name="TextEditor"
|
<Editor x:Name="TextEditor"
|
||||||
Placeholder="Enter your note"
|
Placeholder="Gib deine Notiz ein"
|
||||||
Text="{Binding Text}"
|
Text="{Binding Text}"
|
||||||
HeightRequest="80" />
|
HeightRequest="80" />
|
||||||
|
|
||||||
<Grid ColumnDefinitions="*,*" ColumnSpacing="4">
|
<Grid ColumnDefinitions="*,*" ColumnSpacing="4">
|
||||||
<Button Text="Save"
|
<Button Text="Speichern"
|
||||||
Command="{Binding SaveCommand}" />
|
Command="{Binding SaveCommand}" />
|
||||||
|
|
||||||
<Button Grid.Column="1"
|
<Button Grid.Column="1"
|
||||||
Text="Delete"
|
Text="Löschen"
|
||||||
Command="{Binding DeleteCommand}" />
|
Command="{Binding DeleteCommand}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</VerticalStackLayout>
|
</VerticalStackLayout>
|
||||||
|
|||||||
@@ -12,6 +12,30 @@
|
|||||||
<VerticalStackLayout Spacing="10" Margin="10">
|
<VerticalStackLayout Spacing="10" Margin="10">
|
||||||
<Label Text="{Binding SubTitle}" />
|
<Label Text="{Binding SubTitle}" />
|
||||||
|
|
||||||
|
<Grid ColumnDefinitions="*,*,*">
|
||||||
|
<Picker x:Name="pick_gemeinde" Title="Gemeinde" ItemsSource="{Binding OptionsGemeinde}" SelectedItem="{Binding SelectedOptionGemeinde, Mode=TwoWay}" ItemDisplayBinding="{Binding Name}" Grid.Column="0" >
|
||||||
|
</Picker>
|
||||||
|
<Picker x:Name="pick_projekt" Title="Projekt" ItemsSource="{Binding OptionsProjekt}" SelectedItem="{Binding SelectedOptionProjekt, Mode=TwoWay}" ItemDisplayBinding="{Binding Name}" Grid.Column="1" >
|
||||||
|
</Picker>
|
||||||
|
<Picker x:Name="pick_freistellung" Title="Freistellung" ItemsSource="{Binding OptionsFreistellung}" SelectedItem="{Binding SelectedOptionFreistellung, Mode=TwoWay}" Grid.Column="2" >
|
||||||
|
</Picker>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<FlexLayout Direction="Row" AlignItems="Start" Wrap="Wrap">
|
||||||
|
<Border Background="LightGreen">
|
||||||
|
<HorizontalStackLayout>
|
||||||
|
<Label Text="Beginn" TextColor="Gray" VerticalTextAlignment="Center" HorizontalTextAlignment="End" Padding="0,0,10,0" Margin="5,0,0,13"></Label>
|
||||||
|
<TimePicker x:Name="TimeBegin" HorizontalOptions="Center" TextColor="Gray" Format="HH:mm" MinimumWidthRequest="80" Time="{Binding Stunde.TimeSpanVon}" />
|
||||||
|
</HorizontalStackLayout>
|
||||||
|
</Border>
|
||||||
|
<Border Background="OrangeRed">
|
||||||
|
<HorizontalStackLayout>
|
||||||
|
<Label Text="Ende" TextColor="White" VerticalTextAlignment="Center" HorizontalTextAlignment="End" Padding="0,0,10,0" Margin="5,0,0,13"></Label>
|
||||||
|
<TimePicker x:Name="TimeEnd" TextColor="White" Format="HH:mm" MinimumWidthRequest="80" Time="{Binding Stunde.TimeSpanBis}" />
|
||||||
|
</HorizontalStackLayout>
|
||||||
|
</Border>
|
||||||
|
</FlexLayout>
|
||||||
|
|
||||||
<Grid Padding="5,10,5,10">
|
<Grid Padding="5,10,5,10">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
@@ -21,12 +45,14 @@
|
|||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<HorizontalStackLayout Grid.Row="0" Grid.Column="0">
|
<HorizontalStackLayout Grid.Row="0" Grid.Column="0">
|
||||||
<Label Grid.Row="0" Grid.Column="0" Text="{Binding Stunde.begin}"/>
|
<Label Grid.Row="0" Grid.Column="0" Text="{Binding Stunde.begin}"/>
|
||||||
<Label Text="bis" Padding="10,0,10,0"/>
|
<Label Text="bis" Padding="10,0,10,0"/>
|
||||||
<Label Grid.Row="0" Grid.Column="1" Text="{Binding Stunde.end}"/>
|
<Label Grid.Row="0" Grid.Column="1" Text="{Binding Stunde.end}"/>
|
||||||
</HorizontalStackLayout>
|
</HorizontalStackLayout>
|
||||||
|
|
||||||
|
|
||||||
<!--<Label Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Text="{Binding Stunde.description}" Padding="0,0,0,5"/>-->
|
<!--<Label Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Text="{Binding Stunde.description}" Padding="0,0,0,5"/>-->
|
||||||
|
|
||||||
<Editor Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Placeholder="Beschreibung" Text="{Binding Stunde.description}" MinimumHeightRequest="40" AutoSize="TextChanges" />
|
<Editor Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Placeholder="Beschreibung" Text="{Binding Stunde.description}" MinimumHeightRequest="40" AutoSize="TextChanges" />
|
||||||
@@ -34,9 +60,7 @@
|
|||||||
|
|
||||||
<Grid ColumnDefinitions="*,*" ColumnSpacing="4">
|
<Grid ColumnDefinitions="*,*" ColumnSpacing="4">
|
||||||
<Button Text="Save" />
|
<Button Text="Save" />
|
||||||
|
<Button Grid.Column="1" Text="Delete" />
|
||||||
<Button Grid.Column="1"
|
|
||||||
Text="Delete" />
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</VerticalStackLayout>
|
</VerticalStackLayout>
|
||||||
</ContentPage>
|
</ContentPage>
|
||||||
Reference in New Issue
Block a user