You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

175 lines
5.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Otter;
using _1869_Remake;
using _1869_Remake.Entities;
namespace _1869_Remake.Entities
{
public class Filiale : Entity
{
public Hafen HEIMATHAFEN;
public int BUDGET { get; private set; }
int KOSTEN;
public Spieler BESITZER;
public List<Ware> LAGER = new List<Ware>();
//Standardkonstruktor
public Filiale()
{
}
//Parameterkonstruktor
public Filiale(Hafen Heimat, Spieler Gründer, int laufendeKosten)
{
this.HEIMATHAFEN = Heimat;
this.BESITZER = Gründer;
this.KOSTEN = laufendeKosten;
// Immer Startkapital von 0 ausgehen
this.BUDGET = 0;
}
//Kopierkonstruktor
public Filiale(Filiale KopierFiliale)
{
this.HEIMATHAFEN = KopierFiliale.HEIMATHAFEN;
this.BESITZER = KopierFiliale.BESITZER;
this.BUDGET = KopierFiliale.BUDGET;
this.KOSTEN = KopierFiliale.KOSTEN;
this.LAGER = KopierFiliale.LAGER;
}
//allgemeine Geld methoden
public void erhöheBudget(int geldbetrag)
{
BUDGET += geldbetrag;
}
public void verringereBudget(int geldbetrag)
{
BUDGET -= geldbetrag;
}
//Warenverwaltungsmethoden
public void einlagernWare(Ware ware)
{
// Einlagerung von Waren benötigt immer die effektiv erzeugte Ware
Ware TempWare = new Ware(ware);
//Wenn Warentyp bereits vorhanden wird die Menge dieser ware hinzugefügt
if (ware.istVerderblich())
{
// Sonderlogik bei verderblicher Ware
// To Do: Implementieren / durchdenken!!
}
else
{
bool WareGefunden = false;
foreach (Ware item in LAGER)
{
if (ware.BEZEICHNUNG == item.BEZEICHNUNG)
{
//Ware mit diesem Namen gefunden -> Menge erhöhen
WareGefunden = true;
item.MENGE += ware.MENGE;
//Wenn Ware gefunden wurde müssen wir nicht mehr weiter durchsuchen
break;
}
}
if (!WareGefunden)
{
// Wenn es diese Ware noch nicht im Lager gab wird sie neu Eingelagert
LAGER.Add(TempWare);
}
}
}
public void AuslagernnWare(string WarenName, int Menge)
{
bool verderblich = false;
// Vorabcheck ob Ware existiert und ob diese verderblich ist
foreach (Ware item in LAGER)
{
if (item.BEZEICHNUNG == WarenName)
{
verderblich = item.istVerderblich();
//Wenn Ware gefunden wurde müssen wir nicht mehr weiter durchsuchen
break;
}
}
if (verderblich)
{
// Sonderlogik bei verderblicher Ware
// To Do: Implementieren / durchdenken!!
}
else
{
foreach (Ware item in LAGER)
{
if (item.BEZEICHNUNG == WarenName)
{
// Angefragte Menge Reduzieren
// Wenn nicht mehr genug ware vorhanden ist wird null ausgegeben
if (item.MENGE - Menge < 0)
{
// Wenn auszulagernder Menge unter 0 ist ist ein fehler Passiert ergo nichts tun!
}
else
{
item.MENGE -= Menge;
// Wenn wir mit der Auslagerung das Lager geleert haben wird es aus dem Bestand genommen
if (item.MENGE == 0)
LAGER.Remove(item);
}
//Wenn Ware gefunden wurde müssen wir nicht mehr weiter durchsuchen
break;
}
}
}
}
public void LaufendeKostenAbziehen()
{
bool filialSchließung = false;
// diese Funktion wird abgerufen wenn die Kosten für den filialbetrieb fällig werden -> Hier kann eine Filial Schließung veranlasst werden
if (BUDGET >= KOSTEN)
{
// Laufendekosten können regulär abgezogen werden
BUDGET -= KOSTEN;
}
else
{
// Laufende Kosten übersteigen
BUDGET -= KOSTEN;
// Wegen übersteigender Kosten sind alle Waren verloren und filiale wird geschlossen
schließeFiliale();
this.RemoveSelf();
}
}
public void schließeFiliale()
{
BESITZER.schließtFiliale(this);
}
}
}