Buecherwurm/Administration.cs

327 lines
13 KiB
C#

using System;
using System.Collections.Generic;
namespace Bücherwurm
{
class Administration
{
private Catalogue Catalogue {get; set;}
private Inventory Inventory {get; set;}
private Lend_Administration Lendings {get; set;}
public Administration()
{
Catalogue = new Catalogue();
Inventory = new Inventory();
Lendings = new Lend_Administration();
}
public void ListCatalogue()
{
var BookList = Catalogue.GetProducts();
Console.WriteLine("Produkte insgesamt: {0}", BookList.Count);
foreach (var book in BookList)
{
Console.WriteLine("---");
Console.WriteLine("ID: {0}", book.ProductId);
Console.WriteLine("Titel: {0}", book.Name);
Console.WriteLine("Kategorie: {0}", book.Category);
}
Console.WriteLine("---");
}
public void AddToCatalogue()
{
var Correct = false;
var Select = "";
do
{
Console.WriteLine("Möchten Sie ein (B)uch oder ein (M)agazin hinzufügen?");
var TypeSelect = Console.ReadLine().ToLower();
switch (TypeSelect)
{
case "b":
{
Console.WriteLine("Bitte geben sie den Author an:");
var Author = Console.ReadLine();
Console.WriteLine("Bitte geben Sie den Titel an:");
var Title = Console.ReadLine();
Console.WriteLine("Bitte geben Sie das Erscheinungsjahr an:");
var Year = Console.ReadLine();
Console.WriteLine("Bitte geben Sie das Erscheinungsland an:");
var Country = Console.ReadLine();
Console.WriteLine("Bitte geben Sie die Sprache an:");
var Language = Console.ReadLine();
Console.WriteLine("Bitte geben Sie den Bild-Link an:");
var ImgLink = Console.ReadLine();
Console.WriteLine("Bitte geben Sie den Link an:");
var Link = Console.ReadLine();
Console.WriteLine("Bitte geben Sie die Seitenanzahl an:");
var Pages = Console.ReadLine();
Console.WriteLine("---");
Console.WriteLine("Sind die Folgenden Angaben Korrekt?");
Console.WriteLine("Author: {0}", Author);
Console.WriteLine("Titel: {0}", Title);
Console.WriteLine("Erscheinungsjahr: {0}", Year);
Console.WriteLine("Land: {0}", Country);
Console.WriteLine("Sprache: {0}", Language);
Console.WriteLine("Bildlink: {0}", ImgLink);
Console.WriteLine("Link: {0}", Link);
Console.WriteLine("Seitenzahl: {0}", Pages);
Console.WriteLine("---");
Console.WriteLine("(j/n):");
Select = Console.ReadLine().ToLower();
switch (Select)
{
case "j":
{
Correct = true;
Catalogue.AddManualBook(Title, Author, Country, ImgLink, Link, Language, int.Parse(Pages), int.Parse(Year));
Console.WriteLine("Buch wurde hinzugefügt.");
break;
}
case "n":
{
Correct = false;
break;
}
default:
{
Console.WriteLine("Ungültige Eingabe: {0}", Select);
break;
}
}
break;
}
case "m":
{
Console.WriteLine("Bitte geben Sie den Titel an:");
var Title = Console.ReadLine();
Console.WriteLine("Bitte geben Sie die Auflage an:");
var Run = Console.ReadLine();
Console.WriteLine("Bitte geben Sie das Publikum an:");
var Audience = Console.ReadLine();
Console.WriteLine("Bitte geben Sie die Sachgruppe an:");
var Topic = Console.ReadLine();
Console.WriteLine("---");
Console.WriteLine("Sind die Folgenden Angaben Korrekt?");
Console.WriteLine("Titel: {0}", Title);
Console.WriteLine("Auflage: {0}", Run);
Console.WriteLine("Publikum: {0}", Audience);
Console.WriteLine("Sachgruppe: {0}", Topic);
Console.WriteLine("---");
Console.WriteLine("(j/n):");
Select = Console.ReadLine().ToLower();
switch (Select)
{
case "j":
{
Correct = true;
Catalogue.AddManualMagazine(Title, Run, Audience, Topic);
Console.WriteLine("Magazin wurde hinzugefügt.");
break;
}
case "n":
{
Correct = false;
break;
}
default:
{
Console.WriteLine("Ungültige Eingabe: {0}", Select);
break;
}
}
break;
}
default:
{
Console.WriteLine("Ungültige Eingabe: {0}", TypeSelect);
break;
}
}
} while (!Correct);
}
public void RemoveFromCatalogue()
{
Console.WriteLine("Bitte geben Sie die ID des Produktes an:");
var Id = int.Parse(Console.ReadLine());
Catalogue.Remove(Id);
Inventory.ProductRemove(Id);
}
public void ListInventory()
{
var InventoryList = Inventory.GetInventory();
Console.WriteLine("Exemplare insgesamt: {0}", InventoryList.Count);
foreach (var item in InventoryList)
{
Console.WriteLine("---");
Console.WriteLine("ID: {0}", item.ItemId);
Console.WriteLine("ProduktID: {0}", item.ProdId);
var product = Catalogue.LookupProduct(item.ProdId);
Console.WriteLine("Name: {0}", product.Name);
var Status = "";
switch (item.Status)
{
case StatusEnum.Available:
{
Status = "Verfügbar";
break;
}
case StatusEnum.Lended:
{
Status = "Entliehen";
break;
}
}
Console.WriteLine("Status: {0}", Status);
}
Console.WriteLine("---");
}
public void AddToInventory()
{
Console.WriteLine("Bitte geben sie die Produkt ID an:");
var BookId = int.Parse(Console.ReadLine());
var Book = Catalogue.LookupProduct(BookId);
if (Book != null)
{
Inventory.Add(Book);
Console.WriteLine("Buch hinzugefügt.");
}
else
{
Console.WriteLine("Ein Produkt mit der Id {0} existiert nicht!", BookId);
}
}
public void RemoveFromInventory()
{
Console.WriteLine("Bitte Geben Sie die ExemplarID an:");
var ItemId = int.Parse(Console.ReadLine());
Inventory.Remove(ItemId);
Console.WriteLine("Exemplar wurde entfernt");
}
public void ListAllLendings()
{
FormatLendings(Lendings.GetAllLendings());
}
public void ListActiveLendings()
{
FormatLendings(Lendings.GetActiveLendings());
}
private void FormatLendings(List<Lending> input)
{
Console.WriteLine("Ausleihen insgesamt: {0}", input.Count);
foreach (var lending in input)
{
Console.WriteLine("---");
Console.WriteLine("AusleiheID: {0}", lending.LendId);
Console.WriteLine("Ausgeliehenes Exemplar: {0}", lending.LendItem);
Console.WriteLine("Rückgabedatum: {0}", lending.ReturnDate);
Console.WriteLine("Ausleihender Kunde: {0}", lending.Customer);
}
}
public void MakeLending()
{
Console.WriteLine("Bitte Geben sie nacheinander die Exemplar IDs die ausgeliehen werden an, jeweils mit [Enter] bestätigen.");
Console.WriteLine("Eine leere Zeile beendet die Aufnahme der entliehenen Exemplare.");
var Input = "";
var LendList = new List<int>();
var VirtualList = new List<int>();
do
{
Console.WriteLine("Bitte Geben sie die Produkt ID an:");
Input = Console.ReadLine();
if (Input != "")
{
var ProductId = int.Parse(Input);
if (Catalogue.LookupProduct(ProductId).LendType == LendTypeEnum.Physical)
{
if (Inventory.IsProductAvailable(ProductId).Count > 0 && !Inventory.IsProductAvailable(ProductId).TrueForAll(ItemId => LendList.Contains(ItemId)))
{
LendList.Add(Inventory.IsProductAvailable(ProductId).Find(ItemId => !LendList.Contains(ItemId)));
Console.WriteLine("ok");
}
else
{
Console.WriteLine("Exemplar unbekannt oder bereits entliehen.");
}
} else
{
VirtualList.Add(ProductId);
Console.WriteLine("ok");
}
}
} while (Input != "");
Console.WriteLine("Bitte geben Sie den Kundennamen an:");
var Customer = Console.ReadLine();
foreach (int id in LendList)
{
int time = Catalogue.LookupProduct(Inventory.LookupItem(id).ProdId).LendTime;
Lendings.Lend(id, Customer, time);
Inventory.MarkAsLended(id);
}
foreach (var prod in VirtualList)
{
int time = Catalogue.LookupProduct(prod).LendTime;
var linkDummy = string.Format("https://dies.ist.ein.downloadlink.fuer.{0}", prod);
Console.WriteLine("Dies ist ein {0} Tage gültiger Download-Link: {1}", time, linkDummy);
}
Console.WriteLine("Ausleihe erfolgreich!");
}
public void ReturnLending()
{
Console.WriteLine("Bitte geben Sie die zurückzugebende AusleiheID an:");
var Returns = int.Parse(Console.ReadLine());
if (Lendings.GetActiveLendings().Find(lending => lending.LendId == Returns) != null)
{
Lendings.Return(Returns);
Inventory.MarkAsAvailable(Lendings.GetActiveLendings().Find(lend => lend.LendId == Returns).LendItem);
Console.WriteLine("Ausleihe erfolgreich zurückgegeben.");
}
else
{
Console.WriteLine("Ausleihe nicht bekannt oder bereits urückgegeben.");
}
}
public void MakeImport(string JsonTextBooks)
{
Catalogue.ImportBooks(JsonTextBooks);
foreach (var prod in Catalogue.GetProducts())
{
if (prod.LendType == LendTypeEnum.Physical)
{
Inventory.Add(prod);
Inventory.Add(prod);
}
}
}
public void MakeImport(
string JsonTextBooks,
string JsonTextMagazines)
{
Catalogue.ImportBooks(JsonTextBooks);
Catalogue.ImportMagazines(JsonTextMagazines);
foreach (var prod in Catalogue.GetProducts())
{
if (prod.LendType == LendTypeEnum.Physical)
{
Inventory.Add(prod);
Inventory.Add(prod);
}
}
}
}
}