Anpassungen Detailseite

Auswahlliste Gemeinden und Projekte
This commit is contained in:
2024-09-24 18:30:39 +02:00
parent 16bdacc663
commit a066b9caba
14 changed files with 200 additions and 143 deletions

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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;
} }

View File

@@ -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; }
} }
} }

View File

@@ -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.
public int Id { get; set; } /// </summary>
public string Name { get; set; } public class Gemeinde {
/// <summary>
/// Eindeutige Id der Gemeinde.
/// </summary>
public int Id { get; set; }
public Gemeinde(int id, string name) /// <summary>
{ /// Name der Gemeinde.
Id = id; /// </summary>
Name = name; public string Name { get; set; }
} }
}
} }

View File

@@ -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.
public int Id { get; set; } /// </summary>
public string Name { get; set; } public class Projekt {
} /// <summary>
/// Holt oder setzt die eindeutige ID des Projekts.
/// </summary>
public int Id { get; set; }
/// <summary>
/// Holt oder setzt den Namen des Projekts.
/// </summary>
public string Name { get; set; }
}
} }

View File

@@ -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", "");

View File

@@ -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));
}
} }
} }
} }

View File

@@ -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);

View File

@@ -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}">

View File

@@ -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"

View File

@@ -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;
} }
} }

View File

@@ -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>

View File

@@ -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>