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
|
# 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=true
|
||||||
- traefik.http.routers.y4f-webapi.tls.certResolver=default
|
- traefik.http.routers.y4f-webapi.tls.certResolver=default
|
||||||
networks:
|
networks:
|
||||||
- default
|
- y4f-default
|
||||||
- traefik
|
- traefik
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
default:
|
y4f-default:
|
||||||
name: y4f-default
|
|
||||||
external: true
|
external: true
|
||||||
traefik:
|
traefik:
|
||||||
external: true
|
external: true
|
@ -1,3 +1,4 @@
|
|||||||
|
using Blazored.LocalStorage;
|
||||||
using Microsoft.AspNetCore.Components.Web;
|
using Microsoft.AspNetCore.Components.Web;
|
||||||
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
|
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
|
||||||
using y4f;
|
using y4f;
|
||||||
@ -6,7 +7,7 @@ var builder = WebAssemblyHostBuilder.CreateDefault(args);
|
|||||||
builder.RootComponents.Add<App>("#app");
|
builder.RootComponents.Add<App>("#app");
|
||||||
builder.RootComponents.Add<HeadOutlet>("head::after");
|
builder.RootComponents.Add<HeadOutlet>("head::after");
|
||||||
|
|
||||||
|
builder.Services.AddBlazoredLocalStorage();
|
||||||
|
|
||||||
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
|
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
|
||||||
<tr class="loadtext">
|
<tr class="loadtext">
|
||||||
<td>Bestellung eingegangen</td>
|
<td>Bestellung eingegangen</td>
|
||||||
<td class="load2">Bestellung wird zubereitet</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">
|
<div class="container mt-auto">
|
||||||
<h4>AccountID: #1234</h4>
|
<h4>AccountID: @RegistrierungA.userName</h4>
|
||||||
<h4>Ihr QR-Code: </h4>
|
<h4>Ihr QR-Code: </h4>
|
||||||
<img src="assets/K-QR.png" class="img" title="logo image">
|
<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
|
@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">
|
<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">
|
|
||||||
|
<input type="text" class="form-control" id="name" name="name" @bind="@inputName">
|
||||||
|
|
||||||
<p>Passwort:</p>
|
<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">
|
<button type="button" class="btn" @onclick="@Login">Login</button>
|
||||||
<input type="submit" value="Login" class="btn">
|
|
||||||
</form>
|
|
||||||
|
|
||||||
</div>
|
</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;
|
color: grey;
|
||||||
margin-bottom:0px;
|
margin-bottom:0px;
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
|
margin-left: 61px;
|
||||||
}
|
}
|
||||||
|
|
||||||
form {
|
form {
|
||||||
margin-top: 20px;
|
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>
|
<div>
|
||||||
|
|
||||||
|
<NavStartseite />
|
||||||
|
|
||||||
<main class="container">
|
<main class="container">
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,29 +1,105 @@
|
|||||||
@page "/Yummy-Punkte"
|
@page "/Yummy-Punkte"
|
||||||
|
@inject HttpClient Http
|
||||||
|
@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="container col-lg-5 col-md-9 col-sm-12 d-flex flex-column " id="content">
|
<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>
|
<h4><b>Ihre Yummy-Punkte</b></h4>
|
||||||
|
|
||||||
<div class="img" >
|
|
||||||
@for(int i = 0; i < 10; i++)
|
|
||||||
{
|
|
||||||
<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>
|
|
||||||
|
|
||||||
<div class="button">
|
|
||||||
<form id="button1" action="/">
|
|
||||||
<input type="submit" value="Zurück" class="btn">
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
<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>
|
</body>
|
||||||
|
|
||||||
@code {
|
@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>
|
||||||
|
|
||||||
<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" Version="7.0.1" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="7.0.1" PrivateAssets="all" />
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="7.0.1" PrivateAssets="all" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|