Compare commits
11 Commits
6c1b7bd336
...
workflow/T
Author | SHA1 | Date | |
---|---|---|---|
59ff664ffe | |||
fced97beb0 | |||
bf32b6999b | |||
b7719ca4b6 | |||
6f8dabbd3f | |||
fe765064de | |||
ece3af8316 | |||
4180c3c61e | |||
fe4a58e4ea | |||
688315441e | |||
f41229cd71
|
23
.github/workflows/dotnet.yml
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
name: Test if program still runs
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "dev" ]
|
||||
pull_request:
|
||||
branches: [ "dev" ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v3
|
||||
with:
|
||||
dotnet-version: 7.0.107
|
||||
- name: Restore dependencies
|
||||
run: dotnet restore
|
||||
- name: Build
|
||||
run: dotnet build --no-restore
|
46
README.md
@ -1,3 +1,47 @@
|
||||
# y4f
|
||||
|
||||
[](https://github.com/yummy4friends/y4f/actions/workflows/main.yml)
|
||||
## Description (German)
|
||||
|
||||
Yummy4Friends ist eine benutzerfreundliche und visuell ansprechende Webapp zur Onlinebestellung von Speisen mit der dynamischen Einbindung einer Kunden- und Speisendatenbank unter Berücksichtigung von Sonderwünschen. Zur Kundenbindung wird auch die Verwaltung von Kundenrabatten, Vorbestellmöglichkeiten sowie konfigurierbare Abholtermine realisiert.
|
||||
|
||||
## 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.
|
||||
|
||||
## Tech Stack
|
||||
|
||||
[Blazor WebAssembly](https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor)
|
||||
|
||||
## Dependecies
|
||||
|
||||
On Ubuntu our dependencies are:
|
||||
|
||||
```bash
|
||||
nala install dotnet-sdk-7.0 docker-ce docker-ce-cli docker-buildx-plugin docker-compose-plugin
|
||||
```
|
||||
|
||||
Dependency names will depend on your linux distribution.
|
||||
|
||||
For this this project you also need Traefik. Or you can use your own reverse proxy and edit the docker-compose files to reflect that.
|
||||
|
||||
## Running it
|
||||
|
||||
Clone the repo.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/yummy4friends/y4f.git && cd y4f
|
||||
```
|
||||
|
||||
Start the website with docker-compose.
|
||||
|
||||
```bash
|
||||
docker-compose up --build -d
|
||||
```
|
||||
|
||||
Also start up the API.
|
||||
|
||||
```bash
|
||||
cd src/WebApi/ && docker-compose up --build -d
|
||||
```
|
||||
|
||||
This setup is for showcasing the project and is therefore not intended for production.
|
||||
|
@ -12,12 +12,11 @@ services:
|
||||
- traefik.http.routers.y4f-webapi.tls=true
|
||||
- traefik.http.routers.y4f-webapi.tls.certResolver=default
|
||||
networks:
|
||||
- default
|
||||
- y4f-default
|
||||
- traefik
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
default:
|
||||
name: y4f-default
|
||||
y4f-default:
|
||||
external: true
|
||||
traefik:
|
||||
external: true
|
@ -1,3 +1,4 @@
|
||||
using Blazored.LocalStorage;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
|
||||
using y4f;
|
||||
@ -6,7 +7,7 @@ var builder = WebAssemblyHostBuilder.CreateDefault(args);
|
||||
builder.RootComponents.Add<App>("#app");
|
||||
builder.RootComponents.Add<HeadOutlet>("head::after");
|
||||
|
||||
|
||||
builder.Services.AddBlazoredLocalStorage();
|
||||
|
||||
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
|
||||
|
||||
|
@ -14,6 +14,7 @@
|
||||
</div>
|
||||
|
||||
<table>
|
||||
|
||||
<tr class="loadtext">
|
||||
<td>Bestellung eingegangen</td>
|
||||
<td class="load2">Bestellung wird zubereitet</td>
|
||||
|
82
src/y4f/Shared/Chefin/Bestelluebersicht-Chefin.razor
Normal file
@ -0,0 +1,82 @@
|
||||
@page "/Bestelluebersicht"
|
||||
@layout ChefinLayout
|
||||
|
||||
<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 12:30</a></td>
|
||||
<td><a href="BDetail">#2345 18:45</a></td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="BDetail">#3456 13:00</a></td>
|
||||
<td><a href="BDetail">#4567 19:00</a></td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="BDetail">#5678 14:30</a></td>
|
||||
<td><a href="BDetail">#6789 19:15</a></td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="BDetail">#4321 15:15</a></td>
|
||||
<td><a href="BDetail">#5432 19:15</a></td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="BDetail">#6543 15:30</a></td>
|
||||
<td><a href="BDetail">#7654 19:15</a></td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="BDetail">#7654 15:30</a></td>
|
||||
<td> </td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="BDetail">#8765 16:00</a></td>
|
||||
<td> </td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="BDetail">#9876 17:30</a></td>
|
||||
<td> </td>
|
||||
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
</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 {
|
||||
|
||||
}
|
37
src/y4f/Shared/Chefin/Bestelluebersicht-Chefin.razor.css
Normal file
@ -0,0 +1,37 @@
|
||||
tbody {
|
||||
border-color: black;
|
||||
}
|
||||
td {
|
||||
text-align:center;
|
||||
text-decoration: none;
|
||||
}
|
||||
table {
|
||||
border-radius: 50px !important;
|
||||
margin-left: 50px;
|
||||
}
|
||||
td > a {
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
}
|
||||
#button {
|
||||
margin-bottom: 35px;
|
||||
border-radius: 50px;
|
||||
margin-left: 100px;
|
||||
}
|
||||
#text {
|
||||
margin-top: 50px;
|
||||
margin-bottom: 45px;
|
||||
margin-left: 100px;
|
||||
width: 69%;
|
||||
padding-top: 2px;
|
||||
padding-bottom: 2px;
|
||||
padding: 8px;
|
||||
color: black;
|
||||
background-color: #89F9A5;
|
||||
border-style:none;
|
||||
text-align: center;
|
||||
}
|
||||
thead {
|
||||
background-color: #89F9A5;
|
||||
border-color: #89F9A5;
|
||||
}
|
139
src/y4f/Shared/Chefin/BestelluebersichtD-Chefin.razor
Normal file
@ -0,0 +1,139 @@
|
||||
@page "/BestelluebersichtD-Chefin"
|
||||
@layout ChefinLayout
|
||||
|
||||
<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>
|
||||
<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="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>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@*Buttons*@
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@*<div class="h-100">
|
||||
@*Essen Abholen?
|
||||
<div class="row h-25 w-100">
|
||||
<div class="col">
|
||||
</div>
|
||||
</div>
|
||||
</div>*@
|
||||
@code {
|
||||
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
button {
|
||||
margin: 10px;
|
||||
}
|
25
src/y4f/Shared/Chefin/NavChefin.razor
Normal file
@ -0,0 +1,25 @@
|
||||
<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>
|
||||
|
||||
<ul class="navbar-nav">
|
||||
|
||||
<li class="nav-item">
|
||||
<NavLink class="nav-link" href="RegistrierungA">
|
||||
#1
|
||||
<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>
|
||||
</nav>
|
||||
|
||||
@code {
|
||||
|
||||
}
|
14
src/y4f/Shared/ChefinLayout.razor
Normal file
@ -0,0 +1,14 @@
|
||||
@inherits LayoutComponentBase
|
||||
|
||||
|
||||
<div >
|
||||
<y4f.Shared.Chefin.NavChefin />
|
||||
|
||||
<main class="container">
|
||||
|
||||
|
||||
@Body
|
||||
|
||||
</main>
|
||||
|
||||
</div>
|
5
src/y4f/Shared/ChefinLayout.razor.css
Normal file
@ -0,0 +1,5 @@
|
||||
html, body {
|
||||
/*background-color: #C7FFD5;*/
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
}
|
@ -5,7 +5,7 @@
|
||||
|
||||
|
||||
<div class="container mt-auto">
|
||||
<h4>AccountID: #1234</h4>
|
||||
<h4>AccountID: @RegistrierungA.userName</h4>
|
||||
<h4>Ihr QR-Code: </h4>
|
||||
<img src="assets/K-QR.png" class="img" title="logo image">
|
||||
|
||||
|
35
src/y4f/Shared/NavStartseite.razor
Normal file
@ -0,0 +1,35 @@
|
||||
<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>*@
|
||||
|
||||
<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">
|
||||
<NavLink class="nav-link" href="RegistrierungA">
|
||||
Admin
|
||||
<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 void ToggleNavMenu()
|
||||
{
|
||||
collapseNavMenu = !collapseNavMenu;
|
||||
}
|
||||
}
|
@ -1,18 +1,36 @@
|
||||
@page "/RegistrierungA"
|
||||
@page "/RegistrierungA"
|
||||
@layout Registrierung
|
||||
@inject NavigationManager NavManager
|
||||
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
|
||||
|
||||
<div class="container col-lg-5 col-md-9 col-sm-12 d-flex flex-column " id="content">
|
||||
<p>Benutzername:</p>
|
||||
<input type="text" class="form-control" id="name" name="name">
|
||||
|
||||
<input type="text" class="form-control" id="name" name="name" @bind="@inputName">
|
||||
|
||||
<p>Passwort:</p>
|
||||
<input type="text" class="form-control" id="password" name="password">
|
||||
<input type="password" class="form-control" id="password" name="password" @bind="@inputPassword">
|
||||
|
||||
<form id="button" action="Bestelluebersicht">
|
||||
<input type="submit" value="Login" class="btn">
|
||||
</form>
|
||||
<button type="button" class="btn" @onclick="@Login">Login</button>
|
||||
|
||||
</div>
|
||||
@code {
|
||||
|
||||
@code {
|
||||
public string inputName { get; set; } = string.Empty;
|
||||
public string inputPassword { get; set; } = string.Empty;
|
||||
|
||||
public static string userName { get; set; } = string.Empty;
|
||||
|
||||
public void Login() {
|
||||
if (inputName == userDataName && inputPassword == userDataPassword) {
|
||||
localStorage.SetItem("name", inputName);
|
||||
userName = localStorage.GetItem<string>("name");
|
||||
NavManager.NavigateTo("/Bestelluebersicht");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@code {
|
||||
public string userDataName { get; set; } = "";
|
||||
public string userDataPassword { get; set; } = "";
|
||||
}
|
@ -2,12 +2,21 @@
|
||||
color: grey;
|
||||
margin-bottom:0px;
|
||||
margin-top: 15px;
|
||||
margin-left: 61px;
|
||||
}
|
||||
|
||||
form {
|
||||
margin-top: 20px;
|
||||
border-radius: 50px;
|
||||
}
|
||||
|
||||
input {
|
||||
border-radius: 50px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
button {
|
||||
text-align: center;
|
||||
background-color: #89F9A5;
|
||||
border-radius: 50px;
|
||||
}
|
||||
|
@ -3,6 +3,8 @@
|
||||
|
||||
<div>
|
||||
|
||||
<NavStartseite />
|
||||
|
||||
<main class="container">
|
||||
|
||||
|
||||
|
@ -1,29 +1,105 @@
|
||||
@page "/Yummy-Punkte"
|
||||
@inject HttpClient Http
|
||||
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
|
||||
|
||||
<body>
|
||||
<div class="container col-lg-5 col-md-9 col-sm-12 d-flex flex-column " id="content">
|
||||
<h4><b>Ihre Yummy-Punkte</b></h4>
|
||||
|
||||
<div class="img" >
|
||||
@for(int i = 0; i < 10; i++)
|
||||
<div class="img">
|
||||
@for (int i = 0; i < 10; i++)
|
||||
{
|
||||
@*if kunde hat treuepunkte*@
|
||||
@if (kunde.Treuepunkte > i)
|
||||
{
|
||||
<img src="assets/Point-Circle.png ">
|
||||
}
|
||||
else
|
||||
{
|
||||
<img src="assets/White-Circle.png ">
|
||||
}
|
||||
}
|
||||
<br>
|
||||
</div>
|
||||
|
||||
<p class="text">Bei einem Mindestbestellwert von 8€ erhalten Sie ein Yummy-Punkt. Ab der 10ten Bestellung gibt es einen Rabatt zu Ihrer nächsten Bestellung.</p>
|
||||
<p class="text">Aktueller Rabatt: @rabatt.Prozent %</p>
|
||||
|
||||
<div class="button">
|
||||
<form id="button1" action="/">
|
||||
<input type="submit" value="Zurück" class="btn">
|
||||
</form>
|
||||
@*reset button to set the treuepunkte to null*@
|
||||
<button class="btn btn-danger" @onclick="@(()=>resetTreuepunkte())">Yummy-Punkte einlösen</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
@code {
|
||||
|
||||
// allergien, bestellungsposition, kunde, menuitem, menuitemkategorie, menuitemueberkategorie, rabatt
|
||||
|
||||
private List<Kunde> kunden = new List<Kunde>();
|
||||
private Kunde kunde = new Kunde();
|
||||
|
||||
private List<Rabatt> rabatte = new List<Rabatt>();
|
||||
private Rabatt rabatt = new Rabatt();
|
||||
|
||||
|
||||
public void resetTreuepunkte()
|
||||
{
|
||||
if (kunde.Treuepunkte == 10)
|
||||
{
|
||||
kunde.Treuepunkte = 0;
|
||||
// API change treupunkte to 0 if kunde has 10 treuepunkte
|
||||
Http.PutAsJsonAsync("https://localhost:7076/api/kunden/" + kunde.Idkunde, kunde);
|
||||
}
|
||||
}
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
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 the most recent rabatt, that are still valid (GueltigkeitBis)
|
||||
// if there is no rabatt, set the rabatt to null
|
||||
if (rabatte.Count == 0)
|
||||
{
|
||||
rabatt = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < rabatte.Count; i++)
|
||||
{
|
||||
if (rabatte[i].GueltigkeitBis > DateTime.Now)
|
||||
{
|
||||
rabatt = rabatte[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
//rabatt = rabatte[rabatte.Count - 1];
|
||||
|
||||
|
||||
}
|
||||
|
||||
public class Kunde
|
||||
{
|
||||
public int Idkunde { get; set; }
|
||||
public string Code { get; set; }
|
||||
public int Treuepunkte { 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; }
|
||||
|
||||
}
|
||||
}
|
||||
|
BIN
src/y4f/wwwroot/assets/Point-Circle.png
Normal file
After Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 9.0 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 75 KiB |
@ -12,6 +12,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Blazored.LocalStorage" Version="4.3.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="7.0.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="7.0.1" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|