15 Commits

Author SHA1 Message Date
eeb14ead3c Yum04 registrierung kunde (#49)
Annis aktueller Stand
2023-06-26 20:11:36 +02:00
3c765ff57d Fix unused code 2023-06-26 20:10:40 +02:00
3a4064198d Fix Error CS0102 The type 'Speisekarte' already contains a definition for 'kunden' e 2023-06-26 19:42:53 +02:00
6c627add92 Merge branch 'dev' into YUM04-RegistrierungKunde 2023-06-26 19:04:20 +02:00
901d533cd1 Update README.md (#41)
Spelling mistakes
2023-06-26 18:57:01 +02:00
28327710f8 Warenkorb bestellungsabschluss + Login (Kunde/Chefin) (#48)
* Add Bestellabschluss link

* Add vorbestllungsdata into Table Bestellungsposition

* Add vorbestllungsdata into Table BestellungspositionHasMenuitem

* Add complete vorbestellungsfunktion

* Add kontaktverwaltung Bestellübersicht

* Update Bestelluebersicht BestelluebersichtD-Chefin

* Update Bestelluebersicht

* Fix kunde.Idkunde access

* Add page acees only on valid kunde login

* Add current kunde usage

* Add admin login

* Fix frontend speisekarte1

* Fix treuepunkte vergabe

* Fix chefin bestellungseinsicht
2023-06-26 18:55:12 +02:00
b2dc8402f2 Abandon QRCode scanning idea 2023-06-24 20:29:06 +02:00
35345e455c Remove unused razor page 2023-06-24 19:39:06 +02:00
c85415e740 Check if user is logged in
If the user is not logged in they will be redireted to the login page
Removed old razor Page that is not needed anymore
2023-06-24 18:42:11 +02:00
7cd20602b6 Add .vscode to gitignore 2023-06-24 17:41:41 +02:00
d45fa68fe0 Add visibility if valid kunde on speisekarte 2023-06-24 17:23:41 +02:00
a9418aea33 Add kunden login index 2023-06-24 17:11:52 +02:00
7b8db08d99 Merge branch 'dev' into YUM04-RegistrierungKunde 2023-06-24 16:46:59 +02:00
ba6266579d New Kundenregistrierung 2023-06-24 15:17:45 +02:00
9781d94d6e Update README.md
Spelling mistakes
2023-06-24 14:37:57 +02:00
28 changed files with 1207 additions and 563 deletions

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
## files generated by popular Visual Studio add-ons.
# User-specific files
.vscode
.vs
*/.vs
*.suo

View File

@ -6,7 +6,7 @@ Yummy4Friends ist eine benutzerfreundliche und visuell ansprechende Webapp zur O
## Description (English)
Yummy4Friends is a user friendly and visually appealing WebApp for ordering food or other things online. Food or other stuff get dynamically fetched from a customer and food database while also taking into account special requests. To attract customers one can also offer limeted time sales/coupons, ordering in advance as well as being able to choosing their preferred pickup time.
Yummy4Friends is a user-friendly and visually appealing WebApp for ordering food or other things online. Food or other stuff gets dynamically fetched from a customer and food database while also taking into account special requests. To attract customers, one can also offer limited-time sales and coupons, order in advance, and have the option to choose the preferred pickup time.
## Tech Stack

View File

@ -1,90 +1,125 @@
@page "/allergene"
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
@code {
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
protected override async Task OnInitializedAsync()
{
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
}
public class Kunde
{
public int Idkunde { get; set; }
public string Code { get; set; }
public int Treuepunkte { get; set; }
}
}
<PageTitle>Allergene</PageTitle>
<table class="tg">
<thead>
<tr>
<th class="tg-c3ow" colspan="3">Allergeninformation<br>gemäß Codex-Empfehlung </th>
</tr>
</thead>
<tbody>
<tr>
<td class="tg-0pky">Visuelles</td>
<td class="tg-0pky">Kurzbezeichnung</td>
<td class="tg-0pky">Buchstabencode</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/getreide.png" alt="Getreide"></td>
<td class="tg-0pky">glutenhaltiges Getreide</td>
<td class="tg-c3ow">A</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/krebstiere.png" alt="Krebstiere"></td>
<td class="tg-0pky">Krebstiere</td>
<td class="tg-c3ow">B</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/ei.png" alt="Ei"></td>
<td class="tg-0pky">Ei</td>
<td class="tg-c3ow">C</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/fisch.png" alt="Fisch"></td>
<td class="tg-0pky">Fisch</td>
<td class="tg-c3ow">D</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/erdnuss.png" alt="Erdnuss"></td>
<td class="tg-0pky">Erdnuss</td>
<td class="tg-c3ow">E</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/soja.png" alt="Soja"></td>
<td class="tg-0pky">Soja</td>
<td class="tg-c3ow">F</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/milch.png" alt="Milch oder Laktose"></td>
<td class="tg-0pky">Milch oder Laktose</td>
<td class="tg-c3ow">G</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/schalenfruechte.png" alt="Schalenfrüchte"></td>
<td class="tg-0pky">Schalenfrüchte</td>
<td class="tg-c3ow">H</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/sellerie.png" alt="Sellerie"></td>
<td class="tg-0pky">Sellerie</td>
<td class="tg-c3ow">L</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/senf.png" alt="Senf"></td>
<td class="tg-0pky">Senf</td>
<td class="tg-c3ow">M</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/sesam.png" alt="Sesam"></td>
<td class="tg-0pky">Sesam</td>
<td class="tg-c3ow">N</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/sulfite.png" alt="Sulfite"></td>
<td class="tg-0pky">Sulfite</td>
<td class="tg-c3ow">O</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/lupinen.png" alt="Lupinen"></td>
<td class="tg-0pky">Lupinen</td>
<td class="tg-c3ow">P</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/weichtiere.png" alt="Weichtiere"></td>
<td class="tg-0pky">Weichtiere</td>
<td class="tg-c3ow">R</td>
</tr>
</tbody>
<thead>
<tr>
<th class="tg-c3ow" colspan="3">Allergeninformation<br>gemäß Codex-Empfehlung </th>
</tr>
</thead>
<tbody>
<tr>
<td class="tg-0pky">Visuelles</td>
<td class="tg-0pky">Kurzbezeichnung</td>
<td class="tg-0pky">Buchstabencode</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/getreide.png" alt="Getreide"></td>
<td class="tg-0pky">glutenhaltiges Getreide</td>
<td class="tg-c3ow">A</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/krebstiere.png" alt="Krebstiere"></td>
<td class="tg-0pky">Krebstiere</td>
<td class="tg-c3ow">B</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/ei.png" alt="Ei"></td>
<td class="tg-0pky">Ei</td>
<td class="tg-c3ow">C</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/fisch.png" alt="Fisch"></td>
<td class="tg-0pky">Fisch</td>
<td class="tg-c3ow">D</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/erdnuss.png" alt="Erdnuss"></td>
<td class="tg-0pky">Erdnuss</td>
<td class="tg-c3ow">E</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/soja.png" alt="Soja"></td>
<td class="tg-0pky">Soja</td>
<td class="tg-c3ow">F</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/milch.png" alt="Milch oder Laktose"></td>
<td class="tg-0pky">Milch oder Laktose</td>
<td class="tg-c3ow">G</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/schalenfruechte.png" alt="Schalenfrüchte"></td>
<td class="tg-0pky">Schalenfrüchte</td>
<td class="tg-c3ow">H</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/sellerie.png" alt="Sellerie"></td>
<td class="tg-0pky">Sellerie</td>
<td class="tg-c3ow">L</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/senf.png" alt="Senf"></td>
<td class="tg-0pky">Senf</td>
<td class="tg-c3ow">M</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/sesam.png" alt="Sesam"></td>
<td class="tg-0pky">Sesam</td>
<td class="tg-c3ow">N</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/sulfite.png" alt="Sulfite"></td>
<td class="tg-0pky">Sulfite</td>
<td class="tg-c3ow">O</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/lupinen.png" alt="Lupinen"></td>
<td class="tg-0pky">Lupinen</td>
<td class="tg-c3ow">P</td>
</tr>
<tr>
<td class="tg-0pky"><img class="icon" src="assets/weichtiere.png" alt="Weichtiere"></td>
<td class="tg-0pky">Weichtiere</td>
<td class="tg-c3ow">R</td>
</tr>
</tbody>
</table>
<br><br><br><br>
<br>
<br>
<br>
<br>

View File

@ -1,5 +1,33 @@
@page "/cookies"
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
@code {
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
protected override async Task OnInitializedAsync()
{
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
}
public class Kunde
{
public int Idkunde { get; set; }
public string Code { get; set; }
public int Treuepunkte { get; set; }
}
}
<!DOCTYPE html>
<html lang="">
<head>

View File

@ -1,5 +1,33 @@
@page "/datenschutzerklärung"
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
@code {
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
protected override async Task OnInitializedAsync()
{
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
}
public class Kunde
{
public int Idkunde { get; set; }
public string Code { get; set; }
public int Treuepunkte { get; set; }
}
}
<!DOCTYPE html>
<html lang="">
<head>

View File

@ -1,57 +0,0 @@
@page "/fetchdata"
@inject HttpClient Http
<PageTitle>Weather forecast</PageTitle>
<h1>Weather forecast</h1>
<p>This component demonstrates fetching data from the server.</p>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Temp. (C)</th>
<th>Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Date.ToShortDateString()</td>
<td>@forecast.TemperatureC</td>
<td>@forecast.TemperatureF</td>
<td>@forecast.Summary</td>
</tr>
}
</tbody>
</table>
}
@code {
private WeatherForecast[]? forecasts;
protected override async Task OnInitializedAsync()
{
forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("sample-data/weather.json");
}
public class WeatherForecast
{
public DateOnly Date { get; set; }
public int TemperatureC { get; set; }
public string? Summary { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
}

View File

@ -1,20 +1,66 @@
 @page "/"
@layout Startseite
@page "/"
@layout Startseite
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
@inject IJSRuntime JSRuntime;
<PageTitle>Yummy4Friends</PageTitle>
<body style='--blazor-load-percentage: 100%; --blazor-load-percentage-text: "100%"; background-color:#C7FFD5;'>
<div class="container col-lg-6 col-md-9 col-sm-12 d-flex flex-column " id="content">
<center><h1>Herzlich Willkommen!</h1></center>
<img src="assets/Logo_new.png" class="img" title="logo image">
<div class="container col-lg-6 col-md-9 col-sm-12 d-flex flex-column " id="content" style=" padding-left:10%; padding-right:10%;">
<center><h1>Herzlich Willkommen!</h1></center>
<form action="Speisekarte">
<input type="submit" value="Zur Speisekarte" class="btn" />
</form>
</div>
<img src="assets/Logo_new.png" class="img" title="logo image">
<input type="text" class="form-control" id="qrcode" placeholder="Zugangscode eintragen" name="qrcode" @bind-value="@qrcodeValue">
<button type="submit" id="button1" class="btn" @onclick="@(() => CheckCode())">Bestätigen</button>
</div>
</body>
@code {
private string qrcodeValue;
private List<Kunde> kunden = new List<Kunde>();
public void CheckCode()
{
foreach (var kunde in kunden)
{
if (kunde.Code == qrcodeValue)
{
localStorage.SetItem("kunde", kunde);
_navigationManager.NavigateTo("/speisekarte");
return;
}
}
JSRuntime.InvokeVoidAsync("alert", "Zugangscode ist falsch!");
}
protected override async Task OnInitializedAsync()
{
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
// if already logged in navigate to speisekarte
if (localStorage.ContainKey("kunde"))
{
_navigationManager.NavigateTo("/speisekarte");
}
}
public class Kunde
{
public int Idkunde { get; set; }
public string Code { get; set; }
public int Treuepunkte { get; set; }
}
}

View File

@ -1,5 +1,37 @@
@page "/Kontakt"
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
@code {
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
protected override async Task OnInitializedAsync()
{
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
}
public class Kunde
{
public int Idkunde { get; set; }
public string Code { get; set; }
public int Treuepunkte { get; set; }
}
}
<h3>Kontakt</h3>
<h4>Kundenservice</h4>

View File

@ -122,6 +122,9 @@
@code {
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
public int hour;
public int minute;
private void UpdateTime()
@ -182,7 +185,6 @@
// allergien, bestellungsposition, kunde, menuitem, menuitemkategorie, menuitemueberkategorie, rabatt
private List<Allergie> allergien = new List<Allergie>();
private List<Bestellungsposition> bestellungspositions = new List<Bestellungsposition>();
private List<Kunde> kunden = new List<Kunde>();
private List<Menuitem> menuitems = new List<Menuitem>();
private List<Menuitemkategorie> menuitemkategories = new List<Menuitemkategorie>();
private List<Menuitemueberkategorie> menuitemueberkategories = new List<Menuitemueberkategorie>();
@ -190,6 +192,17 @@
protected override async Task OnInitializedAsync()
{
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
// get data from localstorage
if (localStorage.GetItem<Dictionary<int, int>>("MenuItemIds") != null)
{
@ -199,7 +212,6 @@
// get data from api
allergien = await Http.GetFromJsonAsync<List<Allergie>>("https://localhost:7076/api/allergien");
bestellungspositions = await Http.GetFromJsonAsync<List<Bestellungsposition>>("https://localhost:7076/api/bestellungspositionen");
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
menuitems = await Http.GetFromJsonAsync<List<Menuitem>>("https://localhost:7076/api/Menuitems");
menuitemkategories = await Http.GetFromJsonAsync<List<Menuitemkategorie>>("https://localhost:7076/api/Menuitemkategories");
menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/Menuitemueberkategories");

View File

@ -1,6 +1,9 @@
@page "/Speisekarte"
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
<h1>Speisekarte</h1>
<div class="row justify-content-center">
@ -23,18 +26,39 @@
<tr>
<td><a href="/SpeisekarteChinesich">@item2.Bezeichnung</a></td>
</tr>
@if (@item2.Bezeichnung == "Nachspeise")
{
<tr>
<td class="lowest"><br></td>
</tr>
}
}
else if (@item.Bezeichnung == "Japanisch")
{
<tr>
<td><a href="/SpeisekarteJapanisch">@item2.Bezeichnung</a></td>
</tr>
@if (@item2.Bezeichnung == "Nachspeise")
{
<tr>
<td class="lowest"><br></td>
</tr>
}
}
else if (@item.Bezeichnung == "Getränke")
{
<tr>
<td><a href="/SpeisekarteGetraenke">@item2.Bezeichnung</a></td>
</tr>
@if (@item2.Bezeichnung == "Bier")
{
<tr>
<td class="lowest"><br></td>
</tr><tr>
<td class="lowest"><br></td>
</tr>
}
}
else if (@item.Bezeichnung == "Sonstiges")
{
@ -44,15 +68,9 @@
}
else
{
<tr>
<td><a href="/">@item2.Bezeichnung</a></td>
</tr>
}
}
}
<tr>
<td class="lowest"><br></td>
</tr>
<tr>
<td class="lowest"><br></td>
@ -70,11 +88,24 @@
@code {
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
private List<Menuitemkategorie> menuitemkategories = new List<Menuitemkategorie>();
private List<Menuitemueberkategorie> menuitemueberkategories = new List<Menuitemueberkategorie>();
protected override async Task OnInitializedAsync()
{
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
menuitemkategories = await Http.GetFromJsonAsync<List<Menuitemkategorie>>("https://localhost:7076/api/MenuItemKategories");
menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/MenuItemUeberkategories");
}
@ -97,4 +128,11 @@
}
}
public class Kunde
{
public int Idkunde { get; set; }
public string Code { get; set; }
public int Treuepunkte { get; set; }
}
}

View File

@ -2,6 +2,7 @@
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
<h1>Speisekarte Chinesisch</h1>
<div class="container">
@ -89,6 +90,9 @@
@code {
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
public Dictionary<int, int> menuitemIds = new Dictionary<int, int>();
private void SetMenuItemId(int id)
@ -107,7 +111,6 @@
private List<Allergie> allergien = new List<Allergie>();
private List<Bestellungsposition> bestellungspositions = new List<Bestellungsposition>();
private List<Kunde> kunden = new List<Kunde>();
private List<Menuitem> menuitems = new List<Menuitem>();
private List<Menuitemkategorie> menuitemkategories = new List<Menuitemkategorie>();
private List<Menuitemueberkategorie> menuitemueberkategories = new List<Menuitemueberkategorie>();
@ -115,6 +118,18 @@
protected override async Task OnInitializedAsync()
{
// kunde login start
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
// kunde login end
if (localStorage.GetItem<Dictionary<int, int>>("MenuItemIds") != null)
{
menuitemIds = localStorage.GetItem<Dictionary<int, int>>("MenuItemIds");
@ -122,7 +137,6 @@
allergien = await Http.GetFromJsonAsync<List<Allergie>>("https://localhost:7076/api/allergien");
bestellungspositions = await Http.GetFromJsonAsync<List<Bestellungsposition>>("https://localhost:7076/api/bestellungspositionen");
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
menuitems = await Http.GetFromJsonAsync<List<Menuitem>>("https://localhost:7076/api/Menuitems");
menuitemkategories = await Http.GetFromJsonAsync<List<Menuitemkategorie>>("https://localhost:7076/api/Menuitemkategories");
menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/Menuitemueberkategories");

View File

@ -2,6 +2,7 @@
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
<h1>Speisekarte Getränke</h1>
@* create an container bootstrap 5*@
@ -93,6 +94,8 @@
@code {
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
public Dictionary<int, int> menuitemIds = new Dictionary<int, int>();
@ -114,7 +117,6 @@
private List<Allergie> allergien = new List<Allergie>();
private List<Bestellungsposition> bestellungspositions = new List<Bestellungsposition>();
private List<Kunde> kunden = new List<Kunde>();
private List<Menuitem> menuitems = new List<Menuitem>();
private List<Menuitemkategorie> menuitemkategories = new List<Menuitemkategorie>();
private List<Menuitemueberkategorie> menuitemueberkategories = new List<Menuitemueberkategorie>();
@ -122,6 +124,18 @@
protected override async Task OnInitializedAsync()
{
// kunde login start
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
// kunde login end
if (localStorage.GetItem<Dictionary<int, int>>("MenuItemIds") != null)
{
menuitemIds = localStorage.GetItem<Dictionary<int, int>>("MenuItemIds");
@ -129,7 +143,6 @@
allergien = await Http.GetFromJsonAsync<List<Allergie>>("https://localhost:7076/api/allergien");
bestellungspositions = await Http.GetFromJsonAsync<List<Bestellungsposition>>("https://localhost:7076/api/bestellungspositionen");
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
menuitems = await Http.GetFromJsonAsync<List<Menuitem>>("https://localhost:7076/api/Menuitems");
menuitemkategories = await Http.GetFromJsonAsync<List<Menuitemkategorie>>("https://localhost:7076/api/Menuitemkategories");
menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/Menuitemueberkategories");

View File

@ -2,6 +2,7 @@
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
<h1>Speisekarte Sonstiges</h1>
@* create an container bootstrap 5*@
@ -92,12 +93,9 @@
</div>
</div>
@code {
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
public Dictionary<int, int> menuitemIds = new Dictionary<int, int>();
@ -117,7 +115,6 @@
private List<Allergie> allergien = new List<Allergie>();
private List<Bestellungsposition> bestellungspositions = new List<Bestellungsposition>();
private List<Kunde> kunden = new List<Kunde>();
private List<Menuitem> menuitems = new List<Menuitem>();
private List<Menuitemkategorie> menuitemkategories = new List<Menuitemkategorie>();
private List<Menuitemueberkategorie> menuitemueberkategories = new List<Menuitemueberkategorie>();
@ -125,13 +122,24 @@
protected override async Task OnInitializedAsync()
{
// kunde login start
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
// kunde login end
if (localStorage.GetItem<Dictionary<int, int>>("MenuItemIds") != null)
{
menuitemIds = localStorage.GetItem<Dictionary<int, int>>("MenuItemIds");
}
allergien = await Http.GetFromJsonAsync<List<Allergie>>("https://localhost:7076/api/allergien");
bestellungspositions = await Http.GetFromJsonAsync<List<Bestellungsposition>>("https://localhost:7076/api/bestellungspositionen");
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
menuitems = await Http.GetFromJsonAsync<List<Menuitem>>("https://localhost:7076/api/Menuitems");
menuitemkategories = await Http.GetFromJsonAsync<List<Menuitemkategorie>>("https://localhost:7076/api/Menuitemkategories");
menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/Menuitemueberkategories");

View File

@ -2,6 +2,7 @@
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
<h1>Speisekarte Japanisch</h1>
@* create an container bootstrap 5*@
@ -92,6 +93,8 @@
@code {
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
public Dictionary<int, int> menuitemIds = new Dictionary<int, int>();
@ -111,7 +114,6 @@
private List<Allergie> allergien = new List<Allergie>();
private List<Bestellungsposition> bestellungspositions = new List<Bestellungsposition>();
private List<Kunde> kunden = new List<Kunde>();
private List<Menuitem> menuitems = new List<Menuitem>();
private List<Menuitemkategorie> menuitemkategories = new List<Menuitemkategorie>();
private List<Menuitemueberkategorie> menuitemueberkategories = new List<Menuitemueberkategorie>();
@ -119,13 +121,24 @@
protected override async Task OnInitializedAsync()
{
// kunde login start
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
// kunde login end
if (localStorage.GetItem<Dictionary<int, int>>("MenuItemIds") != null)
{
menuitemIds = localStorage.GetItem<Dictionary<int, int>>("MenuItemIds");
}
allergien = await Http.GetFromJsonAsync<List<Allergie>>("https://localhost:7076/api/allergien");
bestellungspositions = await Http.GetFromJsonAsync<List<Bestellungsposition>>("https://localhost:7076/api/bestellungspositionen");
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
menuitems = await Http.GetFromJsonAsync<List<Menuitem>>("https://localhost:7076/api/Menuitems");
menuitemkategories = await Http.GetFromJsonAsync<List<Menuitemkategorie>>("https://localhost:7076/api/Menuitemkategories");
menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/Menuitemueberkategories");

View File

@ -1,51 +0,0 @@
@page "/TestFetchAllergienData"
@inject HttpClient Http
<PageTitle>Allergien</PageTitle>
<h1>Allergien</h1>
<p>This component demonstrates fetching data from the mysql server.</p>
@if (allergien == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>ID</th>
<th>Beschreibung</th>
</tr>
</thead>
<tbody>
@foreach (var allergie in allergien)
{
<tr>
<td>@allergie.Idallergie</td>
<td>@allergie.Beschreibung</td>
</tr>
}
</tbody>
</table>
}
@code {
private const string ServiceEndpoint = "https://localhost:7076/api/Allergien";
private Allergie[]? allergien;
protected override async Task OnInitializedAsync()
{
allergien = await Http.GetFromJsonAsync<Allergie[]>(ServiceEndpoint);
}
public partial class Allergie
{
public int Idallergie { get; set; }
public string? Beschreibung { get; set; }
}
}

View File

@ -1,5 +1,37 @@
@page "/yummypoints"
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
@code {
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
protected override async Task OnInitializedAsync()
{
// kunde login start
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
// kunde login end
}
public class Kunde
{
int Idkunde { get; set; }
public string Code { get; set; }
public int Treuepunkte { get; set; }
}
}
<body style='--blazor-load-percentage: 100%; --blazor-load-percentage-text: "100%";'>
<div class="d-flex justify-content-center">

View File

@ -83,10 +83,20 @@
Http.PutAsJsonAsync("https://localhost:7076/api/kunden/" + kunde.Idkunde, kunde);
summe = Math.Round(summe - (summe * rabatt.Prozent / 100), 2);
localStorage.SetItem("Summe", summe);
localStorage.SetItem("RabattEinloesen", true);
}
else
{
localStorage.SetItem("RabattEinloesen", false);
localStorage.SetItem("Summe", summe);
if (summe >= 8)
{
if (kunde.Treuepunkte < 10)
{
kunde.Treuepunkte++;
Http.PutAsJsonAsync("https://localhost:7076/api/kunden/" + kunde.Idkunde, kunde);
}
}
}
// add bestellung to API
@ -106,6 +116,7 @@
}
}
}
foreach (var item in menuitemIds)
{
bestellungspositionId++;
@ -128,18 +139,25 @@
Http.PostAsJsonAsync("https://localhost:7076/api/bestellungspositionen", bestellungsposition);
//Add menuitems to bestellungspositionHasMenuItem
BestellungspositionHasMenuitem bestellungspositionHasMenuItem = new BestellungspositionHasMenuitem();
bestellungspositionHasMenuItem.Bestellungsposition_IDBestellung = bestellungsposition.Idbestellung;
bestellungspositionHasMenuItem.MenuItem_IDMenuItem = item.Key;
////Add menuitems to bestellungspositionHasMenuItem
//BestellungspositionHasMenuitem bestellungspositionHasMenuItem = new BestellungspositionHasMenuitem();
//bestellungspositionHasMenuItem.Bestellungsposition_IDBestellung = bestellungsposition.Idbestellung;
//bestellungspositionHasMenuItem.MenuItem_IDMenuItem = item.Key;
Http.PostAsJsonAsync("https://localhost:7076/api/bestellungspositionhasmenuitems", bestellungspositionHasMenuItem);
//Http.PostAsJsonAsync("https://localhost:7076/api/bestellungspositionhasmenuitems", bestellungspositionHasMenuItem);
var newBestellungsposition = new BestellungspositionHasMenuitem()
{
Bestellungsposition_IDBestellung = bestellungsposition.Idbestellung,
MenuItem_IDMenuItem = item.Key
};
Http.PostAsJsonAsync("https://localhost:7076/api/bestellungspositionhasmenuitems", newBestellungsposition);
}
// delete all localStorage
localStorage.SetItem("MenuItemIds", new Dictionary<int, int>());
//localStorage.SetItem("Hour", 0);
//localStorage.SetItem("Minute", 0);
localStorage.SetItem("Summe", 0);
localStorage.SetItem("RabattEinloesen", false);
@ -156,18 +174,29 @@
protected override async Task OnInitializedAsync()
{
// kunde login start
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
// kunde login end
// get data from api
allergien = await Http.GetFromJsonAsync<List<Allergie>>("https://localhost:7076/api/allergien");
bestellungspositions = await Http.GetFromJsonAsync<List<Bestellungsposition>>("https://localhost:7076/api/bestellungspositionen");
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
menuitems = await Http.GetFromJsonAsync<List<Menuitem>>("https://localhost:7076/api/Menuitems");
menuitemkategories = await Http.GetFromJsonAsync<List<Menuitemkategorie>>("https://localhost:7076/api/Menuitemkategories");
menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/Menuitemueberkategories");
rabatte = await Http.GetFromJsonAsync<List<Rabatt>>("https://localhost:7076/api/Rabatte");
bestellungspositionHasMenuitems = await Http.GetFromJsonAsync<List<BestellungspositionHasMenuitem>>("https://localhost:7076/api/BestellungspositionHasMenuitems");
// test use the first kunde
kunde = kunden[0];
// get kunde from local storage
kunde = localStorage.GetItem<Kunde>("kunde");
// get the most recent rabatt, that are still valid (GueltigkeitBis)
// if there is no rabatt, set the rabatt to null
@ -306,7 +335,7 @@
public class BestellungspositionHasMenuitem
{
public int? Bestellungsposition_IDBestellung { get; set; }
public int? MenuItem_IDMenuItem { get; set; }
public int Bestellungsposition_IDBestellung { get; set; }
public int MenuItem_IDMenuItem { get; set; }
}
}

View File

@ -75,6 +75,18 @@
protected override async Task OnInitializedAsync()
{
// kunde login start
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
// kunde login end
// get data from api
allergien = await Http.GetFromJsonAsync<List<Allergie>>("https://localhost:7076/api/allergien");
bestellungspositions = await Http.GetFromJsonAsync<List<Bestellungsposition>>("https://localhost:7076/api/bestellungspositionen");
@ -84,8 +96,8 @@
menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/Menuitemueberkategories");
rabatte = await Http.GetFromJsonAsync<List<Rabatt>>("https://localhost:7076/api/Rabatte");
// test use the first kunde
kunde = kunden[0];
// get kunde from local storage
kunde = localStorage.GetItem<Kunde>("kunde");
// get the most recent rabatt, that are still valid (GueltigkeitBis)
// if there is no rabatt, set the rabatt to null

View File

@ -1,82 +1,173 @@
@page "/Bestelluebersicht"
@layout ChefinLayout
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
@*// logout button*@
<div class="container col-lg-5 col-md-9 col-sm-12 d-flex flex-column " id="content">
<button type="button" class="btn" @onclick="@Logout">Logout</button>
</div>
<div class="container d-flex flex-column">
<div class="row">
<div class="col-lg-8">
<br /><br />
<table class="table table-bordered">
<thead>
<tr>
<th colspan="2">Aktive Bestellungen</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="BDetail">#1234 &nbsp; 12:30</a></td>
<td><a href="BDetail">#2345 &nbsp; 18:45</a></td>
</tr>
<tr>
<td><a href="BDetail">#3456 &nbsp; 13:00</a></td>
<td><a href="BDetail">#4567 &nbsp; 19:00</a></td>
</tr>
<tr>
<td><a href="BDetail">#5678 &nbsp; 14:30</a></td>
<td><a href="BDetail">#6789 &nbsp; 19:15</a></td>
</tr>
<tr>
<td><a href="BDetail">#4321 &nbsp; 15:15</a></td>
<td><a href="BDetail">#5432 &nbsp; 19:15</a></td>
</tr>
<tr>
<td><a href="BDetail">#6543 &nbsp; 15:30</a></td>
<td><a href="BDetail">#7654 &nbsp; 19:15</a></td>
</tr>
<tr>
<td><a href="BDetail">#7654 &nbsp; 15:30</a></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><a href="BDetail">#8765 &nbsp; 16:00</a></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><a href="BDetail">#9876 &nbsp; 17:30</a></td>
<td>&nbsp;</td>
</tr>
<div class="row">
<div class="col-12">
<br /><br />
<table class="table table-bordered">
<thead>
<tr>
<th>Aktive Bestellungen @day.@month.@year</th>
</tr>
</thead>
<tbody>
@*iterate all kunden*@
@foreach (var kunde in kunden)
{
bool firstTime = true;
@*if kunde has made a recent bestellungsposiotn from today and higher value than now, print it*@
@foreach (var bestellungsposition in bestellungspositions)
{
if (bestellungsposition.KundeIdkunde == kunde.Idkunde)
{
@*get the last highes datum from Datum*@
if (firstTime)
{
@*if (bestellungsposition.Datum == bestellungspositions.Max(x => x.Datum))*@
@*{*@
@*get hour and minute from datetime of last bestellungsposition*@
hour = bestellungsposition.Datum.Hour;
minute = bestellungsposition.Datum.Minute;
day = bestellungsposition.Datum.Day;
month = bestellungsposition.Datum.Month;
year = bestellungsposition.Datum.Year;
</tbody>
</table>
</div>
<div class="col-lg-3">
<p id="text" readonly >Abholzeit</p>
<br />
<form id="button" action="Bestelluebersicht">
<input type="submit" value="30 Min" class="btn">
</form>
<form id="button" action="Bestelluebersicht">
<input type="submit" value="45 Min" class="btn">
</form>
<form id="button" action="Bestelluebersicht">
<input type="submit" value="1 Std" class="btn">
</form>
</div>
</div>
@*print only if date is higher than now datum, all expired hh:mm unvisible *@
@*if (bestellungsposition.Datum > DateTime.Now)
{
<tr>
<td>
<p @onclick="@(()=>BDetail(@kunde.Idkunde))" class="mb-0 pb-0">
#@kunde.Code &nbsp;
@hour:@minute
</p>
</td>
</tr>
}*@
@*print only if date is in current day month year *@
if (bestellungsposition.Datum.Day == DateTime.Now.Day && bestellungsposition.Datum.Month == DateTime.Now.Month && bestellungsposition.Datum.Year == DateTime.Now.Year)
{
<tr>
<td>
<p @onclick="@(()=>BDetail(@kunde.Idkunde))" class="mb-0 pb-0">
#@kunde.Code &nbsp;
@hour:@minute
</p>
</td>
</tr>
}
firstTime = false;
}
}
}
}
</tbody>
</table>
</div>
<div class="col-lg-3">
@* <p id="text" readonly>Abholzeit</p>
<br />
<form id="button" action="Bestelluebersicht">
<input type="submit" value="30 Min" class="btn">
</form>
<form id="button" action="Bestelluebersicht">
<input type="submit" value="45 Min" class="btn">
</form>
<form id="button" action="Bestelluebersicht">
<input type="submit" value="1 Std" class="btn">
</form>*@
</div>
</div>
</div>
@code {
public int hour;
public int minute;
public int day;
public int month;
public int year;
private List<Bestellungsposition> bestellungspositions = new List<Bestellungsposition>();
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
public void Logout()
{
localStorage.Clear();
_navigationManager.NavigateTo("/");
}
public void BDetail(int id)
{
localStorage.SetItem<int>("KundeId", id);
_navigationManager.NavigateTo("/BestelluebersichtD-Chefin");
}
protected override async Task OnInitializedAsync()
{
// get data from api
bestellungspositions = await Http.GetFromJsonAsync<List<Bestellungsposition>>("https://localhost:7076/api/bestellungspositionen");
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
// set hour, minute, day , month, year to now date
hour = DateTime.Now.Hour;
minute = DateTime.Now.Minute;
day = DateTime.Now.Day;
month = DateTime.Now.Month;
year = DateTime.Now.Year;
//sort bestellungspositions by datum
bestellungspositions = bestellungspositions.OrderByDescending(x => x.Datum).ToList();
//sort kunden by the order of bestellungspositions
List<Kunde> kundenSorted = new List<Kunde>();
foreach (var bestellungsposition in bestellungspositions)
{
foreach (var kunde in kunden)
{
if (bestellungsposition.KundeIdkunde == kunde.Idkunde && !kundenSorted.Contains(kunde))
{
kundenSorted.Add(kunde);
}
}
}
kunden = kundenSorted;
}
public class Bestellungsposition
{
public int Idbestellung { get; set; }
public int Menge { get; set; }
public DateTime Datum { get; set; }
public int KundeIdkunde { get; set; }
public int? RabattIdrabatt { get; set; }
}
public class Kunde
{
public int Idkunde { get; set; }
public string Code { get; set; }
public int Treuepunkte { get; set; }
}
}

View File

@ -1,131 +1,117 @@
@page "/BestelluebersichtD-Chefin"
@layout ChefinLayout
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
@*// logout button*@
<div class="container col-lg-5 col-md-9 col-sm-12 d-flex flex-column " id="content">
<button type="button" class="btn" @onclick="@Logout">Logout</button>
</div>
<div class="container">
<div class="row">
<div class="col-sm-12 col-lg-6">
@*Tabelle Ihre Bestellung*@
<div class="tbl-container">
<table class="table bdr">
<thead class="bg_green">
<tr>
<td>Ihre Bestellung</td>
<th></th>
</tr>
</thead>
<tbody class="bg_lightgreen" style="background-color:white;">
<tr>
<td class="br" style="padding-top:20px; padding-bottom:0px; border-bottom-width: 0px;">
1 Nudel mit Hühnerfleisch (groß)
<div style="font-size:0.7rem;padding-left:15px;">mit Knoblauchsoße</div>
</td>
<td class="d-flex justify-content-center align-items-center" style="padding-top:20px; padding-bottom:0px; border-style:hidden;">9,10€</td>
</tr>
<tr>
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;">1 Coca Cola</td>
<td class="d-flex justify-content-center align-items-center" style="padding-top:0px; border-style:hidden;">2,50€</td>
</tr>
<tr>
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
<td class="d-flex justify-content-center align-items-center" style="border-style:hidden;"></td>
</tr>
<tr>
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
<td class="d-flex justify-content-center align-items-center" style="border-style:hidden;"></td>
</tr>
<tr>
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
<td class="d-flex justify-content-center align-items-center" style="border-style:hidden;"></td>
</tr>
<tr>
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
<td class="d-flex justify-content-center align-items-center" style="border-style:hidden;"></td>
</tr>
<tr>
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
<td class="d-flex justify-content-center align-items-center" style="border-style:hidden;"></td>
</tr>
<tr>
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
<td class="d-flex justify-content-center align-items-center" style="border-style:hidden;"></td>
</tr>
<tr>
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
<td class="d-flex justify-content-center align-items-center" style="border-style:hidden;"></td>
</tr>
<tr>
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
<td class="d-flex justify-content-center align-items-center" style="border-bottom-width: 0px; border-style:hidden;"></td>
</tr>
<tr>
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
<td class="d-flex justify-content-center align-items-center" style="border-bottom-width: 0px; border-style:hidden;"></td>
</tr>
<tr>
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
<td class="d-flex justify-content-center align-items-center" style="border-bottom-width: 0px; border-style:hidden;"></td>
</tr>
<tr>
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
<td class="d-flex justify-content-center align-items-center" style="border-bottom-width: 0px; border-style:hidden;"></td>
</tr>
<tr>
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
<td class="d-flex justify-content-center align-items-center" style="border-bottom-width: 0px; border-style:hidden;"></td>
</tr>
</tbody>
<tfoot class="bg_lightgreen">
<tr style="border-top:solid 1px black; background-color:white;">
<th class="" style="text-align:right;">Summe</th>
<td class="d-flex justify-content-center align-items-center">11,60€</td>
</tr>
</tfoot>
</table>
</div>
<div class="row">
</div>
<div class="col-sm-12 col-lg-6">
<div class="d-flex flex-column align-items-center ">
<div class="tbl-container w-100">
<!-- <== overflow: hidden applied to parent -->
<table class="table table-bordered bdr " style=" border-radius: 50px; margin-left: 50px;">
<thead class="bg_green">
<tr>
<td class="d-flex justify-content-center align-items-center" style="border-bottom:0px;">
<p>Abholzeit</p>
</td>
</tr>
</thead>
<tbody >
<tr>
<td class="d-flex justify-content-center align-items-center" style="padding-top:0px; background-color:white;">
<div style="margin:20px;">
<div class="d-flex justify-content-center align-items-center" >
<p>12:30 Uhr</p>
</div>
</div>
</td>
</tr>
</tbody>
</table>
<div class="col-sm-12 col-lg-6">
@*Tabelle Ihre Bestellung*@
<div class="tbl-container">
<table class="table bdr">
<thead class="bg_green">
<tr>
<td>Ihre Bestellung (@day.@month.@year)</td>
<th></th>
</tr>
</thead>
<tbody class="bg_lightgreen" style="background-color:white;">
@if (menuitemIds.Count == 0)
{
<div class="card-body">
<h5 class="card-title" style="font-size:10pt; margin-bottom:0px;">Warenkorb ist leer</h5>
</div>
}
else
{
@foreach (var item in menuitemIds)
{
@foreach (var item2 in menuitems)
{
@if (item.Key == item2.IdmenuItem)
{
<tr>
<div class="d-flex flex-column" style="align-items: center; margin-left: 100px;">
<button class="btn_back w-75">Zurück</button>
<button class="btn btn-danger w-75" style="border-radius: 50px; padding-top:12px; padding-bottom:12px; color:black;">Bestellung auflösen</button>
<button class="btn_forward w-75">Bestellung abschließen</button>
</div>
<td class="br" style="padding-top:20px; padding-bottom:0px; border-bottom-width: 0px;">
@item.Value x
@item2.Bezeichnung
<div style="font-size:0.7rem;padding-left:15px;">@item2.Zusatzinformation</div>
</td>
<td class="d-flex justify-content-center align-items-center" style="padding-top:20px; border-bottom-width:0px;">@(item2.Preis * item.Value)€</td>
</tr>
}
}
</div>
</div>
</div>
</div>
}
}
</tbody>
<tfoot class="bg_lightgreen">
<tr style="border-top:solid 1px black; background-color:white;">
<th class="" style="text-align:right;">Summe</th>
<td class="d-flex justify-content-center align-items-center">
@summe€ &nbsp;
@if (rabattEinloesen)
{
<span style="color:green;">(- @rabatt.Prozent%)</span>
}
</td>
</tr>
</tfoot>
</table>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="d-flex flex-column align-items-center ">
<div class="tbl-container w-100">
<!-- <== overflow: hidden applied to parent -->
<table class="table table-bordered bdr " style=" border-radius: 50px; ">
<thead class="bg_green">
<tr>
<td class="d-flex justify-content-center align-items-center" style="border-bottom:0px;">
<p>Abholzeit</p>
</td>
</tr>
</thead>
<tbody>
<tr>
<td class="d-flex justify-content-center align-items-center" style="padding-top:0px; background-color:white;">
<div style="margin:20px;">
<div class="d-flex justify-content-center align-items-center">
<p>@hour:@minute Uhr (@day.@month.@year)</p>
</div>
</div>
</td>
</tr>
</tbody>
</table>
<div class="d-flex flex-column" style="align-items: center; margin-left: 100px;">
@*<button class="btn_back w-75">Zurück</button>*@
@*<button class="btn btn-danger w-75" style="border-radius: 50px; padding-top:12px; padding-bottom:12px; color:black;" @onclick="Aufloesen">Bestellung auflösen</button>*@
@*<button class="btn_forward w-75">Bestellung abschließen</button>*@
</div>
</div>
</div>
</div>
</div>
@*Buttons*@
</div>
@*Buttons*@
</div>
@*<div class="h-100">
@*Essen Abholen?
@ -134,6 +120,177 @@
</div>
</div>
</div>*@
@code {
public int hour;
public int minute;
public int day;
public int month;
public int year;
public decimal summe;
public Dictionary<int, int> menuitemIds = new Dictionary<int, int>();
private Rabatt rabatt = new Rabatt();
private bool rabattEinloesen;
public decimal rabattGutschrift;
private List<Bestellungsposition> bestellungspositions = new List<Bestellungsposition>();
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
private List<Menuitem> menuitems = new List<Menuitem>();
private List<Rabatt> rabatte = new List<Rabatt>();
private List<BestellungspositionHasMenuitem> bestellungspositionHasMenuitems = new List<BestellungspositionHasMenuitem>();
public void Logout()
{
localStorage.Clear();
_navigationManager.NavigateTo("/");
}
//public void Aufloesen()
//{
// foreach (var bestellungsposition in bestellungspositions)
// {
// foreach (var bestellungspositionHasMenuitem in bestellungspositionHasMenuitems)
// {
// if (bestellungsposition.Idbestellung == bestellungspositionHasMenuitem.Bestellungsposition_IDBestellung)
// {
// Http.DeleteAsync("https://localhost:7076/api/BestellungspositionHasMenuitems/" + bestellungspositionHasMenuitem.Bestellungsposition_IDBestellung + "/" + bestellungspositionHasMenuitem.MenuItem_IDMenuItem);
// }
// }
// if (bestellungsposition.KundeIdkunde == kunde.Idkunde)
// {
// Http.DeleteAsync("https://localhost:7076/api/Bestellungspositionen/" + bestellungsposition.Idbestellung);
// }
// }
//}
protected override async Task OnInitializedAsync()
{
// get data from api
bestellungspositions = await Http.GetFromJsonAsync<List<Bestellungsposition>>("https://localhost:7076/api/bestellungspositionen");
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
menuitems = await Http.GetFromJsonAsync<List<Menuitem>>("https://localhost:7076/api/Menuitems");
rabatte = await Http.GetFromJsonAsync<List<Rabatt>>("https://localhost:7076/api/Rabatte");
bestellungspositionHasMenuitems = await Http.GetFromJsonAsync<List<BestellungspositionHasMenuitem>>("https://localhost:7076/api/BestellungspositionHasMenuitems");
// get kunde from localstorage
int kundeId = localStorage.GetItem<int>("KundeId");
kunde = kunden.Where(x => x.Idkunde == kundeId).FirstOrDefault();
// get all menuitemIds from bestellungspositions with the last date
foreach (var bestellungsposition in bestellungspositions)
{
if (bestellungsposition.KundeIdkunde == kunde.Idkunde)
{
//if (bestellungsposition.Datum == bestellungspositions.Max(x => x.Datum))
//{
// get hour and minute from datetime of last bestellungsposition
hour = bestellungsposition.Datum.Hour;
minute = bestellungsposition.Datum.Minute;
day = bestellungsposition.Datum.Day;
month = bestellungsposition.Datum.Month;
year = bestellungsposition.Datum.Year;
//if rabatt is used
if (bestellungsposition.RabattIdrabatt != null)
{
rabattEinloesen = true;
foreach (var rabatt in rabatte)
{
if (rabatt.Idrabatt == bestellungsposition.RabattIdrabatt)
{
this.rabatt = rabatt;
}
}
}
foreach (var bestellungspositionHasMenuitem in bestellungspositionHasMenuitems)
{
if (bestellungspositionHasMenuitem.Bestellungsposition_IDBestellung == bestellungsposition.Idbestellung)
{
menuitemIds.Add(bestellungspositionHasMenuitem.MenuItem_IDMenuItem, bestellungsposition.Menge);
}
}
//}
}
}
// get summe
foreach (var menuitem in menuitems)
{
foreach (var menuitemId in menuitemIds)
{
if (menuitem.IdmenuItem == menuitemId.Key)
{
summe += menuitem.Preis * menuitemId.Value;
}
}
}
//if rabatt is used calculate new summe
if (rabattEinloesen)
{
rabattGutschrift = (summe * rabatt.Prozent / 100);
summe = summe - rabattGutschrift;
summe = Math.Round(summe, 2);
}
}
public class Bestellungsposition
{
public int Idbestellung { get; set; }
public int Menge { get; set; }
public DateTime Datum { get; set; }
public int KundeIdkunde { get; set; }
public int? RabattIdrabatt { get; set; }
}
public class Kunde
{
public int Idkunde { get; set; }
public string? Code { get; set; }
public int? Treuepunkte { get; set; }
}
public class Menuitem
{
public int IdmenuItem { get; set; }
public string? Bezeichnung { get; set; }
public string? Zusatzinformation { get; set; }
public decimal Preis { get; set; }
}
public class Rabatt
{
public int Idrabatt { get; set; }
public decimal Prozent { get; set; }
public DateTime? GueltigkeitVon { get; set; }
public DateTime? GueltigkeitBis { get; set; }
}
public class BestellungspositionHasMenuitem
{
public int Bestellungsposition_IDBestellung { get; set; }
public int MenuItem_IDMenuItem { get; set; }
}
}

View File

@ -1,5 +1,36 @@
@page "/FBestätigung"
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
@code {
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
protected override async Task OnInitializedAsync()
{
// kunde login start
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
// kunde login end
}
public class Kunde
{
int Idkunde { get; set; }
public string Code { get; set; }
public int Treuepunkte { get; set; }
}
}
<div class="container col-lg-5 col-md-9 col-sm-12 d-flex flex-column " id="content">
<h4>Vielen Dank für Ihr Feedback. Durch Feedbacks können wir uns stets verbessern.<br></h4>
@ -7,9 +38,3 @@
<input type="submit" value="Zur Startseite" class="btn">
</form>
</div>
@code {
}

View File

@ -1,5 +1,37 @@
@page "/Feedback"
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
@code {
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
protected override async Task OnInitializedAsync()
{
// kunde login start
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
// kunde login end
}
public class Kunde
{
int Idkunde { get; set; }
public string Code { get; set; }
public int Treuepunkte { get; set; }
}
}
<body>
<div class="container col-lg-5 col-md-9 col-sm-12 d-flex flex-column " id="content">
<h4 for="feedback">Ihr Feedback: </h4>
@ -14,8 +46,4 @@
</div>
</body>
@code {
}
</body>

View File

@ -8,6 +8,11 @@
<br>
@*log out Button *@
<div class="container mt-auto">
<button class="btn" type="button" onclick="@Logout" id="button1">Abmelden</button>
</div>
<br />
<div class="container mt-auto">
<h4>AccountID: @kunde.Code</h4>
@ -64,7 +69,6 @@
</tr>
}
}
}
}
</tbody>
@ -127,6 +131,9 @@
@code {
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
bool changeButtonBool { get; set; } = true;
string button1 => changeButtonBool ? "Konto deaktivieren" : "Konto aktivieren";
@ -137,11 +144,12 @@
changeButtonBool = !changeButtonBool;
}
}
public void Logout()
{
localStorage.Clear();
_navigationManager.NavigateTo("/");
}
@code {
public int hour;
public int minute;
public int day;
@ -158,14 +166,24 @@
private List<Bestellungsposition> bestellungspositions = new List<Bestellungsposition>();
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
private List<Menuitem> menuitems = new List<Menuitem>();
private List<Rabatt> rabatte = new List<Rabatt>();
private List<BestellungspositionHasMenuitem> bestellungspositionHasMenuitems = new List<BestellungspositionHasMenuitem>();
protected override async Task OnInitializedAsync()
{
// kunde login start
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
// kunde login end
// get data from api
bestellungspositions = await Http.GetFromJsonAsync<List<Bestellungsposition>>("https://localhost:7076/api/bestellungspositionen");
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
@ -173,43 +191,40 @@
rabatte = await Http.GetFromJsonAsync<List<Rabatt>>("https://localhost:7076/api/Rabatte");
bestellungspositionHasMenuitems = await Http.GetFromJsonAsync<List<BestellungspositionHasMenuitem>>("https://localhost:7076/api/BestellungspositionHasMenuitems");
// get kunde from local storage
kunde = localStorage.GetItem<Kunde>("kunde");
// use kudnde with id 1
kunde = kunden[0];
// get all menuitemIds from bestellungspositions with the last date
foreach (var bestellungsposition in bestellungspositions)
foreach (Bestellungsposition bestellungsposition in bestellungspositions)
{
if (bestellungsposition.KundeIdkunde == kunde.Idkunde)
{
if (bestellungsposition.Datum == bestellungspositions.Max(x => x.Datum))
// get hour and minute from datetime of last bestellungsposition
hour = bestellungsposition.Datum.Hour;
minute = bestellungsposition.Datum.Minute;
day = bestellungsposition.Datum.Day;
month = bestellungsposition.Datum.Month;
year = bestellungsposition.Datum.Year;
//if rabatt is used
if (bestellungsposition.RabattIdrabatt != null)
{
// get hour and minute from datetime of last bestellungsposition
hour = bestellungsposition.Datum.Hour;
minute = bestellungsposition.Datum.Minute;
day = bestellungsposition.Datum.Day;
month = bestellungsposition.Datum.Month;
year = bestellungsposition.Datum.Year;
//if rabatt is used
if (bestellungsposition.RabattIdrabatt != null)
rabattEinloesen = true;
foreach (var rabatt in rabatte)
{
rabattEinloesen = true;
foreach (var rabatt in rabatte)
if (rabatt.Idrabatt == bestellungsposition.RabattIdrabatt)
{
if (rabatt.Idrabatt == bestellungsposition.RabattIdrabatt)
{
this.rabatt = rabatt;
}
this.rabatt = rabatt;
}
}
}
foreach (var bestellungspositionHasMenuitem in bestellungspositionHasMenuitems)
foreach (var bestellungspositionHasMenuitem in bestellungspositionHasMenuitems)
{
if (bestellungspositionHasMenuitem.Bestellungsposition_IDBestellung == bestellungsposition.Idbestellung)
{
if (bestellungspositionHasMenuitem.Bestellungsposition_IDBestellung == bestellungsposition.Idbestellung)
{
menuitemIds.Add(bestellungspositionHasMenuitem.MenuItem_IDMenuItem, bestellungsposition.Menge);
}
menuitemIds.Add(bestellungspositionHasMenuitem.MenuItem_IDMenuItem, bestellungsposition.Menge);
}
}
}

View File

@ -1,61 +1,93 @@
<nav class="navbar navbar-expand-md navbar-light mb-4 me-5 ms-5 ">
<div class="container-fluid">
@*<a class="navbar-brand" href="">Yummy4Friends</a>*@
<a class="navbar-brand" href="">
<img src="assets/Logo_new.png" alt="Yummy4Friends" width="60px" height="auto">
</a>
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
<button class="navbar-toggler @NavButtonCssClass" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"
aria-controls="navbarCollapse" aria-label="Toggle navigation" @onclick="ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse justify-content-end @NavBarCssClass" id="navbarCollapse" @onclick="ToggleNavMenu">
<ul class="navbar-nav">
<li class="nav-item">
</li>
<li class="nav-item">
<NavLink class="nav-link" href="allergene">
Allergene
</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link" href="speisekarte">
Speisekarte
</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link" href="yummy-punkte">
Yummy-Punkte
</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link" href="shopping_cart">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-cart3" viewBox="0 0 16 16">
<path d="M0 1.5A.5.5 0 0 1 .5 1H2a.5.5 0 0 1 .485.379L2.89 3H14.5a.5.5 0 0 1 .49.598l-1 5a.5.5 0 0 1-.465.401l-9.397.472L4.415 11H13a.5.5 0 0 1 0 1H4a.5.5 0 0 1-.491-.408L2.01 3.607 1.61 2H.5a.5.5 0 0 1-.5-.5zM3.102 4l.84 4.479 9.144-.459L13.89 4H3.102zM5 12a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm7 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm-7 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm7 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2z" />
</svg>
</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link" href="Kontoverwaltung">
#12345
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-person-fill" viewBox="0 0 16 16">
<path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" />
</svg>
</NavLink>
</li>
</ul>
</div>
</div>
<nav class="navbar navbar-expand-md navbar-light mb-4 me-5 ms-5 ">
<div class="container-fluid">
@*<a class="navbar-brand" href="">Yummy4Friends</a>*@
<a class="navbar-brand" href="">
<img src="assets/Logo_new.png" alt="Yummy4Friends" width="60px" height="auto">
</a>
<button class="navbar-toggler @NavButtonCssClass" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"
aria-controls="navbarCollapse" aria-label="Toggle navigation" @onclick="ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse justify-content-end @NavBarCssClass" id="navbarCollapse" @onclick="ToggleNavMenu">
<ul class="navbar-nav">
<li class="nav-item">
</li>
<li class="nav-item">
<NavLink class="nav-link" href="allergene">
Allergene
</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link" href="speisekarte">
Speisekarte
</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link" href="yummy-punkte">
Yummy-Punkte
</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link" href="shopping_cart">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-cart3" viewBox="0 0 16 16">
<path d="M0 1.5A.5.5 0 0 1 .5 1H2a.5.5 0 0 1 .485.379L2.89 3H14.5a.5.5 0 0 1 .49.598l-1 5a.5.5 0 0 1-.465.401l-9.397.472L4.415 11H13a.5.5 0 0 1 0 1H4a.5.5 0 0 1-.491-.408L2.01 3.607 1.61 2H.5a.5.5 0 0 1-.5-.5zM3.102 4l.84 4.479 9.144-.459L13.89 4H3.102zM5 12a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm7 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm-7 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm7 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2z" />
</svg>
</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link" href="Kontoverwaltung">
#@kunde.Code
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-person-fill" viewBox="0 0 16 16">
<path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" />
</svg>
</NavLink>
</li>
</ul>
</div>
</div>
</nav>
@code {
private bool collapseNavMenu = true;
private string? NavBarCssClass => collapseNavMenu ? null : "show";
private string? NavButtonCssClass => collapseNavMenu ? "collapsed" : null;
private bool collapseNavMenu = true;
private string? NavBarCssClass => collapseNavMenu ? null : "show";
private string? NavButtonCssClass => collapseNavMenu ? "collapsed" : null;
private void ToggleNavMenu()
{
collapseNavMenu = !collapseNavMenu;
}
private void ToggleNavMenu()
{
collapseNavMenu = !collapseNavMenu;
}
private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde();
protected override async Task OnInitializedAsync()
{
// kunde login start
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
// kunde login end
}
public class Kunde
{
int Idkunde { get; set; }
public string Code { get; set; }
public int Treuepunkte { get; set; }
}
}

View File

@ -1,36 +1,78 @@
@page "/RegistrierungA"
@using System.Text;
@using System.Security.Cryptography;
@layout Registrierung
@inject NavigationManager NavManager
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
@inject IJSRuntime JSRuntime;
<div class="container col-lg-5 col-md-9 col-sm-12 d-flex flex-column " id="content">
<p>Benutzername:</p>
<p>Benutzername:</p>
<input type="text" class="form-control" id="name" name="name" @bind="@inputName">
<input type="text" class="form-control" id="name" name="name" @bind="@inputName">
<p>Passwort:</p>
<input type="password" class="form-control" id="password" name="password" @bind="@inputPassword">
<button type="button" class="btn" @onclick="@Login">Login</button>
<p>Passwort:</p>
<input type="password" class="form-control" id="password" name="password" @bind="@inputPassword">
<button type="button" class="btn" @onclick="@Login">Login</button>
</div>
@code {
public string inputName { get; set; } = string.Empty;
public string inputPassword { get; set; } = string.Empty;
public string inputName { get; set; }
public string inputPassword { get; set; }
public string inputPasswordEnc { get; set; }
public static string userName { get; set; } = string.Empty;
private List<Admin> admins = new List<Admin>();
private Admin admin = new Admin();
public void Login() {
if (inputName == userDataName && inputPassword == userDataPassword) {
localStorage.SetItem("name", inputName);
userName = localStorage.GetItem<string>("name");
NavManager.NavigateTo("/Bestelluebersicht");
}
}
}
public void Login()
{
// if inputName and inputPassword is not null
if (string.IsNullOrEmpty(inputName) || string.IsNullOrEmpty(inputPassword))
{
JSRuntime.InvokeVoidAsync("alert", "Benutzernamen oder Passwort ist falsch!");
return;
}
else
{
//encode inputpassword
inputPasswordEnc = Convert.ToHexString(SHA512.Create().ComputeHash(Encoding.UTF8.GetBytes(inputPassword)));
@code {
public string userDataName { get; set; } = "";
public string userDataPassword { get; set; } = "";
// if inputName is in admins with the encrypt SHA512 password
if (admins.Any(a => a.Username == inputName && a.Password == inputPasswordEnc))
{
localStorage.SetItem("admin", admins.First(a => a.Username == inputName && a.Password == inputPasswordEnc));
_navigationManager.NavigateTo("/Bestelluebersicht");
}
}
}
protected override async Task OnInitializedAsync()
{
admins = await Http.GetFromJsonAsync<List<Admin>>("https://localhost:7076/api/admins");
// if already logged in navigate to Bestelluebersicht
// if localsorage admin object is valid from the api
if (localStorage.ContainKey("admin"))
{
admin = localStorage.GetItem<Admin>("admin");
if (admin != null && !admins.Any(a => a.Username == admin.Username && a.Password == admin.Password))
_navigationManager.NavigateTo("/RegistrierungA");
else
_navigationManager.NavigateTo("/Bestelluebersicht");
}
}
public partial class Admin
{
public int Id { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}
}

View File

@ -1,16 +0,0 @@
<div class="alert alert-secondary mt-4">
<span class="oi oi-pencil me-2" aria-hidden="true"></span>
<strong>@Title</strong>
<span class="text-nowrap">
Please take our
<a target="_blank" class="font-weight-bold link-dark" href="https://go.microsoft.com/fwlink/?linkid=2186157">brief survey</a>
</span>
and tell us what you think.
</div>
@code {
// Demonstrates how a parent component can supply parameters
[Parameter]
public string? Title { get; set; }
}

View File

@ -1,6 +1,7 @@
@page "/Yummy-Punkte"
@inject HttpClient Http
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
@inject NavigationManager _navigationManager
<body>
<div class="container col-lg-5 col-md-9 col-sm-12 d-flex flex-column " id="content">
@ -59,10 +60,23 @@
protected override async Task OnInitializedAsync()
{
// kunde login start
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
if (localStorage.ContainKey("kunde"))
kunde = localStorage.GetItem<Kunde>("kunde");
else
_navigationManager.NavigateTo("/");
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/");
// kunde login end
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
rabatte = await Http.GetFromJsonAsync<List<Rabatt>>("https://localhost:7076/api/Rabatte");
kunde = kunden[0];
// get kunde from local storage
kunde = localStorage.GetItem<Kunde>("kunde");
// get the most recent rabatt, that are still valid (GueltigkeitBis)
// if there is no rabatt, set the rabatt to null

View File

@ -3,20 +3,29 @@
html, body {
margin: 0px;
padding: 0px;
overflow: hidden;
}
#content {
background-color: #C7FFD1;
padding: 5%;
margin-top: 1%;
border-radius: 10px;
position: center;
}
#button1 {
background-color: #89F9A5;
border-radius: 50px;
margin-bottom: 15px;
}
h1 {
margin: 0px;
padding: 0px;
}
.img {
height: auto;
max-width: 100%;
margin: 10%;
margin: 5%;
}
form {
@ -26,3 +35,17 @@ form {
}
p {
color: grey;
}
form {
margin-bottom: 20px;
margin-top: 5px;
}
.form-control {
border-radius: 50px;
margin-bottom: 5px;
}