diff --git a/Faktura_Gruppe5/firmenstammdaten.xml b/Faktura_Gruppe5/firmenstammdaten.xml new file mode 100644 index 0000000..7aabcd0 --- /dev/null +++ b/Faktura_Gruppe5/firmenstammdaten.xml @@ -0,0 +1,20 @@ + + + Denis + Denis + Musterweg 1 + 83636 + Mannheim + Deutschland + 026373344 + 02237353353 + 03736376363533 + denis@gmail.com + www.abc.de + 203636820632 + Mannheim + Deutsche Bank + DE 3836823728 + 2730353 + 1 + diff --git a/Faktura_Gruppe5/kunde/1.xml b/Faktura_Gruppe5/kunde/1.xml new file mode 100644 index 0000000..203fc94 --- /dev/null +++ b/Faktura_Gruppe5/kunde/1.xml @@ -0,0 +1,10 @@ + + + 1 + Denis + aadada + dadada + daadad + true + sdsds + diff --git a/Faktura_Gruppe5/kunde/2.xml b/Faktura_Gruppe5/kunde/2.xml new file mode 100644 index 0000000..f7a8361 --- /dev/null +++ b/Faktura_Gruppe5/kunde/2.xml @@ -0,0 +1,10 @@ + + + 2 + f + frrf + rfrfr + frfrf + false + ededed + diff --git a/Faktura_Gruppe5/src/controller/AngebotController.java b/Faktura_Gruppe5/src/controller/AngebotController.java new file mode 100644 index 0000000..9ec42f3 --- /dev/null +++ b/Faktura_Gruppe5/src/controller/AngebotController.java @@ -0,0 +1,281 @@ +package controller; + +import model.Angebot; +import model.Artikel; +import model.Kunde; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +import java.io.File; +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Scanner; +import java.lang.reflect.Field; + +public class AngebotController { + private final static String ordnerPfad = "angebote"; + private static KundenController kundenController; + private static ArtikelController artikelController; + + public AngebotController() { + File ordner = new File(ordnerPfad); + if (!ordner.exists()) { + ordner.mkdir(); + } + kundenController = new KundenController(); + artikelController = new ArtikelController(); + } + + // Methode zum Überprüfen, ob eine Angebotsnummer bereits existiert + private boolean angebotsnummerExistiert(int angebotsnummer) { + File xmlDatei = new File(ordnerPfad + "/" + angebotsnummer + ".xml"); + return xmlDatei.exists(); + } + + // Methode zur Generierung einer neuen, eindeutigen Angebotsnummer + private int generiereNeueAngebotsnummer() { + int neueAngebotsnummer = 1; + while (angebotsnummerExistiert(neueAngebotsnummer)) { + neueAngebotsnummer++; + } + return neueAngebotsnummer; + } + + public Angebot erstelleAngebot() { + Scanner scanner = new Scanner(System.in); + + // Kundennummer abfragen + System.out.print("Bitte geben Sie die Kundennummer ein: "); + int kundennummer = scanner.nextInt(); + Kunde kunde = kundenController.leseAusXML(kundennummer); + + if (kunde == null) { + System.out.println("Kunde nicht gefunden."); + return null; + } + + List artikelListe = new ArrayList<>(); + List mengeListe = new ArrayList<>(); + + while (true) { + // Artikelnummer und Menge abfragen + System.out.print("Bitte geben Sie die Artikelnummer ein (oder -1 zum Beenden): "); + int artikelnummer = scanner.nextInt(); + if (artikelnummer == -1) { + break; + } + + Artikel artikel = artikelController.leseAusXML(artikelnummer); + if (artikel == null) { + System.out.println("Artikel nicht gefunden."); + continue; + } + + System.out.print("Bitte geben Sie die Menge ein: "); + int menge = scanner.nextInt(); + + artikelListe.add(artikel); + mengeListe.add(menge); + } + + if (artikelListe.isEmpty()) { + System.out.println("Kein Artikel hinzugefügt. Angebot wird nicht erstellt."); + return null; + } + + Angebot angebot = new Angebot(); + angebot.setAngebotnummer(generiereNeueAngebotsnummer()); + angebot.setKunde(kunde); + angebot.setArtikelListe(artikelListe); + angebot.setMenge(mengeListe); + + // Summe berechnen + double summeNetto = 0.0; + double summeBrutto = 0.0; + for (int i = 0; i < artikelListe.size(); i++) { + Artikel artikel = artikelListe.get(i); + int menge = mengeListe.get(i); + summeNetto += artikel.getNettopreis() * menge; + summeBrutto += artikel.getBruttopreis() * menge; + } + angebot.setSummeNetto(summeNetto); + angebot.setSummeBrutto(summeBrutto); + + // Angebot anzeigen + angebot.anzeigen(); + + // Angebot speichern + speichereAngebot(angebot); + return angebot; + } + + private void speichereAngebot(Angebot angebot) { + try { + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + Document doc = dBuilder.newDocument(); + + // Root-Element + Element rootElement = doc.createElement("Angebot"); + doc.appendChild(rootElement); + + // Angebotsnummer-Element + Element nummerElement = doc.createElement("Angebotsnummer"); + nummerElement.appendChild(doc.createTextNode(Integer.toString(angebot.getAngebotnummer()))); + rootElement.appendChild(nummerElement); + + // Erstellungsdatum-Element + Element datumElement = doc.createElement("Erstellungsdatum"); + datumElement.appendChild(doc.createTextNode(angebot.getErstellungsdatum().toString())); + rootElement.appendChild(datumElement); + + // Kunde-Element + Element kundeElement = doc.createElement("Kunde"); + rootElement.appendChild(kundeElement); + + // Kundennummer-Element + Element kundennummerElement = doc.createElement("Kundennummer"); + kundennummerElement.appendChild(doc.createTextNode(Integer.toString(angebot.getKunde().getKundennummer()))); + kundeElement.appendChild(kundennummerElement); + + // Artikel-Element + Element artikelElement = doc.createElement("Artikel"); + rootElement.appendChild(artikelElement); + + for (int i = 0; i < angebot.getArtikelListe().size(); i++) { + Artikel artikel = angebot.getArtikelListe().get(i); + int menge = angebot.getMenge().get(i); + + Element artikelDetailsElement = doc.createElement("ArtikelDetails"); + + Element artikelNummerElement = doc.createElement("Artikelnummer"); + artikelNummerElement.appendChild(doc.createTextNode(Integer.toString(artikel.getArtikelnummer()))); + artikelDetailsElement.appendChild(artikelNummerElement); + + Element artikelMengeElement = doc.createElement("Menge"); + artikelMengeElement.appendChild(doc.createTextNode(Integer.toString(menge))); + artikelDetailsElement.appendChild(artikelMengeElement); + + Element artikelNettoElement = doc.createElement("Nettopreis"); + artikelNettoElement.appendChild(doc.createTextNode(Double.toString(artikel.getNettopreis()))); + artikelDetailsElement.appendChild(artikelNettoElement); + + Element artikelBruttoElement = doc.createElement("Bruttopreis"); + artikelBruttoElement.appendChild(doc.createTextNode(Double.toString(artikel.getBruttopreis()))); + artikelDetailsElement.appendChild(artikelBruttoElement); + + artikelElement.appendChild(artikelDetailsElement); + } + + // Summe Netto-Element + Element summeNettoElement = doc.createElement("SummeNetto"); + summeNettoElement.appendChild(doc.createTextNode(Double.toString(angebot.getSummeNetto()))); + rootElement.appendChild(summeNettoElement); + + // Summe Brutto-Element + Element summeBruttoElement = doc.createElement("SummeBrutto"); + summeBruttoElement.appendChild(doc.createTextNode(Double.toString(angebot.getSummeBrutto()))); + rootElement.appendChild(summeBruttoElement); + + // Transformieren und Speichern in Datei + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(new File(ordnerPfad + "/" + angebot.getAngebotnummer() + ".xml")); + transformer.transform(source, result); + + System.out.println("Angebot wurde erfolgreich gespeichert."); + } catch (ParserConfigurationException | TransformerException e) { + e.printStackTrace(); + } + } + + public Angebot leseAusXML(int angebotsnummer) { + try { + File xmlDatei = new File(ordnerPfad + "/" + angebotsnummer + ".xml"); + if (!xmlDatei.exists()) { + return null; + } + + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + Document doc = dBuilder.parse(xmlDatei); + doc.getDocumentElement().normalize(); + + Angebot angebot = new Angebot(); + NodeList nList = doc.getElementsByTagName("Angebot"); + + for (int temp = 0; temp < nList.getLength(); temp++) { + Node nNode = nList.item(temp); + + if (nNode.getNodeType() == Node.ELEMENT_NODE) { + Element eElement = (Element) nNode; + + // Angebotsnummer setzen + int nummer = Integer.parseInt(eElement.getElementsByTagName("Angebotsnummer").item(0).getTextContent()); + Angebot.setAktuelleAngebotnummer(nummer - 1); // Damit die Angebotsnummer korrekt gesetzt wird + angebot = new Angebot(); // Neues Angebot-Objekt erstellen mit der richtigen Angebotsnummer + + // Erstellungsdatum setzen + String datumString = eElement.getElementsByTagName("Erstellungsdatum").item(0).getTextContent(); + SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", java.util.Locale.ENGLISH); + Date erstellungsdatum = dateFormat.parse(datumString); + + // Reflektiere das Datum im Angebot-Objekt + Field field = Angebot.class.getDeclaredField("erstellungsdatum"); + field.setAccessible(true); + field.set(angebot, erstellungsdatum); + + // Kunde setzen + int kundennummer = Integer.parseInt(eElement.getElementsByTagName("Kundennummer").item(0).getTextContent()); + Kunde kunde = kundenController.leseAusXML(kundennummer); + angebot.setKunde(kunde); + + // Artikel und Menge setzen + List artikelListe = new ArrayList<>(); + List mengeListe = new ArrayList<>(); + NodeList artikelNodes = eElement.getElementsByTagName("ArtikelDetails"); + for (int i = 0; i < artikelNodes.getLength(); i++) { + Element artikelElement = (Element) artikelNodes.item(i); + int artikelnummer = Integer.parseInt(artikelElement.getElementsByTagName("Artikelnummer").item(0).getTextContent()); + Artikel artikel = artikelController.leseAusXML(artikelnummer); + int menge = Integer.parseInt(artikelElement.getElementsByTagName("Menge").item(0).getTextContent()); + artikelListe.add(artikel); + mengeListe.add(menge); + } + angebot.setArtikelListe(artikelListe); + angebot.setMenge(mengeListe); + + // Summen setzen + angebot.setSummeNetto(Double.parseDouble(eElement.getElementsByTagName("SummeNetto").item(0).getTextContent())); + angebot.setSummeBrutto(Double.parseDouble(eElement.getElementsByTagName("SummeBrutto").item(0).getTextContent())); + } + } + + System.out.println("Angebot wurde erfolgreich gelesen."); + return angebot; + } catch (ParserConfigurationException | SAXException | IOException | ParseException | NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/Faktura_Gruppe5/src/controller/ArtikelController.java b/Faktura_Gruppe5/src/controller/ArtikelController.java index 2d236bf..d151524 100644 --- a/Faktura_Gruppe5/src/controller/ArtikelController.java +++ b/Faktura_Gruppe5/src/controller/ArtikelController.java @@ -20,10 +20,10 @@ import java.io.IOException; import java.util.Scanner; public class ArtikelController { - - private String ordnerPfad = "artikel"; - - public ArtikelController() { + + private String ordnerPfad = "artikel"; + + public ArtikelController() { File ordner = new File(ordnerPfad); if (!ordner.exists()) { if (ordner.mkdir()) { @@ -33,7 +33,22 @@ public class ArtikelController { } } } - + + // Methode zum Überprüfen, ob eine Artikelnummer bereits existiert + private boolean artikelnummerExistiert(int artikelnummer) { + File xmlDatei = new File(ordnerPfad + "/" + artikelnummer + ".xml"); + return xmlDatei.exists(); + } + + // Methode zur Generierung einer neuen, eindeutigen Artikelnummer + private int generiereNeueArtikelnummer() { + int neueArtikelnummer = 1; + while (artikelnummerExistiert(neueArtikelnummer)) { + neueArtikelnummer++; + } + return neueArtikelnummer; + } + // Methode zum Speichern der Artikeldaten im XML-Format public void speichereAlsXML(Artikel artikel) { try { @@ -70,12 +85,17 @@ public class ArtikelController { mehrwertsteuersatzElement.appendChild(doc.createTextNode(Double.toString(artikel.getMehrwertsteuersatz()))); rootElement.appendChild(mehrwertsteuersatzElement); + // Bruttopreis-Element + Element bruttopreisElement = doc.createElement("Bruttopreis"); + bruttopreisElement.appendChild(doc.createTextNode(Double.toString(artikel.getBruttopreis()))); + rootElement.appendChild(bruttopreisElement); + // Transformieren und Speichern in Datei TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); DOMSource source = new DOMSource(doc); - StreamResult result = new StreamResult(new File(this.ordnerPfad + "/" + Integer.toString(artikel.getArtikelnummer()) + ".xml")); + StreamResult result = new StreamResult(new File(this.ordnerPfad + "/" + artikel.getArtikelnummer() + ".xml")); transformer.transform(source, result); System.out.println("Die XML-Datei wurde erfolgreich gespeichert."); @@ -88,7 +108,7 @@ public class ArtikelController { // Methode zum Auslesen der Artikeldaten aus einer XML-Datei public Artikel leseAusXML(int artikelnummer) { try { - File xmlDatei = new File(this.ordnerPfad + "/" + Integer.toString(artikelnummer) + ".xml"); + File xmlDatei = new File(this.ordnerPfad + "/" + artikelnummer + ".xml"); Artikel artikel = new Artikel(artikelnummer); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); @@ -108,16 +128,16 @@ public class ArtikelController { artikel.setBezeichnung(eElement.getElementsByTagName("Bezeichnung").item(0).getTextContent()); artikel.setNettopreis(Double.parseDouble(eElement.getElementsByTagName("Nettopreis").item(0).getTextContent())); artikel.setMehrwertsteuersatz(Double.parseDouble(eElement.getElementsByTagName("Mehrwertsteuersatz").item(0).getTextContent())); + artikel.setBruttopreis(Double.parseDouble(eElement.getElementsByTagName("Bruttopreis").item(0).getTextContent())); } } - - + System.out.println("Die XML-Datei wurde erfolgreich gelesen."); return artikel; } catch (ParserConfigurationException | SAXException | IOException e) { e.printStackTrace(); } - return null; + return null; } // Methode zum Auslesen der Artikeldaten aus einer XML-Datei und in der Konsole ausgeben @@ -128,6 +148,8 @@ public class ArtikelController { // Methode zur Eingabe der Artikeldaten über die Konsole public void eingabeDaten(Artikel artikel, Scanner scanner) { + artikel.setArtikelnummer(generiereNeueArtikelnummer()); + System.out.print("Einheit: "); artikel.setEinheit(scanner.nextLine()); @@ -139,5 +161,8 @@ public class ArtikelController { System.out.print("Mehrwertsteuersatz: "); artikel.setMehrwertsteuersatz(Double.parseDouble(scanner.nextLine())); + + // Der Bruttopreis wird automatisch berechnet und gesetzt + artikel.setBruttopreis(artikel.getNettopreis() + (artikel.getNettopreis() * artikel.getMehrwertsteuersatz() / 100)); } } diff --git a/Faktura_Gruppe5/src/controller/AuftragsbestaetigungController.java b/Faktura_Gruppe5/src/controller/AuftragsbestaetigungController.java new file mode 100644 index 0000000..faa56f3 --- /dev/null +++ b/Faktura_Gruppe5/src/controller/AuftragsbestaetigungController.java @@ -0,0 +1,163 @@ +package controller; + +import model.Auftragsbestaetigung; +import model.Angebot; +import model.Artikel; +import model.Kunde; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +import java.io.File; +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Scanner; + +public class AuftragsbestaetigungController { + private final String ordnerPfad = "auftragsbestaetigungen"; + private AngebotController angebotController; + + public AuftragsbestaetigungController() { + angebotController = new AngebotController(); + File ordner = new File(ordnerPfad); + if (!ordner.exists()) { + ordner.mkdir(); + } + } + + // Methode zum Überprüfen, ob eine Auftragsnummer bereits existiert + private boolean auftragsnummerExistiert(int auftragsnummer) { + File xmlDatei = new File(ordnerPfad + "/" + auftragsnummer + ".xml"); + return xmlDatei.exists(); + } + + // Methode zur Generierung einer neuen, eindeutigen Auftragsnummer + private int generiereNeueAuftragsnummer() { + int neueAuftragsnummer = 1; + while (auftragsnummerExistiert(neueAuftragsnummer)) { + neueAuftragsnummer++; + } + return neueAuftragsnummer; + } + + // Methode zum Speichern der Auftragsbestaetigung im XML-Format + public void speichereAlsXML(Auftragsbestaetigung auftragsbestaetigung) { + try { + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + Document doc = dBuilder.newDocument(); + + // Root-Element + Element rootElement = doc.createElement("Auftragsbestaetigung"); + doc.appendChild(rootElement); + + // Auftragsnummer-Element + Element nummerElement = doc.createElement("Auftragsnummer"); + nummerElement.appendChild(doc.createTextNode(Integer.toString(auftragsbestaetigung.getAuftragsnummer()))); + rootElement.appendChild(nummerElement); + + // Auftragsdatum-Element + Element datumElement = doc.createElement("Auftragsdatum"); + datumElement.appendChild(doc.createTextNode(String.valueOf(auftragsbestaetigung.getAuftragsdatum()))); + rootElement.appendChild(datumElement); + + // Angebot-Element + Element angebotElement = doc.createElement("Angebot"); + rootElement.appendChild(angebotElement); + + // Angebotsnummer-Element + Element angebotsnummerElement = doc.createElement("Angebotsnummer"); + angebotsnummerElement.appendChild(doc.createTextNode(Integer.toString(auftragsbestaetigung.getAngebot().getAngebotnummer()))); + angebotElement.appendChild(angebotsnummerElement); + + // Transformieren und Speichern in Datei + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(new File(ordnerPfad + "/" + auftragsbestaetigung.getAuftragsnummer() + ".xml")); + transformer.transform(source, result); + + System.out.println("Die XML-Datei wurde erfolgreich gespeichert."); + + } catch (ParserConfigurationException | TransformerException e) { + e.printStackTrace(); + } + } + + // Methode zum Auslesen der Auftragsbestaetigung aus einer XML-Datei + public Auftragsbestaetigung leseAusXML(int auftragsnummer) { + try { + File xmlDatei = new File(ordnerPfad + "/" + auftragsnummer + ".xml"); + if (!xmlDatei.exists()) { + return null; + } + + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + Document doc = dBuilder.parse(xmlDatei); + doc.getDocumentElement().normalize(); + + Auftragsbestaetigung auftragsbestaetigung = new Auftragsbestaetigung(); + NodeList nList = doc.getElementsByTagName("Auftragsbestaetigung"); + + for (int temp = 0; temp < nList.getLength(); temp++) { + Node nNode = nList.item(temp); + + if (nNode.getNodeType() == Node.ELEMENT_NODE) { + Element eElement = (Element) nNode; + + auftragsbestaetigung.setAuftragsnummer(Integer.parseInt(eElement.getElementsByTagName("Auftragsnummer").item(0).getTextContent())); + + String datumString = eElement.getElementsByTagName("Auftragsdatum").item(0).getTextContent(); +// SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", java.util.Locale.ENGLISH); + int auftragsdatum = Integer.parseInt(datumString); + auftragsbestaetigung.setAuftragsdatum(auftragsdatum); + + int angebotsnummer = Integer.parseInt(eElement.getElementsByTagName("Angebotsnummer").item(0).getTextContent()); + Angebot angebot = angebotController.leseAusXML(angebotsnummer); + auftragsbestaetigung.setAngebot(angebot); + } + } + + System.out.println("Die XML-Datei wurde erfolgreich gelesen."); + return auftragsbestaetigung; + } catch (ParserConfigurationException | SAXException | IOException e) { + e.printStackTrace(); + } + return null; + } + + public Auftragsbestaetigung erstelleAuftragsbestaetigung(Angebot angebot) { + Scanner scanner = new Scanner(System.in); + + System.out.print("Bitte geben Sie die Auftragsbestaetigungsdatum ein: "); + int datum = scanner.nextInt(); + Auftragsbestaetigung auftragsbestaetigung = new Auftragsbestaetigung(); + auftragsbestaetigung.setAuftragsnummer(generiereNeueAuftragsnummer()); + auftragsbestaetigung.setAngebot(angebot); + auftragsbestaetigung.setAuftragsdatum(datum); +// Auftragsbestaetigung auftragsbestaetigung = new Auftragsbestaetigung(angebot, datum); + speichereAlsXML(auftragsbestaetigung); + + return auftragsbestaetigung; + + } +} diff --git a/Faktura_Gruppe5/src/controller/FirmenstammdatenController.java b/Faktura_Gruppe5/src/controller/FirmenstammdatenController.java index 50c2551..966acfd 100644 --- a/Faktura_Gruppe5/src/controller/FirmenstammdatenController.java +++ b/Faktura_Gruppe5/src/controller/FirmenstammdatenController.java @@ -1,6 +1,7 @@ package controller; import model.Firmenstammdaten; +import model.Anschrift; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -33,17 +34,17 @@ public class FirmenstammdatenController { System.out.print("Inhaber: "); daten.setInhaber(scanner.nextLine()); + Anschrift anschrift = new Anschrift(); System.out.print("Straße: "); - daten.setStrasse(scanner.nextLine()); + anschrift.setStrasse(scanner.nextLine()); System.out.print("PLZ: "); - daten.setPlz(scanner.nextLine()); + anschrift.setPlz(scanner.nextLine()); - System.out.print("Stadt: "); - daten.setStadt(scanner.nextLine()); + System.out.print("Ort: "); + anschrift.setOrt(scanner.nextLine()); - System.out.print("Land: "); - daten.setLand(scanner.nextLine()); + daten.setAnschrift(anschrift); System.out.print("Telefon: "); daten.setTelefon(scanner.nextLine()); @@ -102,25 +103,22 @@ public class FirmenstammdatenController { inhaberElement.appendChild(doc.createTextNode(daten.getInhaber())); rootElement.appendChild(inhaberElement); - // Straße-Element + // Anschrift-Element + Element anschriftElement = doc.createElement("Anschrift"); + Element strasseElement = doc.createElement("Strasse"); - strasseElement.appendChild(doc.createTextNode(daten.getStrasse())); - rootElement.appendChild(strasseElement); + strasseElement.appendChild(doc.createTextNode(daten.getAnschrift().getStrasse())); + anschriftElement.appendChild(strasseElement); - // PLZ-Element Element plzElement = doc.createElement("PLZ"); - plzElement.appendChild(doc.createTextNode(daten.getPlz())); - rootElement.appendChild(plzElement); + plzElement.appendChild(doc.createTextNode(daten.getAnschrift().getPlz())); + anschriftElement.appendChild(plzElement); - // Stadt-Element - Element stadtElement = doc.createElement("Stadt"); - stadtElement.appendChild(doc.createTextNode(daten.getStadt())); - rootElement.appendChild(stadtElement); + Element ortElement = doc.createElement("Ort"); + ortElement.appendChild(doc.createTextNode(daten.getAnschrift().getOrt())); + anschriftElement.appendChild(ortElement); - // Land-Element - Element landElement = doc.createElement("Land"); - landElement.appendChild(doc.createTextNode(daten.getLand())); - rootElement.appendChild(landElement); + rootElement.appendChild(anschriftElement); // Telefon-Element Element telefonElement = doc.createElement("Telefon"); @@ -212,10 +210,14 @@ public class FirmenstammdatenController { daten.setFirmenname(eElement.getElementsByTagName("Firmenname").item(0).getTextContent()); daten.setInhaber(eElement.getElementsByTagName("Inhaber").item(0).getTextContent()); - daten.setStrasse(eElement.getElementsByTagName("Strasse").item(0).getTextContent()); - daten.setPlz(eElement.getElementsByTagName("PLZ").item(0).getTextContent()); - daten.setStadt(eElement.getElementsByTagName("Stadt").item(0).getTextContent()); - daten.setLand(eElement.getElementsByTagName("Land").item(0).getTextContent()); + + Element anschriftElement = (Element) eElement.getElementsByTagName("Anschrift").item(0); + Anschrift anschrift = new Anschrift(); + anschrift.setStrasse(anschriftElement.getElementsByTagName("Strasse").item(0).getTextContent()); + anschrift.setPlz(anschriftElement.getElementsByTagName("PLZ").item(0).getTextContent()); + anschrift.setOrt(anschriftElement.getElementsByTagName("Ort").item(0).getTextContent()); + daten.setAnschrift(anschrift); + daten.setTelefon(eElement.getElementsByTagName("Telefon").item(0).getTextContent()); daten.setMobilnummer(eElement.getElementsByTagName("Mobilnummer").item(0).getTextContent()); daten.setTelefax(eElement.getElementsByTagName("Telefax").item(0).getTextContent()); @@ -236,15 +238,13 @@ public class FirmenstammdatenController { } return daten; } - + public void checkForCompanyData(Scanner scanner) { - File file = new File(this.dateiPfad); - - if (!file.exists()) { - System.out.println("Das Programm kann noch nicht gestartet werden. Bitte geben Sie zuerst Ihre Firmenstammdaten ein."); - this.eingabeDaten(new Firmenstammdaten(), scanner); - } - + File file = new File(this.dateiPfad); + + if (!file.exists()) { + System.out.println("Das Programm kann noch nicht gestartet werden. Bitte geben Sie zuerst Ihre Firmenstammdaten ein."); + this.eingabeDaten(new Firmenstammdaten(), scanner); + } } - -} \ No newline at end of file +} diff --git a/Faktura_Gruppe5/src/controller/KundenController.java b/Faktura_Gruppe5/src/controller/KundenController.java index f9d105d..53d13a8 100644 --- a/Faktura_Gruppe5/src/controller/KundenController.java +++ b/Faktura_Gruppe5/src/controller/KundenController.java @@ -1,5 +1,6 @@ package controller; +import model.Anschrift; import model.Kunde; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -20,10 +21,10 @@ import java.io.IOException; import java.util.Scanner; public class KundenController { - - private String ordnerPfad = "kunde"; - - public KundenController() { + + private String ordnerPfad = "kunde"; + + public KundenController() { File ordner = new File(ordnerPfad); if (!ordner.exists()) { if (ordner.mkdir()) { @@ -34,6 +35,21 @@ public class KundenController { } } + // Methode zum Überprüfen, ob eine Kundennummer bereits existiert + private boolean kundennummerExistiert(int kundennummer) { + File xmlDatei = new File(ordnerPfad + "/" + kundennummer + ".xml"); + return xmlDatei.exists(); + } + + // Methode zur Generierung einer neuen, eindeutigen Kundennummer + private int generiereNeueKundennummer() { + int neueKundennummer = 1; + while (kundennummerExistiert(neueKundennummer)) { + neueKundennummer++; + } + return neueKundennummer; + } + // Methode zum Speichern der Kundendaten im XML-Format public void speichereAlsXML(Kunde kunde) { try { @@ -57,9 +73,21 @@ public class KundenController { // Anschrift-Element Element anschriftElement = doc.createElement("Anschrift"); - anschriftElement.appendChild(doc.createTextNode(kunde.getAnschrift())); rootElement.appendChild(anschriftElement); + // Anschrift Unterelemente + Element strasseElement = doc.createElement("Strasse"); + strasseElement.appendChild(doc.createTextNode(kunde.getAnschrift().getStrasse())); + anschriftElement.appendChild(strasseElement); + + Element plzElement = doc.createElement("PLZ"); + plzElement.appendChild(doc.createTextNode(kunde.getAnschrift().getPlz())); + anschriftElement.appendChild(plzElement); + + Element ortElement = doc.createElement("Ort"); + ortElement.appendChild(doc.createTextNode(kunde.getAnschrift().getOrt())); + anschriftElement.appendChild(ortElement); + // Email-Element Element emailElement = doc.createElement("Email"); emailElement.appendChild(doc.createTextNode(kunde.getEmail())); @@ -85,7 +113,7 @@ public class KundenController { Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); DOMSource source = new DOMSource(doc); - StreamResult result = new StreamResult(new File(ordnerPfad + "/" + Integer.toString(kunde.getKundennummer()) + ".xml")); + StreamResult result = new StreamResult(new File(ordnerPfad + "/" + kunde.getKundennummer() + ".xml")); transformer.transform(source, result); System.out.println("Die XML-Datei wurde erfolgreich gespeichert."); @@ -98,7 +126,7 @@ public class KundenController { // Methode zum Auslesen der Kundendaten aus einer XML-Datei public Kunde leseAusXML(int kundennummer) { try { - File xmlDatei = new File(ordnerPfad + "/" + Integer.toString(kundennummer) + ".xml"); + File xmlDatei = new File(ordnerPfad + "/" + kundennummer + ".xml"); Kunde kunde = new Kunde(kundennummer); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); @@ -115,48 +143,123 @@ public class KundenController { kunde.setKundennummer(Integer.parseInt(eElement.getElementsByTagName("Kundennummer").item(0).getTextContent())); kunde.setName(eElement.getElementsByTagName("Name").item(0).getTextContent()); - kunde.setAnschrift(eElement.getElementsByTagName("Anschrift").item(0).getTextContent()); + + // Anschrift + Element anschriftElement = (Element) eElement.getElementsByTagName("Anschrift").item(0); + String strasse = anschriftElement.getElementsByTagName("Strasse").item(0).getTextContent(); + String plz = anschriftElement.getElementsByTagName("PLZ").item(0).getTextContent(); + String ort = anschriftElement.getElementsByTagName("Ort").item(0).getTextContent(); + Anschrift anschrift = new Anschrift(strasse, plz, ort); + kunde.setAnschrift(anschrift); + kunde.setEmail(eElement.getElementsByTagName("Email").item(0).getTextContent()); kunde.setTelefonnummer(eElement.getElementsByTagName("Telefonnummer").item(0).getTextContent()); kunde.setIstKleinunternehmer(Boolean.parseBoolean(eElement.getElementsByTagName("Kleinunternehmer").item(0).getTextContent())); kunde.setAnsprechpartner(eElement.getElementsByTagName("Ansprechpartner").item(0).getTextContent()); } } - + System.out.println("Die XML-Datei wurde erfolgreich gelesen."); return kunde; } catch (ParserConfigurationException | SAXException | IOException e) { e.printStackTrace(); } - return null; - - - } - - // Methode zum Auslesen der Kundendaten aus einer XML-Datei und in der Konsole ausgeben - public void leseUndGibAusXML(Kunde kunde, String dateiPfad) { - leseUndGibAusXML(kunde, dateiPfad); - kunde.anzeigen(); + return null; } // Methode zur Eingabe der Kundendaten über die Konsole public void eingabeDaten(Kunde kunde, Scanner scanner) { - System.out.print("Name: "); - kunde.setName(scanner.nextLine()); + kunde.setKundennummer(generiereNeueKundennummer()); - System.out.print("Anschrift: "); - kunde.setAnschrift(scanner.nextLine()); + // Name + String name; + do { + System.out.print("Name: "); + name = scanner.nextLine(); + if (name.isEmpty()) { + System.out.println("Name darf nicht leer sein. Bitte erneut eingeben."); + } + } while (name.isEmpty()); + kunde.setName(name); - System.out.print("Email: "); - kunde.setEmail(scanner.nextLine()); + // Straße + String strasse; + do { + System.out.print("Straße: "); + strasse = scanner.nextLine(); + if (strasse.isEmpty()) { + System.out.println("Straße darf nicht leer sein. Bitte erneut eingeben."); + } + } while (strasse.isEmpty()); - System.out.print("Telefonnummer: "); - kunde.setTelefonnummer(scanner.nextLine()); + // PLZ + String plz; + do { + System.out.print("PLZ: "); + plz = scanner.nextLine(); + if (!plz.matches("\\d{5}")) { // Prüft, ob die PLZ 5-stellig ist und nur Ziffern enthält + System.out.println("PLZ muss 5-stellig und numerisch sein. Bitte erneut eingeben."); + } + } while (!plz.matches("\\d{5}")); - System.out.print("Ist der Kunde ein Kleinunternehmer (true/false)? "); - kunde.setIstKleinunternehmer(Boolean.parseBoolean(scanner.nextLine())); + // Ort + String ort; + do { + System.out.print("Ort: "); + ort = scanner.nextLine(); + if (ort.isEmpty()) { + System.out.println("Ort darf nicht leer sein. Bitte erneut eingeben."); + } + } while (ort.isEmpty()); - System.out.print("Ansprechpartner: "); - kunde.setAnsprechpartner(scanner.nextLine()); + Anschrift anschrift = new Anschrift(strasse, plz, ort); + kunde.setAnschrift(anschrift); + + // Email + String email; + do { + System.out.print("Email: "); + email = scanner.nextLine(); + if (!email.matches("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$")) { // Einfache E-Mail-Validierung + System.out.println("Bitte geben Sie eine gültige Email-Adresse ein."); + } + } while (!email.matches("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$")); + kunde.setEmail(email); + + // Telefonnummer + String telefonnummer; + do { + System.out.print("Telefonnummer: "); + telefonnummer = scanner.nextLine(); + if (!telefonnummer.matches("\\+?[0-9]{10,15}")) { // Prüft, ob die Telefonnummer zwischen 10 und 15 Ziffern hat + System.out.println("Telefonnummer muss zwischen 10 und 15 Ziffern lang sein. Bitte erneut eingeben."); + } + } while (!telefonnummer.matches("\\+?[0-9]{10,15}")); + kunde.setTelefonnummer(telefonnummer); + + // Kleinunternehmer + Boolean istKleinunternehmer = null; + do { + System.out.print("Ist der Kunde ein Kleinunternehmer (true/false)? "); + String input = scanner.nextLine().toLowerCase(); + if (input.equals("true") || input.equals("false")) { + istKleinunternehmer = Boolean.parseBoolean(input); + } else { + System.out.println("Bitte geben Sie 'true' oder 'false' ein."); + } + } while (istKleinunternehmer == null); + kunde.setIstKleinunternehmer(istKleinunternehmer); + + // Ansprechpartner + String ansprechpartner; + do { + System.out.print("Ansprechpartner: "); + ansprechpartner = scanner.nextLine(); + if (ansprechpartner.isEmpty()) { + System.out.println("Ansprechpartner darf nicht leer sein. Bitte erneut eingeben."); + } + } while (ansprechpartner.isEmpty()); + kunde.setAnsprechpartner(ansprechpartner); } + } diff --git a/Faktura_Gruppe5/src/controller/LieferscheinController.java b/Faktura_Gruppe5/src/controller/LieferscheinController.java new file mode 100644 index 0000000..3db0d56 --- /dev/null +++ b/Faktura_Gruppe5/src/controller/LieferscheinController.java @@ -0,0 +1,178 @@ +package controller; + +import model.Lieferschein; +import model.Angebot; +import model.Auftragsbestaetigung; +import model.Firmenstammdaten; +import model.Kunde; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +import java.io.File; +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Scanner; + +public class LieferscheinController { + private final String ordnerPfad = "lieferscheine"; + private KundenController kundenController; + private AngebotController angebotController; + + public LieferscheinController() { + kundenController = new KundenController(); + angebotController = new AngebotController(); + File ordner = new File(ordnerPfad); + if (!ordner.exists()) { + ordner.mkdir(); + } + } + + private boolean lieferscheinNummerExistiert(int auftragsnummer) { + File xmlDatei = new File(ordnerPfad + "/" + auftragsnummer + ".xml"); + return xmlDatei.exists(); + } + + // Methode zur Generierung einer neuen, eindeutigen Auftragsnummer + private int generiereNeueLieferscheinNummer() { + int neueLieferscheinNummer = 1; + while (lieferscheinNummerExistiert(neueLieferscheinNummer)) { + neueLieferscheinNummer++; + } + return neueLieferscheinNummer; + } + + // Methode zum Speichern des Lieferscheins im XML-Format + public void speichereAlsXML(Lieferschein lieferschein) { + try { + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + Document doc = dBuilder.newDocument(); + + // Root-Element + Element rootElement = doc.createElement("Lieferschein"); + doc.appendChild(rootElement); + + // Lieferscheinnummer-Element + Element lieferscheinnummerElement = doc.createElement("Lieferscheinnummer"); + lieferscheinnummerElement.appendChild(doc.createTextNode(Integer.toString(lieferschein.getLieferscheinnummer()))); + rootElement.appendChild(lieferscheinnummerElement); + + // Ausstellungsdatum-Element + Element ausstellungsdatumElement = doc.createElement("Ausstellungsdatum"); +// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); + ausstellungsdatumElement.appendChild(doc.createTextNode(String.valueOf(lieferschein.getAusstellungsdatum()))); + rootElement.appendChild(ausstellungsdatumElement); + + // Kunde-Element + Element kundeElement = doc.createElement("Kunde"); + kundeElement.appendChild(doc.createTextNode(Integer.toString(lieferschein.getKunde().getKundennummer()))); + rootElement.appendChild(kundeElement); + + Element angebotElement = doc.createElement("Angebot"); + kundeElement.appendChild(doc.createTextNode(Integer.toString(lieferschein.getAngebot().getAngebotnummer()))); + rootElement.appendChild(angebotElement); + + // Bankinformationen-Element + Element bankinformationenElement = doc.createElement("Bankinformationen"); + bankinformationenElement.appendChild(doc.createTextNode(lieferschein.getBankinformationen())); + rootElement.appendChild(bankinformationenElement); + + // Transformieren und Speichern in Datei + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(new File(ordnerPfad + "/" + lieferschein.getLieferscheinnummer() + ".xml")); + transformer.transform(source, result); + + System.out.println("Lieferschein wurde erfolgreich gespeichert."); + } catch (ParserConfigurationException | TransformerException e) { + e.printStackTrace(); + } + } + + // Methode zum Auslesen des Lieferscheins aus einer XML-Datei + public Lieferschein leseAusXML(int lieferscheinnummer) { + try { + File xmlDatei = new File(ordnerPfad + "/" + lieferscheinnummer + ".xml"); + if (!xmlDatei.exists()) { + return null; + } + + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + Document doc = dBuilder.parse(xmlDatei); + doc.getDocumentElement().normalize(); + + Lieferschein lieferschein = new Lieferschein(); + + NodeList nList = doc.getElementsByTagName("Lieferschein"); + for (int temp = 0; temp < nList.getLength(); temp++) { + Node nNode = nList.item(temp); + + if (nNode.getNodeType() == Node.ELEMENT_NODE) { + Element eElement = (Element) nNode; + + int lieferscheinNummer = Integer.parseInt(eElement.getElementsByTagName("Lieferscheinnummer").item(0).getTextContent()); + String ausstellungsDatumStr = eElement.getElementsByTagName("Ausstellungsdatum").item(0).getTextContent(); +// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); + int ausstellungsDatum = Integer.parseInt(ausstellungsDatumStr); + int kundenNummer = Integer.parseInt(eElement.getElementsByTagName("Kunde").item(0).getTextContent()); + int angebotsNummer = Integer.parseInt(eElement.getElementsByTagName("Angebot").item(0).getTextContent()); + Kunde kunde = kundenController.leseAusXML(kundenNummer); + Angebot angebot= angebotController.leseAusXML(angebotsNummer); + +// AuftragsbestaetigungController auftragsbestaetigungController = new AuftragsbestaetigungController(); +// Auftragsbestaetigung auftragsbestaetigung = auftragsbestaetigungController.leseAusXML(lieferscheinNummer); + + String bankinformation = eElement.getElementsByTagName("Bankinformationen").item(0).getTextContent(); + lieferschein.setAusstellungsdatum(ausstellungsDatum); + lieferschein.setBankinformationen(bankinformation); + lieferschein.setAngebot(angebot); + lieferschein.setKunde(kunde); + lieferschein.setLieferscheinnummer(lieferscheinNummer); + + return lieferschein; + } + } + } catch (ParserConfigurationException | SAXException | IOException e) { + e.printStackTrace(); + } + return null; + } + + public Lieferschein erstelleLieferschein(Angebot angebot,Firmenstammdaten firmenstammdaten) { + Scanner scanner = new Scanner(System.in); + + System.out.print("Bitte geben Sie das Ausstellungsdatum ein: "); + int datum = scanner.nextInt(); + Lieferschein lieferschein = new Lieferschein(); + lieferschein.setLieferscheinnummer(generiereNeueLieferscheinNummer()); + lieferschein.setKunde(angebot.getKunde()); + lieferschein.setAusstellungsdatum(datum); + lieferschein.setBankinformationen(firmenstammdaten.getBankname()+"\n"+firmenstammdaten.getIban()); + lieferschein.setAngebot(angebot); + lieferschein.setKunde(angebot.getKunde()); +// Auftragsbestaetigung auftragsbestaetigung = new Auftragsbestaetigung(angebot, datum); + speichereAlsXML(lieferschein); + + return lieferschein; + + } +} diff --git a/Faktura_Gruppe5/src/controller/MainController.java b/Faktura_Gruppe5/src/controller/MainController.java index c5a315e..e34fed8 100644 --- a/Faktura_Gruppe5/src/controller/MainController.java +++ b/Faktura_Gruppe5/src/controller/MainController.java @@ -1,32 +1,56 @@ package controller; -import model.Kunde; - public class MainController { - - private KundenController kundenController; - private ArtikelController artikelController; - private FirmenstammdatenController firmenstammdatenController; - - public MainController() { - this.kundenController = new KundenController(); - this.artikelController = new ArtikelController(); - this.firmenstammdatenController = new FirmenstammdatenController(); - } - public KundenController getKundenController() { - return kundenController; - } + private KundenController kundenController; + private ArtikelController artikelController; + private FirmenstammdatenController firmenstammdatenController; + private AngebotController angebotController; + private WertschoepfungsketteController wertschoepfungsketteController; + private RechnungController rechnungController; + private LieferscheinController lieferscheinController; + private AuftragsbestaetigungController auftragsbestaetigungController; - public ArtikelController getArtikelController() { - return artikelController; - } - - public FirmenstammdatenController getFirmenstammdatenController() { - return this.firmenstammdatenController; - } - - + public MainController() { + this.kundenController = new KundenController(); + this.artikelController = new ArtikelController(); + this.firmenstammdatenController = new FirmenstammdatenController(); + this.angebotController = new AngebotController(); + this.wertschoepfungsketteController = new WertschoepfungsketteController(); + this.rechnungController = new RechnungController(); + this.lieferscheinController = new LieferscheinController(); + this.auftragsbestaetigungController = new AuftragsbestaetigungController(); + } - + public KundenController getKundenController() { + return kundenController; + } + + public ArtikelController getArtikelController() { + return artikelController; + } + + public FirmenstammdatenController getFirmenstammdatenController() { + return firmenstammdatenController; + } + + public AngebotController getAngebotController() { + return angebotController; + } + + public WertschoepfungsketteController getWertschoepfungsketteController() { + return wertschoepfungsketteController; + } + + public RechnungController getRechnungController() { + return rechnungController; + } + + public LieferscheinController getLieferscheinController() { + return lieferscheinController; + } + + public AuftragsbestaetigungController getAuftragsbestaetigungController() { + return auftragsbestaetigungController; + } } diff --git a/Faktura_Gruppe5/src/controller/RechnungController.java b/Faktura_Gruppe5/src/controller/RechnungController.java new file mode 100644 index 0000000..8225733 --- /dev/null +++ b/Faktura_Gruppe5/src/controller/RechnungController.java @@ -0,0 +1,221 @@ +package controller; + +import model.Rechnung; +import model.Angebot; +import model.Firmenstammdaten; +import model.Kunde; +import model.Lieferschein; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +import java.io.File; +import java.io.IOException; +import java.text.ParseException; +import java.util.Scanner; + +public class RechnungController { + private final String ordnerPfad = "rechnungen"; + + private KundenController kundenController; + private AngebotController angebotController; + + public RechnungController() { + kundenController = new KundenController(); + angebotController = new AngebotController(); + File ordner = new File(ordnerPfad); + if (!ordner.exists()) { + ordner.mkdir(); + } + } + + private boolean rechnungsnummerExistiert(int rechnungsnummer) { + File xmlDatei = new File(ordnerPfad + "/" + rechnungsnummer + ".xml"); + return xmlDatei.exists(); + } + + // Methode zur Generierung einer neuen, eindeutigen Rechnungsnummer + private int generiereNeueRechnungsnummer() { + int neueRechnungsnummer = 1; + while (rechnungsnummerExistiert(neueRechnungsnummer)) { + neueRechnungsnummer++; + } + return neueRechnungsnummer; + } + + // Methode zum Speichern der Rechnung im XML-Format + public void speichereAlsXML(Rechnung rechnung) { + try { + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + Document doc = dBuilder.newDocument(); + + // Root-Element + Element rootElement = doc.createElement("Rechnung"); + doc.appendChild(rootElement); + + // Rechnungsnummer-Element + Element rechnungsnummerElement = doc.createElement("Rechnungsnummer"); + rechnungsnummerElement.appendChild(doc.createTextNode(Integer.toString(rechnung.getRechnungsnummer()))); + rootElement.appendChild(rechnungsnummerElement); + + // Rechnungsdatum-Element + Element rechnungsdatumElement = doc.createElement("Rechnungsdatum"); + rechnungsdatumElement.appendChild(doc.createTextNode(String.valueOf(rechnung.getRechnungsdatum()))); + rootElement.appendChild(rechnungsdatumElement); + + // Lieferart-Element + Element lieferartElement = doc.createElement("Lieferart"); + lieferartElement.appendChild(doc.createTextNode(rechnung.getLieferart())); + rootElement.appendChild(lieferartElement); + + // Zahlungsfrist-Element + Element zahlungsfristElement = doc.createElement("Zahlungsfrist"); + zahlungsfristElement.appendChild(doc.createTextNode(String.valueOf(rechnung.getZahlungsfrist()))); + rootElement.appendChild(zahlungsfristElement); + + // Firmeninformationen-Element + Element firmeninformationenElement = doc.createElement("Firmeninformationen"); + firmeninformationenElement.appendChild(doc.createTextNode(rechnung.getFirmeninformationen())); + rootElement.appendChild(firmeninformationenElement); + + // Kunde-Element + Element kundeElement = doc.createElement("Kunde"); + rootElement.appendChild(kundeElement); + + // Kundennummer-Element + Element kundennummerElement = doc.createElement("Kundennummer"); + kundennummerElement.appendChild(doc.createTextNode(Integer.toString(rechnung.getKunde().getKundennummer()))); + kundeElement.appendChild(kundennummerElement); + + // Angebot-Element + Element angebotElement = doc.createElement("Angebot"); + rootElement.appendChild(angebotElement); + + // Angebotsnummer-Element + Element angebotsnummerElement = doc.createElement("Angebotsnummer"); + angebotsnummerElement.appendChild(doc.createTextNode(Integer.toString(rechnung.getAngebot().getAngebotnummer()))); + angebotElement.appendChild(angebotsnummerElement); + + // Bankinformationen-Element + Element bankinformationenElement = doc.createElement("Bankinformationen"); + bankinformationenElement.appendChild(doc.createTextNode(rechnung.getBankinformationen())); + rootElement.appendChild(bankinformationenElement); + + // Transformieren und Speichern in Datei + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(new File(ordnerPfad + "/" + rechnung.getRechnungsnummer() + ".xml")); + transformer.transform(source, result); + + System.out.println("Rechnung wurde erfolgreich gespeichert."); + } catch (ParserConfigurationException | TransformerException e) { + e.printStackTrace(); + } + } + + // Methode zum Auslesen der Rechnung aus einer XML-Datei + public Rechnung leseAusXML(int rechnungsnummer) { + try { + File xmlDatei = new File(ordnerPfad + "/" + rechnungsnummer + ".xml"); + if (!xmlDatei.exists()) { + return null; + } + + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + Document doc = dBuilder.parse(xmlDatei); + doc.getDocumentElement().normalize(); + + Rechnung rechnung = new Rechnung(); + + NodeList nList = doc.getElementsByTagName("Rechnung"); + for (int temp = 0; temp < nList.getLength(); temp++) { + Node nNode = nList.item(temp); + + if (nNode.getNodeType() == Node.ELEMENT_NODE) { + Element eElement = (Element) nNode; + + int rechnungsNummer = Integer.parseInt(eElement.getElementsByTagName("Rechnungsnummer").item(0).getTextContent()); + + String rechnungsDatumStr = eElement.getElementsByTagName("Rechnungsdatum").item(0).getTextContent(); + + int rechnungsDatum = Integer.parseInt(rechnungsDatumStr); + + String lieferart = eElement.getElementsByTagName("Lieferart").item(0).getTextContent(); + + String zahlungsfristStr = eElement.getElementsByTagName("Zahlungsfrist").item(0).getTextContent(); + int zahlungsfrist = Integer.parseInt(zahlungsfristStr); + + String firmeninformationen = eElement.getElementsByTagName("Firmeninformationen").item(0).getTextContent(); + + int kundennummer = Integer.parseInt(eElement.getElementsByTagName("Kundennummer").item(0).getTextContent()); + Kunde kunde = kundenController.leseAusXML(kundennummer); + + int angebotsnummer = Integer.parseInt(eElement.getElementsByTagName("Angebotsnummer").item(0).getTextContent()); + Angebot angebot = angebotController.leseAusXML(angebotsnummer); + + String bankinformationen = eElement.getElementsByTagName("Bankinformationen").item(0).getTextContent(); + + rechnung.setRechnungsnummer(rechnungsNummer); + rechnung.setRechnungsdatum(rechnungsDatum); + rechnung.setLieferart(lieferart); + rechnung.setZahlungsfrist(zahlungsfrist); + rechnung.setFirmeninformationen(firmeninformationen); + rechnung.setKunde(kunde); + rechnung.setAngebot(angebot); + rechnung.setBankinformationen(bankinformationen); + + return rechnung; + } + } + } catch (ParserConfigurationException | SAXException | IOException e) { + e.printStackTrace(); + } + return null; + } + + public Rechnung erstelleRechnung(Angebot angebot, Firmenstammdaten firmenstammdaten) { + Scanner scanner = new Scanner(System.in); + + System.out.print("Bitte geben Sie die Lieferart ein: "); + String lieferart = scanner.nextLine(); + + System.out.print("Bitte geben Sie die Zahlungsfrist ein (yyyyMMdd): "); + + int zahlungsfrist = scanner.nextInt(); + System.out.print("Bitte geben Sie ein Rechnungsdatum ein (yyyyMMdd): "); + + int rechnungsdatum = scanner.nextInt(); + Rechnung rechnung = new Rechnung(); + rechnung.setRechnungsnummer(generiereNeueRechnungsnummer()); + rechnung.setRechnungsdatum(rechnungsdatum); + rechnung.setLieferart(lieferart); + rechnung.setZahlungsfrist(zahlungsfrist); + rechnung.setFirmeninformationen(firmenstammdaten.getFirmenname() + "\n" + firmenstammdaten.getAnschrift().getStrasse() + "\n" + + firmenstammdaten.getAnschrift().getPlz() + " " + firmenstammdaten.getAnschrift().getOrt() + "\n" + + firmenstammdaten.getTelefon() + "\n" + firmenstammdaten.getEmail()); + rechnung.setKunde(angebot.getKunde()); + rechnung.setAngebot(angebot); + rechnung.setBankinformationen(firmenstammdaten.getBankname() + "\n" + firmenstammdaten.getIban()); + + speichereAlsXML(rechnung); + + return rechnung; + } +} diff --git a/Faktura_Gruppe5/src/controller/WertschoepfungsketteController.java b/Faktura_Gruppe5/src/controller/WertschoepfungsketteController.java new file mode 100644 index 0000000..cee3fef --- /dev/null +++ b/Faktura_Gruppe5/src/controller/WertschoepfungsketteController.java @@ -0,0 +1,197 @@ +package controller; + +import model.Wertschoepfungskette; +import model.Angebot; +import model.Auftragsbestaetigung; +import model.Lieferschein; +import model.Rechnung; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +import java.io.File; +import java.io.IOException; + +public class WertschoepfungsketteController { + private final String ordnerPfad = "wertschoepfungsketten"; + + public WertschoepfungsketteController() { + File ordner = new File(ordnerPfad); + if (!ordner.exists()) { + ordner.mkdir(); + } + } + + public void speichereAlsXML(Wertschoepfungskette wertschoepfungskette) { + try { + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + Document doc = dBuilder.newDocument(); + + // Root-Element + Element rootElement = doc.createElement("Wertschoepfungskette"); + doc.appendChild(rootElement); + + // Angebot + Angebot angebot = wertschoepfungskette.getAngebot(); + Element angebotElement = doc.createElement("Angebot"); + rootElement.appendChild(angebotElement); + + Element angebotnummerElement = doc.createElement("Angebotnummer"); + angebotnummerElement.appendChild(doc.createTextNode(Integer.toString(angebot.getAngebotnummer()))); + angebotElement.appendChild(angebotnummerElement); + + // Auftragsbestaetigung + if (wertschoepfungskette.getAuftragsbestaetigung() != null) { + Auftragsbestaetigung auftragsbestaetigung = wertschoepfungskette.getAuftragsbestaetigung(); + Element auftragsElement = doc.createElement("Auftragsbestaetigung"); + rootElement.appendChild(auftragsElement); + + Element auftragsnummerElement = doc.createElement("Auftragsnummer"); + auftragsnummerElement.appendChild(doc.createTextNode(Integer.toString(auftragsbestaetigung.getAuftragsnummer()))); + auftragsElement.appendChild(auftragsnummerElement); + } + + // Lieferschein + if (wertschoepfungskette.getLieferschein() != null) { + Lieferschein lieferschein = wertschoepfungskette.getLieferschein(); + Element lieferscheinElement = doc.createElement("Lieferschein"); + rootElement.appendChild(lieferscheinElement); + + Element lieferscheinnummerElement = doc.createElement("Lieferscheinnummer"); + lieferscheinnummerElement.appendChild(doc.createTextNode(Integer.toString(lieferschein.getLieferscheinnummer()))); + lieferscheinElement.appendChild(lieferscheinnummerElement); + } + + // Rechnung + if (wertschoepfungskette.getRechnung() != null) { + Rechnung rechnung = wertschoepfungskette.getRechnung(); + Element rechnungElement = doc.createElement("Rechnung"); + rootElement.appendChild(rechnungElement); + + Element rechnungsnummerElement = doc.createElement("Rechnungsnummer"); + rechnungsnummerElement.appendChild(doc.createTextNode(Integer.toString(rechnung.getRechnungsnummer()))); + rechnungElement.appendChild(rechnungsnummerElement); + } + + // Transformieren und Speichern in Datei + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(new File(ordnerPfad + "/" + wertschoepfungskette.getAngebot().getAngebotnummer() + ".xml")); + transformer.transform(source, result); + + System.out.println("Wertschoepfungskette wurde erfolgreich gespeichert."); + } catch (ParserConfigurationException | TransformerException e) { + e.printStackTrace(); + } + } + + public Wertschoepfungskette leseAusXML(int angebotnummer) { + try { + File xmlDatei = new File(ordnerPfad + "/" + angebotnummer + ".xml"); + if (!xmlDatei.exists()) { + return null; + } + + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + Document doc = dBuilder.parse(xmlDatei); + doc.getDocumentElement().normalize(); + + Wertschoepfungskette wertschoepfungskette = null; + + NodeList nList = doc.getElementsByTagName("Wertschoepfungskette"); + for (int temp = 0; temp < nList.getLength(); temp++) { + Node nNode = nList.item(temp); + + if (nNode.getNodeType() == Node.ELEMENT_NODE) { + Element eElement = (Element) nNode; + + // Angebot + Node angebotNode = eElement.getElementsByTagName("Angebot").item(0); + Element angebotElement = (Element) angebotNode; + int angebotNummer = Integer.parseInt(angebotElement.getElementsByTagName("Angebotnummer").item(0).getTextContent()); + + // Deserialize `Angebot` here... + AngebotController angebotController = new AngebotController(); + Angebot angebot = angebotController.leseAusXML(angebotNummer); + + wertschoepfungskette = new Wertschoepfungskette(angebot); + + // Auftragsbestaetigung + Node auftragsNode = eElement.getElementsByTagName("Auftragsbestaetigung").item(0); + if (auftragsNode != null) { + Element auftragsElement = (Element) auftragsNode; + int auftragsNummer = Integer.parseInt(auftragsElement.getElementsByTagName("Auftragsnummer").item(0).getTextContent()); + + // Deserialize `Auftragsbestaetigung` here... + AuftragsbestaetigungController auftragsbestaetigungController = new AuftragsbestaetigungController(); + Auftragsbestaetigung auftragsbestaetigung = auftragsbestaetigungController.leseAusXML(auftragsNummer); + if (auftragsbestaetigung != null) { + wertschoepfungskette.setAuftragsbestaetigung(auftragsbestaetigung); + } + } + + // Lieferschein + Node lieferscheinNode = eElement.getElementsByTagName("Lieferschein").item(0); + if (lieferscheinNode != null) { + Element lieferscheinElement = (Element) lieferscheinNode; + int lieferscheinNummer = Integer.parseInt(lieferscheinElement.getElementsByTagName("Lieferscheinnummer").item(0).getTextContent()); + + // Deserialize `Lieferschein` here... + LieferscheinController lieferscheinController = new LieferscheinController(); + Lieferschein lieferschein = lieferscheinController.leseAusXML(lieferscheinNummer); + if (lieferschein != null) { + wertschoepfungskette.setLieferschein(lieferschein); + } + + + } + + // Rechnung + Node rechnungNode = eElement.getElementsByTagName("Rechnung").item(0); + if (rechnungNode != null) { + Element rechnungElement = (Element) rechnungNode; + int rechnungsNummer = Integer.parseInt(rechnungElement.getElementsByTagName("Rechnungsnummer").item(0).getTextContent()); + + // Deserialize `Rechnung` here... + RechnungController rechnungController = new RechnungController(); + Rechnung rechnung = rechnungController.leseAusXML(rechnungsNummer); + if (rechnung != null) { + wertschoepfungskette.setRechnung(rechnung); + } + } + } + } + + System.out.println("Wertschoepfungskette wurde erfolgreich gelesen."); + return wertschoepfungskette; + } catch (ParserConfigurationException | SAXException | IOException e) { + e.printStackTrace(); + } + return null; + } + + public void erstelleWertschoepfungskette(Angebot angebot) { + + Wertschoepfungskette wertschoepfungskette =new Wertschoepfungskette(angebot); + speichereAlsXML(wertschoepfungskette); + } + + +} diff --git a/Faktura_Gruppe5/src/model/Angebot.java b/Faktura_Gruppe5/src/model/Angebot.java new file mode 100644 index 0000000..a4f15ee --- /dev/null +++ b/Faktura_Gruppe5/src/model/Angebot.java @@ -0,0 +1,103 @@ +package model; + +import java.util.Date; +import java.util.List; + +public class Angebot { + private static int aktuelleAngebotnummer = 0; + private int angebotnummer; + private Date erstellungsdatum; + private Kunde kunde; + private List artikelListe; + private List menge; + private double summeBrutto; + private double summeNetto; + + public Angebot() { + this.angebotnummer = ++aktuelleAngebotnummer; + this.erstellungsdatum = new Date(); + } + + public static int getAktuelleAngebotnummer() { + return aktuelleAngebotnummer; + } + + public static void setAktuelleAngebotnummer(int aktuelleAngebotnummer) { + Angebot.aktuelleAngebotnummer = aktuelleAngebotnummer; + } + + public int getAngebotnummer() { + return angebotnummer; + } + + public void setAngebotnummer(int angebotnummer) { + this.angebotnummer=angebotnummer; + } + + public Date getErstellungsdatum() { + return erstellungsdatum; + } + + public Kunde getKunde() { + return kunde; + } + + public void setKunde(Kunde kunde) { + this.kunde = kunde; + } + + public List getArtikelListe() { + return artikelListe; + } + + public void setArtikelListe(List artikelListe) { + this.artikelListe = artikelListe; + } + + public List getMenge() { + return menge; + } + + public void setMenge(List menge) { + this.menge = menge; + } + + public double getSummeBrutto() { + return summeBrutto; + } + + public void setSummeBrutto(double summeBrutto) { + this.summeBrutto = summeBrutto; + } + + public double getSummeNetto() { + return summeNetto; + } + + public void setSummeNetto(double summeNetto) { + this.summeNetto = summeNetto; + } + + public void anzeigen() { + System.out.println("Angebotsnummer: " + angebotnummer); + System.out.println("Erstellungsdatum: " + erstellungsdatum); + System.out.println("Kunde:"); + kunde.anzeigen(); + + System.out.println("Artikel:"); + for (int i = 0; i < artikelListe.size(); i++) { + System.out.println(" Artikel: " + artikelListe.get(i).getBezeichnung()); + System.out.println(" Menge: " + menge.get(i)); + System.out.println(" Nettopreis pro Stück: \t" + String.format("%.2f", artikelListe.get(i).getNettopreis())); + if (!kunde.isIstKleinunternehmer()) { + System.out.println( + " Bruttopeis pro Stück: \t" + String.format("%.2f", artikelListe.get(i).getBruttopreis())); + } + System.out.println(" --------------------------------------"); + } + System.out.println("Summe Netto: \t" + String.format("%.2f", summeNetto)); + if (!kunde.isIstKleinunternehmer()) { + System.out.println("Summe Brutto: \t" + String.format("%.2f", summeBrutto)); + } + } +} diff --git a/Faktura_Gruppe5/src/model/Anschrift.java b/Faktura_Gruppe5/src/model/Anschrift.java new file mode 100644 index 0000000..07a7b51 --- /dev/null +++ b/Faktura_Gruppe5/src/model/Anschrift.java @@ -0,0 +1,40 @@ +package model; + +public class Anschrift { + private String strasse; + private String plz; + private String ort; + + public Anschrift() { + } + + public Anschrift(String strasse, String plz, String ort) { + this.strasse = strasse; + this.plz = plz; + this.ort = ort; + } + + public String getStrasse() { + return strasse; + } + + public void setStrasse(String strasse) { + this.strasse = strasse; + } + + public String getPlz() { + return plz; + } + + public void setPlz(String plz) { + this.plz = plz; + } + + public String getOrt() { + return ort; + } + + public void setOrt(String ort) { + this.ort = ort; + } +} diff --git a/Faktura_Gruppe5/src/model/Artikel.java b/Faktura_Gruppe5/src/model/Artikel.java index 02da4f1..d9d146f 100644 --- a/Faktura_Gruppe5/src/model/Artikel.java +++ b/Faktura_Gruppe5/src/model/Artikel.java @@ -7,6 +7,7 @@ public class Artikel { private String bezeichnung; private double nettopreis; private double mehrwertsteuersatz; + private double bruttopreis; // Konstruktor public Artikel(String einheit, String bezeichnung, double nettopreis, double mehrwertsteuersatz) { @@ -15,28 +16,27 @@ public class Artikel { this.bezeichnung = bezeichnung; this.nettopreis = nettopreis; this.mehrwertsteuersatz = mehrwertsteuersatz; + this.bruttopreis = berechneBruttopreis(nettopreis, mehrwertsteuersatz); } - + public Artikel(int artikelnummer) { this.artikelnummer = artikelnummer; } - - // Leerer Konstruktor public Artikel() { this.artikelnummer = ++aktuelleArtikelnummer; // Vergabe der Artikelnummer und Inkrement } - - public void setArtikelnummer(int artikelnummer) { - this.artikelnummer = artikelnummer; - } // Getter und Setter public int getArtikelnummer() { return artikelnummer; } + public void setArtikelnummer(int artikelnummer) { + this.artikelnummer = artikelnummer; + } + public String getEinheit() { return einheit; } @@ -59,6 +59,7 @@ public class Artikel { public void setNettopreis(double nettopreis) { this.nettopreis = nettopreis; + this.bruttopreis = berechneBruttopreis(nettopreis, mehrwertsteuersatz); // Update bruttopreis } public double getMehrwertsteuersatz() { @@ -67,6 +68,20 @@ public class Artikel { public void setMehrwertsteuersatz(double mehrwertsteuersatz) { this.mehrwertsteuersatz = mehrwertsteuersatz; + this.bruttopreis = berechneBruttopreis(nettopreis, mehrwertsteuersatz); // Update bruttopreis + } + + public double getBruttopreis() { + return bruttopreis; + } + + public void setBruttopreis(double bruttopreis) { + this.bruttopreis = bruttopreis; + } + + // Methode zur Berechnung des Bruttopreises + private double berechneBruttopreis(double nettopreis, double mehrwertsteuersatz) { + return nettopreis + (nettopreis * mehrwertsteuersatz / 100); } // Methode zum Anzeigen der Artikeldaten @@ -76,5 +91,6 @@ public class Artikel { System.out.println("Bezeichnung: " + bezeichnung); System.out.println("Nettopreis: " + nettopreis); System.out.println("Mehrwertsteuersatz: " + mehrwertsteuersatz); + System.out.println("Bruttopreis: " + bruttopreis); } } diff --git a/Faktura_Gruppe5/src/model/Auftragsbestaetigung.java b/Faktura_Gruppe5/src/model/Auftragsbestaetigung.java new file mode 100644 index 0000000..6d01c7d --- /dev/null +++ b/Faktura_Gruppe5/src/model/Auftragsbestaetigung.java @@ -0,0 +1,53 @@ +package model; + +import java.util.Date; + +public class Auftragsbestaetigung { + private static int aktuelleAuftragsnummer = 0; + private int auftragsnummer; + private int auftragsdatum; + private Angebot angebot; + + public Auftragsbestaetigung() { +// this.auftragsnummer = ++aktuelleAuftragsnummer; + // this.auftragsdatum = new Date(); + } + + public Auftragsbestaetigung(int auftragsnummer, Angebot angebot,int datum) { + this.auftragsnummer = auftragsnummer; + + this.auftragsdatum = datum; + this.angebot = angebot; + } + + public int getAuftragsnummer() { + return auftragsnummer; + } + + public void setAuftragsnummer(int auftragsnummer) { + this.auftragsnummer = auftragsnummer; + } + + public int getAuftragsdatum() { + return auftragsdatum; + } + + public void setAuftragsdatum(int auftragsdatum) { + this.auftragsdatum = auftragsdatum; + } + + public Angebot getAngebot() { + return angebot; + } + + public void setAngebot(Angebot angebot) { + this.angebot = angebot; + } + + public void anzeigen() { + System.out.println("Auftragsnummer: " + auftragsnummer); + System.out.println("Auftragsdatum: " + auftragsdatum); + System.out.println("Angebot:"); + angebot.anzeigen(); + } +} diff --git a/Faktura_Gruppe5/src/model/Firmenstammdaten.java b/Faktura_Gruppe5/src/model/Firmenstammdaten.java index 0bfef33..e4edeb4 100644 --- a/Faktura_Gruppe5/src/model/Firmenstammdaten.java +++ b/Faktura_Gruppe5/src/model/Firmenstammdaten.java @@ -3,10 +3,7 @@ package model; public class Firmenstammdaten { private String firmenname; private String inhaber; - private String strasse; - private String plz; - private String stadt; - private String land; + private Anschrift anschrift; // Verwendung der Anschrift-Klasse private String telefon; private String mobilnummer; private String telefax; @@ -21,54 +18,115 @@ public class Firmenstammdaten { // Getter und Setter für alle Attribute - public String getFirmenname() { return firmenname; } - public void setFirmenname(String firmenname) { this.firmenname = firmenname; } + public String getFirmenname() { + return firmenname; + } - public String getInhaber() { return inhaber; } - public void setInhaber(String inhaber) { this.inhaber = inhaber; } + public void setFirmenname(String firmenname) { + this.firmenname = firmenname; + } - public String getStrasse() { return strasse; } - public void setStrasse(String strasse) { this.strasse = strasse; } + public String getInhaber() { + return inhaber; + } - public String getPlz() { return plz; } - public void setPlz(String plz) { this.plz = plz; } + public void setInhaber(String inhaber) { + this.inhaber = inhaber; + } - public String getStadt() { return stadt; } - public void setStadt(String stadt) { this.stadt = stadt; } + public Anschrift getAnschrift() { + return anschrift; + } - public String getLand() { return land; } - public void setLand(String land) { this.land = land; } + public void setAnschrift(Anschrift anschrift) { + this.anschrift = anschrift; + } - public String getTelefon() { return telefon; } - public void setTelefon(String telefon) { this.telefon = telefon; } + public String getTelefon() { + return telefon; + } - public String getMobilnummer() { return mobilnummer; } - public void setMobilnummer(String mobilnummer) { this.mobilnummer = mobilnummer; } + public void setTelefon(String telefon) { + this.telefon = telefon; + } - public String getTelefax() { return telefax; } - public void setTelefax(String telefax) { this.telefax = telefax; } + public String getMobilnummer() { + return mobilnummer; + } - public String getEmail() { return email; } - public void setEmail(String email) { this.email = email; } + public void setMobilnummer(String mobilnummer) { + this.mobilnummer = mobilnummer; + } - public String getWebseite() { return webseite; } - public void setWebseite(String webseite) { this.webseite = webseite; } + public String getTelefax() { + return telefax; + } - public String getUmsatzsteuerIdNummer() { return umsatzsteuerIdNummer; } - public void setUmsatzsteuerIdNummer(String umsatzsteuerIdNummer) { this.umsatzsteuerIdNummer = umsatzsteuerIdNummer; } + public void setTelefax(String telefax) { + this.telefax = telefax; + } - public String getFinanzamt() { return finanzamt; } - public void setFinanzamt(String finanzamt) { this.finanzamt = finanzamt; } + public String getEmail() { + return email; + } - public String getBankname() { return bankname; } - public void setBankname(String bankname) { this.bankname = bankname; } + public void setEmail(String email) { + this.email = email; + } - public String getIban() { return iban; } - public void setIban(String iban) { this.iban = iban; } + public String getWebseite() { + return webseite; + } - public String getBic() { return bic; } - public void setBic(String bic) { this.bic = bic; } + public void setWebseite(String webseite) { + this.webseite = webseite; + } - public String getGlaeubigerID() { return glaeubigerID; } - public void setGlaeubigerID(String glaeubigerID) { this.glaeubigerID = glaeubigerID; } + public String getUmsatzsteuerIdNummer() { + return umsatzsteuerIdNummer; + } + + public void setUmsatzsteuerIdNummer(String umsatzsteuerIdNummer) { + this.umsatzsteuerIdNummer = umsatzsteuerIdNummer; + } + + public String getFinanzamt() { + return finanzamt; + } + + public void setFinanzamt(String finanzamt) { + this.finanzamt = finanzamt; + } + + public String getBankname() { + return bankname; + } + + public void setBankname(String bankname) { + this.bankname = bankname; + } + + public String getIban() { + return iban; + } + + public void setIban(String iban) { + this.iban = iban; + } + + public String getBic() { + return bic; + } + + public void setBic(String bic) { + this.bic = bic; + } + + public String getGlaeubigerID() { + return glaeubigerID; + } + + public void setGlaeubigerID(String glaeubigerID) { + this.glaeubigerID = glaeubigerID; + } } diff --git a/Faktura_Gruppe5/src/model/Kunde.java b/Faktura_Gruppe5/src/model/Kunde.java index bcc5cb7..601af9d 100644 --- a/Faktura_Gruppe5/src/model/Kunde.java +++ b/Faktura_Gruppe5/src/model/Kunde.java @@ -4,15 +4,14 @@ public class Kunde { private static int aktuelleKundennummer = 0; // Statische Variable für fortlaufende Kundennummer private int kundennummer; private String name; - private String anschrift; - // Straße - PLZ - Ort + private Anschrift anschrift; private String email; private String telefonnummer; private boolean istKleinunternehmer; private String ansprechpartner; // Konstruktor - public Kunde(String name, String anschrift, String email, String telefonnummer, boolean istKleinunternehmer, + public Kunde(String name, Anschrift anschrift, String email, String telefonnummer, boolean istKleinunternehmer, String ansprechpartner) { this.kundennummer = ++aktuelleKundennummer; // Vergabe der Kundennummer und Inkrement this.name = name; @@ -49,11 +48,11 @@ public class Kunde { this.name = name; } - public String getAnschrift() { + public Anschrift getAnschrift() { return anschrift; } - public void setAnschrift(String anschrift) { + public void setAnschrift(Anschrift anschrift) { this.anschrift = anschrift; } @@ -93,7 +92,10 @@ public class Kunde { public void anzeigen() { System.out.println("Kundennummer: " + kundennummer); System.out.println("Name: " + name); - System.out.println("Anschrift: " + anschrift); + System.out.println("Anschrift: "); + System.out.println(" Straße: " + anschrift.getStrasse()); + System.out.println(" PLZ: " + anschrift.getPlz()); + System.out.println(" Ort: " + anschrift.getOrt()); System.out.println("Email: " + email); System.out.println("Telefonnummer: " + telefonnummer); System.out.println("Kleinunternehmer: " + (istKleinunternehmer ? "Ja" : "Nein")); diff --git a/Faktura_Gruppe5/src/model/Lieferschein.java b/Faktura_Gruppe5/src/model/Lieferschein.java new file mode 100644 index 0000000..172c5aa --- /dev/null +++ b/Faktura_Gruppe5/src/model/Lieferschein.java @@ -0,0 +1,76 @@ +package model; + +import java.util.Date; +import java.util.List; + +public class Lieferschein { + private static int aktuelleLieferscheinnummer = 0; + private int lieferscheinnummer; + private int ausstellungsdatum; + private String bankinformationen; + private Kunde kunde; + private Angebot angebot; + + public Lieferschein() { + + } + + public int getLieferscheinnummer() { + return lieferscheinnummer; + } + + public int getAusstellungsdatum() { + return ausstellungsdatum; + } + + public void setAusstellungsdatum(int ausstellungsdatum) { + this.ausstellungsdatum = ausstellungsdatum; + } + + public void setLieferscheinnummer(int lieferscheinnummer) { + this.lieferscheinnummer = lieferscheinnummer; + } + + public void setBankinformationen(String bankinformationen) { + this.bankinformationen = bankinformationen; + } + + public void setKunde(Kunde kunde) { + this.kunde = kunde; + } + + + + public String getBankinformationen() { + return bankinformationen; + } + + public Kunde getKunde() { + return kunde; + } + + + + public Angebot getAngebot() { + return angebot; + } + + public void setAngebot(Angebot angebot) { + this.angebot = angebot; + } + + public void anzeigen() { + System.out.println("Lieferscheinnummer: " + lieferscheinnummer); + System.out.println("Ausstellungsdatum: " + ausstellungsdatum); + System.out.println("Bankinformationen: " + bankinformationen); + System.out.println("Kunde:"); + kunde.anzeigen(); + + System.out.println("Artikel:"); + for (int i = 0; i < angebot.getArtikelListe().size(); i++) { + System.out.println(" Artikel: " + angebot.getArtikelListe().get(i).getBezeichnung()); + System.out.println(" Menge: " + angebot.getMenge().get(i)); + System.out.println(" --------------------------------------"); + } + } +} diff --git a/Faktura_Gruppe5/src/model/Rechnung.java b/Faktura_Gruppe5/src/model/Rechnung.java new file mode 100644 index 0000000..336b31c --- /dev/null +++ b/Faktura_Gruppe5/src/model/Rechnung.java @@ -0,0 +1,111 @@ +package model; + +import java.util.Date; +import java.util.List; + +public class Rechnung { + private static int aktuelleRechnungsnummer = 0; + private int rechnungsnummer; + private int rechnungsdatum; + private String lieferart; + private int zahlungsfrist; + private String firmeninformationen; + private Kunde kunde; + private Angebot angebot; + private String bankinformationen; + + public Rechnung(Lieferschein lieferschein, String lieferart, Date zahlungsfrist, String firmeninformationen) { + this.rechnungsnummer = ++aktuelleRechnungsnummer; + this.lieferart = lieferart; + this.firmeninformationen = firmeninformationen; + this.kunde = lieferschein.getKunde(); + this.angebot=lieferschein.getAngebot(); + this.bankinformationen = lieferschein.getBankinformationen(); + } + + public Rechnung() { + + } + + public Angebot getAngebot() { + return angebot; + } + + public void setAngebot(Angebot angebot) { + this.angebot = angebot; + } + + public void setRechnungsnummer(int rechnungsnummer) { + this.rechnungsnummer = rechnungsnummer; + } + + public void setLieferart(String lieferart) { + this.lieferart = lieferart; + } + + public void setZahlungsfrist(int zahlungsfrist) { + this.zahlungsfrist = zahlungsfrist; + } + + public void setFirmeninformationen(String firmeninformationen) { + this.firmeninformationen = firmeninformationen; + } + + public void setKunde(Kunde kunde) { + this.kunde = kunde; + } + + public void setBankinformationen(String bankinformationen) { + this.bankinformationen = bankinformationen; + } + + public int getRechnungsnummer() { + return rechnungsnummer; + } + + public int getRechnungsdatum() { + return rechnungsdatum; + } + + public void setRechnungsdatum(int rechnungsdatum) { + this.rechnungsdatum = rechnungsdatum; + } + + public String getLieferart() { + return lieferart; + } + + public int getZahlungsfrist() { + return zahlungsfrist; + } + + public String getFirmeninformationen() { + return firmeninformationen; + } + + public Kunde getKunde() { + return kunde; + } + + public String getBankinformationen() { + return bankinformationen; + } + + public void anzeigen() { + System.out.println("Rechnungsnummer: " + rechnungsnummer); + System.out.println("Rechnungsdatum: " + rechnungsdatum); + System.out.println("Lieferart: " + lieferart); + System.out.println("Zahlungsfrist: " + zahlungsfrist); + System.out.println("Firmeninformationen: " + firmeninformationen); + System.out.println("Bankinformationen: " + bankinformationen); + System.out.println("Kunde:"); + kunde.anzeigen(); + + System.out.println("Artikel:"); + for (int i = 0; i < angebot.getArtikelListe().size(); i++) { + System.out.println(" Artikel: " + angebot.getArtikelListe().get(i).getBezeichnung()); + System.out.println(" Menge: " + angebot.getMenge().get(i)); + System.out.println(" --------------------------------------"); + } + } +} diff --git a/Faktura_Gruppe5/src/model/Wertschoepfungskette.java b/Faktura_Gruppe5/src/model/Wertschoepfungskette.java new file mode 100644 index 0000000..a8b191e --- /dev/null +++ b/Faktura_Gruppe5/src/model/Wertschoepfungskette.java @@ -0,0 +1,61 @@ +package model; + +import java.util.Date; + +public class Wertschoepfungskette { + private Angebot angebot; + private Auftragsbestaetigung auftragsbestaetigung; + private Lieferschein lieferschein; + private Rechnung rechnung; + + public Wertschoepfungskette(Angebot angebot) { + this.angebot =angebot; + } + + public void setAngebot(Angebot angebot) { + this.angebot = angebot; + } + + public void setAuftragsbestaetigung(Auftragsbestaetigung auftragsbestaetigung) { + this.auftragsbestaetigung = auftragsbestaetigung; + } + + public void setLieferschein(Lieferschein lieferschein) { + this.lieferschein = lieferschein; + } + + public void setRechnung(Rechnung rechnung) { + this.rechnung = rechnung; + } + + public void zeigeStatus() { + if (this.angebot != null) { + System.out.println("Status: Angebot erstellt"); + } + if (this.auftragsbestaetigung != null) { + System.out.println("Status: Auftragsbestätigung erstellt"); + } + if (this.lieferschein != null) { + System.out.println("Status: Lieferschein erstellt"); + } + if (this.rechnung != null) { + System.out.println("Status: Rechnung erstellt"); + } + } + + public Angebot getAngebot() { + return angebot; + } + + public Auftragsbestaetigung getAuftragsbestaetigung() { + return auftragsbestaetigung; + } + + public Lieferschein getLieferschein() { + return lieferschein; + } + + public Rechnung getRechnung() { + return rechnung; + } +} diff --git a/Faktura_Gruppe5/src/view/StartUpMenue.java b/Faktura_Gruppe5/src/view/StartUpMenue.java index 1080911..dd95a43 100644 --- a/Faktura_Gruppe5/src/view/StartUpMenue.java +++ b/Faktura_Gruppe5/src/view/StartUpMenue.java @@ -2,27 +2,33 @@ package view; import java.util.Scanner; -import controller.ArtikelController; -import controller.KundenController; +import controller.AuftragsbestaetigungController; +import controller.FirmenstammdatenController; +import controller.LieferscheinController; import controller.MainController; +import controller.RechnungController; +import controller.WertschoepfungsketteController; +import model.Angebot; import model.Artikel; +import model.Firmenstammdaten; import model.Kunde; +import model.Wertschoepfungskette; public class StartUpMenue { - - private MainController mainController; - - public StartUpMenue(MainController mainController) { - this.mainController = mainController; - this.showMenu(); - - } + + private MainController mainController; + + public StartUpMenue(MainController mainController) { + this.mainController = mainController; + + this.showMenu(); + } public void showMenu() { Scanner scanner = new Scanner(System.in); - + this.mainController.getFirmenstammdatenController().checkForCompanyData(scanner); - + int choice = 0; while (choice != 9) { @@ -32,37 +38,123 @@ public class StartUpMenue { System.out.println("2. Kundenstammdaten ansehen"); System.out.println("3. Artikel anlegen"); System.out.println("4. Artikelstammdaten ansehen"); + System.out.println("5. Angebot erstellen"); + System.out.println("6. Angebot/Wertschöpfungskette anzeigen"); System.out.println("9. Programm beenden"); try { choice = Integer.parseInt(scanner.nextLine()); switch (choice) { case 1: - Kunde kunde = new Kunde(); - - this.mainController.getKundenController().eingabeDaten(kunde, scanner); - this.mainController.getKundenController().speichereAlsXML(kunde); + Kunde kunde = new Kunde(); + this.mainController.getKundenController().eingabeDaten(kunde, scanner); + this.mainController.getKundenController().speichereAlsXML(kunde); break; case 2: - System.out.println("Kundennummer eingeben:"); - int kundenWahl = Integer.parseInt(scanner.nextLine()); - Kunde kunde1 = this.mainController.getKundenController().leseAusXML(kundenWahl); - kunde1.anzeigen(); - + System.out.println("Kundennummer eingeben:"); + int kundenWahl = Integer.parseInt(scanner.nextLine()); + Kunde kunde1 = this.mainController.getKundenController().leseAusXML(kundenWahl); + kunde1.anzeigen(); break; case 3: - Artikel artikel = new Artikel(); - - this.mainController.getArtikelController().eingabeDaten(artikel, scanner); - this.mainController.getArtikelController().speichereAlsXML(artikel); + Artikel artikel = new Artikel(); + this.mainController.getArtikelController().eingabeDaten(artikel, scanner); + this.mainController.getArtikelController().speichereAlsXML(artikel); break; case 4: - System.out.println("Artikelnummer eingeben:"); - int artikelWahl = Integer.parseInt(scanner.nextLine()); - Artikel artikel1 = this.mainController.getArtikelController().leseAusXML(artikelWahl); - artikel1.anzeigen(); -// MainController.viewArticleData(); + System.out.println("Artikelnummer eingeben:"); + int artikelWahl = Integer.parseInt(scanner.nextLine()); + Artikel artikel1 = this.mainController.getArtikelController().leseAusXML(artikelWahl); + artikel1.anzeigen(); break; + case 5: + Angebot angebot = this.mainController.getAngebotController().erstelleAngebot(); + this.mainController.getWertschoepfungsketteController().erstelleWertschoepfungskette(angebot); + break; + case 6: + System.out.println("Angebotsnummer eingeben:"); + int angebotsNummer = Integer.parseInt(scanner.nextLine()); + Wertschoepfungskette wertschoepfungskette = this.mainController.getWertschoepfungsketteController().leseAusXML(angebotsNummer); + if (wertschoepfungskette != null) { + wertschoepfungskette.zeigeStatus(); + int choice1=0; + while(choice1!=9) { + System.out.println("Bitte wählen Sie eine Option:"); + System.out.println("1. Angebot anzeigen"); + if(wertschoepfungskette.getAuftragsbestaetigung()!= null) { + System.out.println("2. Auftragsbestätigung ansehen"); + } + else { + System.out.println("2. Auftragsbestätigung anlegen"); + } + if(wertschoepfungskette.getLieferschein()!= null) { + System.out.println("3. Lieferschein ansehen"); + } + else { + System.out.println("3. Lieferschein anlegen"); + } + if(wertschoepfungskette.getRechnung()!= null) { + System.out.println("4. Rechnung ansehen"); + } + else { + System.out.println("4. Rechnung anlegen"); + } + + System.out.println("9. Zurück zum Hauptmenü"); + + + choice1 = Integer.parseInt(scanner.nextLine()); + + switch(choice1) { + case 1: + wertschoepfungskette.getAngebot().anzeigen(); + break; + + case 2: + if(wertschoepfungskette.getAuftragsbestaetigung()!= null) { + wertschoepfungskette.getAuftragsbestaetigung().anzeigen(); + } + else { + AuftragsbestaetigungController auftragsbestaetigungController = new AuftragsbestaetigungController(); + wertschoepfungskette.setAuftragsbestaetigung(auftragsbestaetigungController.erstelleAuftragsbestaetigung(wertschoepfungskette.getAngebot())); + this.mainController.getWertschoepfungsketteController().speichereAlsXML(wertschoepfungskette); + } + break; + + case 3: + if(wertschoepfungskette.getLieferschein()!= null) { + wertschoepfungskette.getLieferschein().anzeigen(); + } + else { + LieferscheinController lieferscheinController = new LieferscheinController(); + FirmenstammdatenController firmenstammdaten = new FirmenstammdatenController(); + wertschoepfungskette.setLieferschein(lieferscheinController.erstelleLieferschein(wertschoepfungskette.getAngebot(),firmenstammdaten.leseAusXML())); + this.mainController.getWertschoepfungsketteController().speichereAlsXML(wertschoepfungskette); + } + break; + + case 4: + if(wertschoepfungskette.getRechnung()!= null) { + wertschoepfungskette.getRechnung().anzeigen(); + } + else { + RechnungController rechnungController = new RechnungController(); + FirmenstammdatenController firmenstammdaten = new FirmenstammdatenController(); + wertschoepfungskette.setRechnung(rechnungController.erstelleRechnung(wertschoepfungskette.getAngebot(),firmenstammdaten.leseAusXML())); + this.mainController.getWertschoepfungsketteController().speichereAlsXML(wertschoepfungskette); + } + break; + case 9: + System.out.println("Zurück um Hauptmenü"); + break; + + } + + } + } else { + System.out.println("Angebot nicht gefunden."); + } + break; case 9: System.out.println("Programm wird beendet."); break;