diff --git a/src/WebApi/Data/WebApiContext.cs b/src/WebApi/Data/WebApiContext.cs index c4f672f..13663fe 100644 --- a/src/WebApi/Data/WebApiContext.cs +++ b/src/WebApi/Data/WebApiContext.cs @@ -29,6 +29,8 @@ public partial class WebApiContext : DbContext public virtual DbSet Admins { get; set; } + //public virtual DbSet BestellungspositionHasMenuitem { get; set; } + protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder @@ -214,7 +216,7 @@ public partial class WebApiContext : DbContext //modelBuilder.Entity(entity => //{ - // entity.HasKey(e => new { e.BestellungspositionId, e.MenuitemId }) + // entity.HasKey(e => new { e.Bestellungsposition_IDBestellung, e. }) // .HasName("PRIMARY"); // entity.ToTable("bestellungsposition_has_menuitem"); diff --git a/src/WebApi/Models/Bestellungsposition.cs b/src/WebApi/Models/Bestellungsposition.cs index 64c3048..7eeef97 100644 --- a/src/WebApi/Models/Bestellungsposition.cs +++ b/src/WebApi/Models/Bestellungsposition.cs @@ -1,23 +1,23 @@ using System; using System.Collections.Generic; -namespace WebApi.Models; +namespace WebApi.Models; public partial class Bestellungsposition { - public int Idbestellung { get; set; } + public int Idbestellung { get; set; } - public int? Menge { get; set; } + public int? Menge { get; set; } - public DateTime? Datum { get; set; } + public DateTime? Datum { get; set; } - public int KundeIdkunde { get; set; } + public int KundeIdkunde { get; set; } - public int RabattIdrabatt { get; set; } + public int RabattIdrabatt { get; set; } - public virtual Kunde KundeIdkundeNavigation { get; set; } = null!; + public virtual Kunde? KundeIdkundeNavigation { get; set; } = null!; - public virtual Rabatt RabattIdrabattNavigation { get; set; } = null!; + public virtual Rabatt? RabattIdrabattNavigation { get; set; } = null!; - public virtual ICollection MenuItemIdmenuItems { get; set; } = new List(); + public virtual ICollection? MenuItemIdmenuItems { get; set; } = new List(); } diff --git a/src/WebApi/Models/BestellungspositionHasMenuitem.cs b/src/WebApi/Models/BestellungspositionHasMenuitem.cs new file mode 100644 index 0000000..5edaa6c --- /dev/null +++ b/src/WebApi/Models/BestellungspositionHasMenuitem.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace WebApi.Models; + +public partial class BestellungspositionHasMenuitem +{ + public int? Bestellungsposition_IDBestellung { get; set; } + + public int? MenuItem_IDMenuItem { get; set; } +} diff --git a/src/y4f/Pages/ShoppingCart.razor b/src/y4f/Pages/ShoppingCart.razor index 3f8569e..9064693 100644 --- a/src/y4f/Pages/ShoppingCart.razor +++ b/src/y4f/Pages/ShoppingCart.razor @@ -91,8 +91,8 @@
- - + +   Uhr
@@ -111,7 +111,7 @@
@@ -121,9 +121,28 @@ - - @code { + public int hour; + public int minute; + private void UpdateTime() + { + localStorage.SetItem("Hour", hour); + localStorage.SetItem("Minute", minute); + } + + private void SetBestllung() + { + if (menuitemIds.Count == 0) + { + return; + } + UpdateTime(); + localStorage.SetItem>("MenuItemIds", menuitemIds); + _navigationManager.NavigateTo("/Bestellabschluss"); + } + + + public decimal summe; public Dictionary menuitemIds = new Dictionary(); @@ -199,6 +218,17 @@ } } } + localStorage.SetItem("Summe", summe); + + // if hour/minute is set, set the values + if (localStorage.GetItem("Hour") != 0) + { + hour = localStorage.GetItem("Hour"); + } + if (localStorage.GetItem("Minute") != 0) + { + minute = localStorage.GetItem("Minute"); + } } public class Allergie diff --git a/src/y4f/Shared/Bestellabschluss.razor b/src/y4f/Shared/Bestellabschluss.razor index a11af9e..724d689 100644 --- a/src/y4f/Shared/Bestellabschluss.razor +++ b/src/y4f/Shared/Bestellabschluss.razor @@ -1,36 +1,305 @@ @page "/Bestellabschluss" +@inject HttpClient Http +@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage +@inject NavigationManager _navigationManager -
-

Sie haben derzeit 1 Yummy-Punkt(e)

-

Bei einem Mindestbestellwert von 8€ erhalten Sie ein Yummy-Punkt. - Ab der 10ten Bestellung gibt es einen Rabatt zu Ihrer nächsten Bestellung.

- -
- @for(int i = 0; i < 10; i++) - { - - } -
-
- -

Achtung: Bitte beachten Sie, dass keine online Bezahlung zur Verfügung steht. - Diese dient nur zur Vorbestellung und muss selbst abgeholt werden.

- -
-
- -
+
+

Sie haben derzeit @kunde.Treuepunkte Yummy-Punkt(e)

+

+ Bei einem Mindestbestellwert von 8€ erhalten Sie ein Yummy-Punkt. + Ab der 10ten Bestellung gibt es einen Rabatt (@rabatt.Prozent%) zu Ihrer nächsten Bestellung. +

-
- -
-
+
+ @for (int i = 0; i < 10; i++) + { + @*if kunde hat treuepunkte*@ + @if (kunde.Treuepunkte > i) + { + + } + else + { + + } + } +
+
+

+ Achtung: Bitte beachten Sie, dass keine online Bezahlung zur Verfügung steht. + Diese dient nur zur Vorbestellung und muss selbst abgeholt werden. +

+

+ Ihr gesamt bestellter Betrag beträgt: @summe € +

+ @*if treuepunkte 10 dann angebot bieten*@ + @if (kunde.Treuepunkte == 10) + { +

Sie haben 10 Yummy-Punkte erreicht. Sie können diese jetzt einlösen und erhalten einen Rabatt von @rabatt.Prozent%.

+

Wollen Sie diese einlösen?

-
+ @if (rabattEinloesen == true) + { +

Betrag beträgt abzüglich des Rabattes: @Math.Round(summe - (summe * rabatt.Prozent / 100), 2) €

+ } + } +
+
+ Zurück +
+
+ +
+
+
-@code { - -} + +@code { + private List kunden = new List(); + private Kunde kunde = new Kunde(); + + private List rabatte = new List(); + private Rabatt rabatt = new Rabatt(); + private bool rabattEinloesen; + + public Dictionary menuitemIds = new Dictionary(); + + public List bestellungspositionen = new List(); + public int hour; + public int minute; + + public decimal summe; + + public void Vorbestellen() + { + // set rabattEinloesen + if (rabattEinloesen) + { + kunde.Treuepunkte = 0; + // delete treuepunkte API + Http.PutAsJsonAsync("https://localhost:7076/api/kunden/" + kunde.Idkunde, kunde); + summe = Math.Round(summe - (summe * rabatt.Prozent / 100), 2); + localStorage.SetItem("Summe", summe); + } + else + { + localStorage.SetItem("RabattEinloesen", false); + } + + // add bestellung to API + // add all bestellungspositionen to API + // get latest bestellungsposition id wenn nix da dann 0 + int bestellungspositionId = 0; + if (bestellungspositions != null) + { + // get the highest id from bestellungspositions + int highestId; + foreach (var item in bestellungspositions) + { + highestId = item.Idbestellung; + if (highestId > bestellungspositionId) + { + bestellungspositionId = highestId; + } + } + } + foreach (var item in menuitemIds) + { + bestellungspositionId++; + Bestellungsposition bestellungsposition = new Bestellungsposition(); + bestellungsposition.Idbestellung = bestellungspositionId; + bestellungsposition.Menge = item.Value; + // make a new date with hour and minute + DateTime abholzeit = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, hour, minute, 0); + bestellungsposition.Datum = abholzeit; + // latest possible rabatt + bestellungsposition.RabattIdrabatt = rabatt.Idrabatt; + bestellungsposition.KundeIdkunde = kunde.Idkunde; + + 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; + + //Http.PostAsJsonAsync("https://localhost:7076/api/bestellungspositionhasmenuitems", bestellungspositionHasMenuItem); + } + + // delete all localStorage + localStorage.SetItem("MenuItemIds", new Dictionary()); + localStorage.SetItem("Hour", 0); + localStorage.SetItem("Minute", 0); + localStorage.SetItem("Summe", 0); + localStorage.SetItem("RabattEinloesen", false); + + _navigationManager.NavigateTo("/Bestellbestätigung"); + } + + // allergien, bestellungsposition, kunde, menuitem, menuitemkategorie, menuitemueberkategorie, rabatt + private List allergien = new List(); + private List bestellungspositions = new List(); + private List menuitems = new List(); + private List menuitemkategories = new List(); + private List menuitemueberkategories = new List(); + private List bestellungspositionHasMenuitems = new List(); + + protected override async Task OnInitializedAsync() + { + // get data from api + allergien = await Http.GetFromJsonAsync>("https://localhost:7076/api/allergien"); + bestellungspositions = await Http.GetFromJsonAsync>("https://localhost:7076/api/bestellungspositionen"); + kunden = await Http.GetFromJsonAsync>("https://localhost:7076/api/kunden"); + menuitems = await Http.GetFromJsonAsync>("https://localhost:7076/api/Menuitems"); + menuitemkategories = await Http.GetFromJsonAsync>("https://localhost:7076/api/Menuitemkategories"); + menuitemueberkategories = await Http.GetFromJsonAsync>("https://localhost:7076/api/Menuitemueberkategories"); + rabatte = await Http.GetFromJsonAsync>("https://localhost:7076/api/Rabatte"); + //bestellungspositionHasMenuitems = await Http.GetFromJsonAsync>("https://localhost:7076/api/BestellungspositionHasMenuitems"); + + // test use the first kunde + 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]; + } + } + } + + // get data from localstorage + if (localStorage.GetItem>("MenuItemIds") != null) + { + menuitemIds = localStorage.GetItem>("MenuItemIds"); + } + + // calculate the sum of all menuitems + summe = 0; + foreach (var item in menuitemIds) + { + foreach (var item2 in menuitems) + { + if (item.Key == item2.IdmenuItem) + { + summe += item2.Preis * item.Value; + } + } + } + + // if hour/minute is set, set the values + if (localStorage.GetItem("Hour") != 0) + { + hour = localStorage.GetItem("Hour"); + } + if (localStorage.GetItem("Minute") != 0) + { + minute = localStorage.GetItem("Minute"); + } + } + + public class Allergie + { + public int Idallergie { get; set; } + + public string? Beschreibung { get; set; } + + public virtual ICollection MenuItemIdmenuItems { get; set; } = new List(); + } + 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 virtual ICollection Bestellungspositions { get; set; } = new List(); + } + + public class Menuitem + { + public int IdmenuItem { get; set; } + + public string? Bezeichnung { get; set; } + + public string? Zusatzinformation { get; set; } + + public decimal Preis { get; set; } + + public int MenuItemKategorieIdmenuItemKategorie { get; set; } + + public virtual Menuitemkategorie MenuItemKategorieIdmenuItemKategorieNavigation { get; set; } = null!; + + public virtual ICollection AllergieIdallergies { get; set; } = new List(); + + public virtual ICollection BestellungspositionIdbestellungs { get; set; } = new List(); + } + public class Menuitemkategorie + { + public int IdmenuItemKategorie { get; set; } + + public string? Bezeichnung { get; set; } + + public int MenuItemUeberkategorieIdmenuItemUeberkategorie { get; set; } + + public virtual Menuitemueberkategorie MenuItemUeberkategorieIdmenuItemUeberkategorieNavigation { get; set; } = null!; + + public virtual ICollection Menuitems { get; set; } = new List(); + } + + public class Menuitemueberkategorie + { + public int IdmenuItemUeberkategorie { get; set; } + + public string? Bezeichnung { get; set; } + + public virtual ICollection Menuitemkategories { get; set; } = new List(); + } + + public class Rabatt + { + public int Idrabatt { get; set; } + + public decimal Prozent { get; set; } + + public DateTime? GueltigkeitVon { get; set; } + + public DateTime? GueltigkeitBis { get; set; } + + public bool Einloesen { get; set; } + public virtual ICollection Bestellungspositions { get; set; } = new List(); + } + + + public class BestellungspositionHasMenuitem + { + public int? Bestellungsposition_IDBestellung { get; set; } + public int? MenuItem_IDMenuItem { get; set; } + } +} \ No newline at end of file diff --git a/src/y4f/Shared/Bestellbestätigung.razor b/src/y4f/Shared/Bestellbestätigung.razor index 760eedf..169dece 100644 --- a/src/y4f/Shared/Bestellbestätigung.razor +++ b/src/y4f/Shared/Bestellbestätigung.razor @@ -1,38 +1,236 @@ @page "/Bestellbestätigung" +@inject HttpClient Http +@inject Blazored.LocalStorage.ISyncLocalStorageService localStorage +@inject NavigationManager _navigationManager + -
-
Vielen Dank für Ihre Bestellung

-

- Ihr Essen ist in 30 Minuten abholbereit. - Sie erhalten eine Benachrichtigung sobald das Essen fertig ist. Wir würden uns freuen, wenn Sie uns ein Feedback geben. -



-

+
+
Vielen Dank für Ihre Bestellung

+

+ Ihr Essen ist heute um @hour:@minute abholbereit. + Sie erhalten eine Benachrichtigung sobald das Essen fertig ist. Wir würden uns freuen, wenn Sie uns ein Feedback geben. +



+

-
-
-
+
+
+
- +
- - - - - -
Bestellung eingegangenBestellung wird zubereitetEssen abholbereit
- -
-



-
- -
-
+ + Bestellung eingegangen + Bestellung wird zubereitet + Essen abholbereit + + -
+
+



+
+ + @**@ +
+
+ +
-@code { - + + + + + + + +@code { + private List kunden = new List(); + private Kunde kunde = new Kunde(); + + private List rabatte = new List(); + private Rabatt rabatt = new Rabatt(); + private bool rabattEinloesen; + + public Dictionary menuitemIds = new Dictionary(); + + public int hour; + public int minute; + + public decimal summe; + + public void Vorbestellen() + { + // set rabattEinloesen + if (rabattEinloesen) + localStorage.SetItem("RabattEinloesen", true); + else + localStorage.SetItem("RabattEinloesen", false); + + _navigationManager.NavigateTo("/Bestellbestätigung"); + + + } + + // allergien, bestellungsposition, kunde, menuitem, menuitemkategorie, menuitemueberkategorie, rabatt + private List allergien = new List(); + private List bestellungspositions = new List(); + private List menuitems = new List(); + private List menuitemkategories = new List(); + private List menuitemueberkategories = new List(); + + protected override async Task OnInitializedAsync() + { + // get data from api + allergien = await Http.GetFromJsonAsync>("https://localhost:7076/api/allergien"); + bestellungspositions = await Http.GetFromJsonAsync>("https://localhost:7076/api/bestellungspositionen"); + kunden = await Http.GetFromJsonAsync>("https://localhost:7076/api/kunden"); + menuitems = await Http.GetFromJsonAsync>("https://localhost:7076/api/Menuitems"); + menuitemkategories = await Http.GetFromJsonAsync>("https://localhost:7076/api/Menuitemkategories"); + menuitemueberkategories = await Http.GetFromJsonAsync>("https://localhost:7076/api/Menuitemueberkategories"); + rabatte = await Http.GetFromJsonAsync>("https://localhost:7076/api/Rabatte"); + + // test use the first kunde + 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]; + } + } + } + + // get data from localstorage + if (localStorage.GetItem>("MenuItemIds") != null) + { + menuitemIds = localStorage.GetItem>("MenuItemIds"); + } + + // calculate the sum of all menuitems + summe = 0; + foreach (var item in menuitemIds) + { + foreach (var item2 in menuitems) + { + if (item.Key == item2.IdmenuItem) + { + summe += item2.Preis * item.Value; + } + } + } + + // if hour/minute is set, set the values + if (localStorage.GetItem("Hour") != 0) + { + hour = localStorage.GetItem("Hour"); + } + if (localStorage.GetItem("Minute") != 0) + { + minute = localStorage.GetItem("Minute"); + } + + // + } + + public class Allergie + { + public int Idallergie { get; set; } + + public string? Beschreibung { get; set; } + + public virtual ICollection MenuItemIdmenuItems { get; set; } = new List(); + } + 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 virtual Kunde KundeIdkundeNavigation { get; set; } = null!; + + public virtual Rabatt RabattIdrabattNavigation { get; set; } = null!; + + public virtual ICollection MenuItemIdmenuItems { get; set; } = new List(); + } + public class Kunde + { + public int Idkunde { get; set; } + + public string? Code { get; set; } + + public int? Treuepunkte { get; set; } + + public virtual ICollection Bestellungspositions { get; set; } = new List(); + } + + public class Menuitem + { + public int IdmenuItem { get; set; } + + public string? Bezeichnung { get; set; } + + public string? Zusatzinformation { get; set; } + + public decimal Preis { get; set; } + + public int MenuItemKategorieIdmenuItemKategorie { get; set; } + + public virtual Menuitemkategorie MenuItemKategorieIdmenuItemKategorieNavigation { get; set; } = null!; + + public virtual ICollection AllergieIdallergies { get; set; } = new List(); + + public virtual ICollection BestellungspositionIdbestellungs { get; set; } = new List(); + } + public class Menuitemkategorie + { + public int IdmenuItemKategorie { get; set; } + + public string? Bezeichnung { get; set; } + + public int MenuItemUeberkategorieIdmenuItemUeberkategorie { get; set; } + + public virtual Menuitemueberkategorie MenuItemUeberkategorieIdmenuItemUeberkategorieNavigation { get; set; } = null!; + + public virtual ICollection Menuitems { get; set; } = new List(); + } + + public class Menuitemueberkategorie + { + public int IdmenuItemUeberkategorie { get; set; } + + public string? Bezeichnung { get; set; } + + public virtual ICollection Menuitemkategories { get; set; } = new List(); + } + + public class Rabatt + { + public int Idrabatt { get; set; } + + public decimal? Prozent { get; set; } + + public DateTime? GueltigkeitVon { get; set; } + + public DateTime? GueltigkeitBis { get; set; } + + public bool Einloesen { get; set; } + public virtual ICollection Bestellungspositions { get; set; } = new List(); + } } diff --git a/src/y4f/Shared/Kontoverwaltung.razor b/src/y4f/Shared/Kontoverwaltung.razor index c74a919..779eda1 100644 --- a/src/y4f/Shared/Kontoverwaltung.razor +++ b/src/y4f/Shared/Kontoverwaltung.razor @@ -14,6 +14,10 @@ +
+

Bestellübersicht

+ +


@code {