12 Commits

14 changed files with 59 additions and 115 deletions

1
.gitignore vendored
View File

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

View File

@ -6,7 +6,7 @@ Yummy4Friends ist eine benutzerfreundliche und visuell ansprechende Webapp zur O
## Description (English) ## Description (English)
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. 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 ## Tech Stack

View File

@ -221,8 +221,8 @@ public partial class WebApiContext : DbContext
entity.ToTable("bestellungsposition_has_menuitem"); entity.ToTable("bestellungsposition_has_menuitem");
entity.Property(e => e.Bestellungsposition_IDBestellung).HasColumnType("int(11)").HasColumnName("Bestellungsposition_IDBestellung"); entity.Property(e => e.Bestellungsposition_IDBestellung).HasColumnType("int(11)").HasColumnName("bestellungsposition_IDBestellung");
entity.Property(e => e.MenuItem_IDMenuItem).HasColumnType("int(11)").HasColumnName("MenuItem_IDMenuItem"); entity.Property(e => e.MenuItem_IDMenuItem).HasColumnType("int(11)").HasColumnName("menuItem_IDMenuItem");
}); });
modelBuilder.Entity<MenuitemHasAllergie>(entity => modelBuilder.Entity<MenuitemHasAllergie>(entity =>

View File

@ -6,7 +6,6 @@
@inject NavigationManager _navigationManager @inject NavigationManager _navigationManager
@inject IJSRuntime JSRuntime; @inject IJSRuntime JSRuntime;
<PageTitle>Yummy4Friends</PageTitle> <PageTitle>Yummy4Friends</PageTitle>
<body style='--blazor-load-percentage: 100%; --blazor-load-percentage-text: "100%"; background-color:#C7FFD5;'> <body style='--blazor-load-percentage: 100%; --blazor-load-percentage-text: "100%"; background-color:#C7FFD5;'>
@ -34,7 +33,6 @@
{ {
localStorage.SetItem("kunde", kunde); localStorage.SetItem("kunde", kunde);
_navigationManager.NavigateTo("/speisekarte"); _navigationManager.NavigateTo("/speisekarte");
return; return;
} }
} }
@ -44,7 +42,6 @@
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden"); kunden = await Http.GetFromJsonAsync<List<Kunde>>("https://localhost:7076/api/kunden");
// if already logged in navigate to speisekarte // if already logged in navigate to speisekarte
if (localStorage.ContainKey("kunde")) if (localStorage.ContainKey("kunde"))
{ {
@ -52,7 +49,6 @@
} }
} }
public class Kunde public class Kunde
@ -64,3 +60,6 @@
} }

View File

@ -135,4 +135,3 @@
public int Treuepunkte { get; set; } public int Treuepunkte { get; set; }
} }
} }

View File

@ -137,6 +137,7 @@
allergien = await Http.GetFromJsonAsync<List<Allergie>>("https://localhost:7076/api/allergien"); allergien = await Http.GetFromJsonAsync<List<Allergie>>("https://localhost:7076/api/allergien");
bestellungspositions = await Http.GetFromJsonAsync<List<Bestellungsposition>>("https://localhost:7076/api/bestellungspositionen"); 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"); menuitems = await Http.GetFromJsonAsync<List<Menuitem>>("https://localhost:7076/api/Menuitems");
menuitemkategories = await Http.GetFromJsonAsync<List<Menuitemkategorie>>("https://localhost:7076/api/Menuitemkategories"); menuitemkategories = await Http.GetFromJsonAsync<List<Menuitemkategorie>>("https://localhost:7076/api/Menuitemkategories");
menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/Menuitemueberkategories"); menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/Menuitemueberkategories");

View File

@ -143,6 +143,7 @@
allergien = await Http.GetFromJsonAsync<List<Allergie>>("https://localhost:7076/api/allergien"); allergien = await Http.GetFromJsonAsync<List<Allergie>>("https://localhost:7076/api/allergien");
bestellungspositions = await Http.GetFromJsonAsync<List<Bestellungsposition>>("https://localhost:7076/api/bestellungspositionen"); 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"); menuitems = await Http.GetFromJsonAsync<List<Menuitem>>("https://localhost:7076/api/Menuitems");
menuitemkategories = await Http.GetFromJsonAsync<List<Menuitemkategorie>>("https://localhost:7076/api/Menuitemkategories"); menuitemkategories = await Http.GetFromJsonAsync<List<Menuitemkategorie>>("https://localhost:7076/api/Menuitemkategories");
menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/Menuitemueberkategories"); menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/Menuitemueberkategories");

View File

@ -93,6 +93,11 @@
</div> </div>
</div> </div>
@code { @code {
private List<Kunde> kunden = new List<Kunde>(); private List<Kunde> kunden = new List<Kunde>();
private Kunde kunde = new Kunde(); private Kunde kunde = new Kunde();
@ -137,9 +142,9 @@
{ {
menuitemIds = localStorage.GetItem<Dictionary<int, int>>("MenuItemIds"); menuitemIds = localStorage.GetItem<Dictionary<int, int>>("MenuItemIds");
} }
allergien = await Http.GetFromJsonAsync<List<Allergie>>("https://localhost:7076/api/allergien"); allergien = await Http.GetFromJsonAsync<List<Allergie>>("https://localhost:7076/api/allergien");
bestellungspositions = await Http.GetFromJsonAsync<List<Bestellungsposition>>("https://localhost:7076/api/bestellungspositionen"); 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"); menuitems = await Http.GetFromJsonAsync<List<Menuitem>>("https://localhost:7076/api/Menuitems");
menuitemkategories = await Http.GetFromJsonAsync<List<Menuitemkategorie>>("https://localhost:7076/api/Menuitemkategories"); menuitemkategories = await Http.GetFromJsonAsync<List<Menuitemkategorie>>("https://localhost:7076/api/Menuitemkategories");
menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/Menuitemueberkategories"); menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/Menuitemueberkategories");

View File

@ -132,13 +132,14 @@
if (kunde != null && !kunden.Any(k => k.Code == kunde.Code)) if (kunde != null && !kunden.Any(k => k.Code == kunde.Code))
_navigationManager.NavigateTo("/"); _navigationManager.NavigateTo("/");
// kunde login end // kunde login end
if (localStorage.GetItem<Dictionary<int, int>>("MenuItemIds") != null) if (localStorage.GetItem<Dictionary<int, int>>("MenuItemIds") != null)
{ {
menuitemIds = localStorage.GetItem<Dictionary<int, int>>("MenuItemIds"); menuitemIds = localStorage.GetItem<Dictionary<int, int>>("MenuItemIds");
} }
allergien = await Http.GetFromJsonAsync<List<Allergie>>("https://localhost:7076/api/allergien"); allergien = await Http.GetFromJsonAsync<List<Allergie>>("https://localhost:7076/api/allergien");
bestellungspositions = await Http.GetFromJsonAsync<List<Bestellungsposition>>("https://localhost:7076/api/bestellungspositionen"); 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"); menuitems = await Http.GetFromJsonAsync<List<Menuitem>>("https://localhost:7076/api/Menuitems");
menuitemkategories = await Http.GetFromJsonAsync<List<Menuitemkategorie>>("https://localhost:7076/api/Menuitemkategories"); menuitemkategories = await Http.GetFromJsonAsync<List<Menuitemkategorie>>("https://localhost:7076/api/Menuitemkategories");
menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/Menuitemueberkategories"); menuitemueberkategories = await Http.GetFromJsonAsync<List<Menuitemueberkategorie>>("https://localhost:7076/api/Menuitemueberkategories");

View File

@ -89,15 +89,14 @@
{ {
localStorage.SetItem("RabattEinloesen", false); localStorage.SetItem("RabattEinloesen", false);
localStorage.SetItem("Summe", summe); localStorage.SetItem("Summe", summe);
// if summe > 8€ add treuepunkte
if (summe >= 8) if (summe >= 8)
{
if (kunde.Treuepunkte < 10)
{ {
kunde.Treuepunkte++; kunde.Treuepunkte++;
// add treuepunkte to API
Http.PutAsJsonAsync("https://localhost:7076/api/kunden/" + kunde.Idkunde, kunde); Http.PutAsJsonAsync("https://localhost:7076/api/kunden/" + kunde.Idkunde, kunde);
} }
} }
}
// add bestellung to API // add bestellung to API
// add all bestellungspositionen to API // add all bestellungspositionen to API
@ -139,20 +138,12 @@
Http.PostAsJsonAsync("https://localhost:7076/api/bestellungspositionen", bestellungsposition); Http.PostAsJsonAsync("https://localhost:7076/api/bestellungspositionen", bestellungsposition);
////Add menuitems to bestellungspositionHasMenuItem //Add menuitems to bestellungspositionHasMenuItem
//BestellungspositionHasMenuitem bestellungspositionHasMenuItem = new BestellungspositionHasMenuitem(); BestellungspositionHasMenuitem bestellungspositionHasMenuItem = new BestellungspositionHasMenuitem();
//bestellungspositionHasMenuItem.Bestellungsposition_IDBestellung = bestellungsposition.Idbestellung; bestellungspositionHasMenuItem.Bestellungsposition_IDBestellung = bestellungsposition.Idbestellung;
//bestellungspositionHasMenuItem.MenuItem_IDMenuItem = item.Key; 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);
} }

View File

@ -42,20 +42,9 @@
month = bestellungsposition.Datum.Month; month = bestellungsposition.Datum.Month;
year = bestellungsposition.Datum.Year; year = bestellungsposition.Datum.Year;
@*print only if date is higher than now datum, all expired hh:mm unvisible *@ @*print kunde.code, hour and minute from last bestellungsposition*@
@*if (bestellungsposition.Datum > DateTime.Now) @*print only if date is higher than now datum *@
{ 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> <tr>
<td> <td>
@ -66,6 +55,7 @@
</td> </td>
</tr> </tr>
} }
@*}*@
firstTime = false; firstTime = false;
} }
} }
@ -75,7 +65,7 @@
</table> </table>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
@* <p id="text" readonly>Abholzeit</p> <p id="text" readonly>Abholzeit</p>
<br /> <br />
<form id="button" action="Bestelluebersicht"> <form id="button" action="Bestelluebersicht">
<input type="submit" value="30 Min" class="btn"> <input type="submit" value="30 Min" class="btn">
@ -85,7 +75,7 @@
</form> </form>
<form id="button" action="Bestelluebersicht"> <form id="button" action="Bestelluebersicht">
<input type="submit" value="1 Std" class="btn"> <input type="submit" value="1 Std" class="btn">
</form>*@ </form>
</div> </div>
</div> </div>
@ -128,22 +118,6 @@
month = DateTime.Now.Month; month = DateTime.Now.Month;
year = DateTime.Now.Year; 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 class Bestellungsposition

View File

@ -99,7 +99,7 @@
<div class="d-flex flex-column" style="align-items: center; margin-left: 100px;"> <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_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 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>*@ @*<button class="btn_forward w-75">Bestellung abschließen</button>*@
</div> </div>
@ -150,25 +150,6 @@
localStorage.Clear(); localStorage.Clear();
_navigationManager.NavigateTo("/"); _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() protected override async Task OnInitializedAsync()
{ {
// get data from api // get data from api

View File

@ -0,0 +1,16 @@
<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

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