Grundbaustein des User Interface
parent
50cb027cbe
commit
e44f710161
|
|
@ -0,0 +1,2 @@
|
|||
Ali,12.01.2025,20:00,2
|
||||
,,,
|
||||
|
|
@ -1,28 +1,2 @@
|
|||
ID: aa9888b3-148a-4866-b404-7f9dc262153b
|
||||
Tisch Nummer: 1
|
||||
Bestellte Gerichte:
|
||||
- Cheeseburger
|
||||
|
||||
Zeit: 20:00
|
||||
--------------------------
|
||||
ID: 47856861-c7fc-4fb7-9366-174851fb1f46
|
||||
Tisch Nummer: 01
|
||||
Bestellte Gerichte:
|
||||
- Cheeseburger
|
||||
|
||||
Zeit: 16:13
|
||||
--------------------------
|
||||
ID: 004b2f19-5c8f-47bf-9a8d-38ee515f4526
|
||||
Tisch Nummer: 2
|
||||
Bestellte Gerichte:
|
||||
|
||||
Zeit: 15:47
|
||||
--------------------------
|
||||
ID: 3aa58523-b89b-480f-a486-8348f4e3381d
|
||||
Tisch Nummer: 1
|
||||
Bestellte Gerichte:
|
||||
- Cheeseburger
|
||||
- Double Meat Burger
|
||||
|
||||
Zeit: 15:47
|
||||
--------------------------
|
||||
01,Dima,Cheeseburger, Ramen,2,100€
|
||||
02,Ali,Ramen,2
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
1,Abbas,15:30
|
||||
1,Dimimtry,18:00
|
||||
1,Ariminho,20:00
|
||||
2,Ali und Arim,19:00
|
||||
1,Ilinho,13:30
|
||||
|
|
@ -44,7 +44,7 @@ class SystemController {
|
|||
}
|
||||
}
|
||||
|
||||
private User authenticate(String username, String password) {
|
||||
User authenticate(String username, String password) {
|
||||
if (users.containsKey(username) && users.get(username).password.equals(password)) {
|
||||
return users.get(username);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
Ali,Küche,15.000€
|
||||
|
|
@ -1,7 +1,2 @@
|
|||
Nudeln,150
|
||||
Soße,100
|
||||
Brot,100
|
||||
Tomaten,200
|
||||
Salat,260
|
||||
Käse,100
|
||||
Fleisch,200
|
||||
Brot,100,10
|
||||
Tomaten,1000,10
|
||||
|
|
|
|||
|
|
@ -0,0 +1,92 @@
|
|||
package userinterface;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import java.awt.*;
|
||||
import java.io.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class InventoryPanel extends JPanel {
|
||||
private DefaultTableModel tableModel;
|
||||
private JTable table;
|
||||
private List<String[]> stockItems;
|
||||
private final String filePath = "src/stock.txt";
|
||||
|
||||
public InventoryPanel(JFrame frame, JPanel mainPanel) {
|
||||
this.setLayout(new BorderLayout());
|
||||
JLabel label = new JLabel("Bestand verwalten", SwingConstants.CENTER);
|
||||
label.setFont(new Font("Arial", Font.BOLD, 24));
|
||||
this.add(label, BorderLayout.NORTH);
|
||||
|
||||
// Tabelle vorbereiten
|
||||
String[] columns = {"Produkt", "Menge"};
|
||||
tableModel = new DefaultTableModel(columns, 0);
|
||||
table = new JTable(tableModel);
|
||||
loadStock();
|
||||
JScrollPane scrollPane = new JScrollPane(table);
|
||||
this.add(scrollPane, BorderLayout.CENTER);
|
||||
|
||||
// Steuerpanel unten
|
||||
JPanel controlPanel = new JPanel();
|
||||
JButton refreshButton = new JButton("Aktualisieren");
|
||||
JButton backButton = new JButton("Zurück");
|
||||
controlPanel.add(refreshButton);
|
||||
controlPanel.add(backButton);
|
||||
this.add(controlPanel, BorderLayout.SOUTH);
|
||||
|
||||
// ActionListener für Buttons
|
||||
refreshButton.addActionListener(e -> loadStock());
|
||||
backButton.addActionListener(e -> switchPanel(frame, mainPanel));
|
||||
}
|
||||
|
||||
private void switchPanel(JFrame frame, JPanel mainPanel) {
|
||||
frame.getContentPane().removeAll();
|
||||
frame.add(mainPanel, BorderLayout.CENTER);
|
||||
frame.revalidate();
|
||||
frame.repaint();
|
||||
}
|
||||
|
||||
private void loadStock() {
|
||||
stockItems = new ArrayList<>();
|
||||
tableModel.setRowCount(0);
|
||||
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
if (!line.trim().isEmpty()) {
|
||||
String[] data = line.split(",");
|
||||
if (data.length >= 2) {
|
||||
stockItems.add(data);
|
||||
tableModel.addRow(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
JOptionPane.showMessageDialog(this, "Fehler beim Laden des Bestands!", "Fehler", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateStock(String productName, int quantityUsed) {
|
||||
for (String[] item : stockItems) {
|
||||
if (item[0].equalsIgnoreCase(productName)) {
|
||||
int currentQuantity = Integer.parseInt(item[1]);
|
||||
item[1] = String.valueOf(currentQuantity - quantityUsed);
|
||||
saveStock();
|
||||
loadStock();
|
||||
return;
|
||||
}
|
||||
}
|
||||
JOptionPane.showMessageDialog(this, "Produkt nicht gefunden: " + productName, "Fehler", JOptionPane.WARNING_MESSAGE);
|
||||
}
|
||||
|
||||
private void saveStock() {
|
||||
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
|
||||
for (String[] item : stockItems) {
|
||||
writer.write(String.join(",", item));
|
||||
writer.newLine();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
JOptionPane.showMessageDialog(this, "Fehler beim Speichern des Bestands!", "Fehler", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
package userinterface;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import java.awt.*;
|
||||
import java.io.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class MainMenu {
|
||||
|
||||
public static void main(String[] args) {
|
||||
JFrame frame = new JFrame("Restaurantverwaltungssystem");
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
frame.setSize(800, 600);
|
||||
frame.setLayout(new BorderLayout());
|
||||
|
||||
JLabel headerLabel = new JLabel("Restaurantverwaltungssystem", SwingConstants.CENTER);
|
||||
headerLabel.setFont(new Font("Arial", Font.BOLD, 30));
|
||||
frame.add(headerLabel, BorderLayout.NORTH);
|
||||
|
||||
JPanel mainPanel = new JPanel();
|
||||
mainPanel.setLayout(new GridLayout(2, 3, 20, 20));
|
||||
|
||||
JButton reservierungenButton = new JButton("Reservierungen verwalten");
|
||||
JButton lagerButton = new JButton("Lagerbestand verwalten");
|
||||
JButton bestellungenButton = new JButton("Bestellungen verwalten");
|
||||
JButton personalButton = new JButton("Personal verwalten");
|
||||
JButton finanzenButton = new JButton("Finanzen verwalten");
|
||||
JButton beendenButton = new JButton("Beenden");
|
||||
|
||||
mainPanel.add(reservierungenButton);
|
||||
mainPanel.add(lagerButton);
|
||||
mainPanel.add(bestellungenButton);
|
||||
mainPanel.add(personalButton);
|
||||
mainPanel.add(finanzenButton);
|
||||
mainPanel.add(beendenButton);
|
||||
|
||||
frame.add(mainPanel, BorderLayout.CENTER);
|
||||
|
||||
reservierungenButton.addActionListener(e -> switchPanel(frame, mainPanel, new ReservationPanel(frame, mainPanel)));
|
||||
lagerButton.addActionListener(e -> switchPanel(frame, mainPanel, new InventoryPanel(frame, mainPanel)));
|
||||
bestellungenButton.addActionListener(e -> switchPanel(frame, mainPanel, new OrdersPanel(frame, mainPanel)));
|
||||
personalButton.addActionListener(e -> JOptionPane.showMessageDialog(frame, "Personal verwalten: Noch nicht implementiert."));
|
||||
finanzenButton.addActionListener(e -> JOptionPane.showMessageDialog(frame, "Finanzen verwalten: Noch nicht implementiert."));
|
||||
beendenButton.addActionListener(e -> System.exit(0));
|
||||
|
||||
frame.setVisible(true);
|
||||
}
|
||||
|
||||
private static void switchPanel(JFrame frame, JPanel mainPanel, JPanel newPanel) {
|
||||
frame.getContentPane().removeAll();
|
||||
frame.add(newPanel, BorderLayout.CENTER);
|
||||
frame.revalidate();
|
||||
frame.repaint();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,153 @@
|
|||
package userinterface;
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import java.awt.*;
|
||||
import java.io.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class OrdersPanel extends JPanel {
|
||||
private DefaultTableModel tableModel;
|
||||
private JTable table;
|
||||
private List<String[]> orders;
|
||||
private final String filePath = "src/Bestellungen.txt";
|
||||
|
||||
public OrdersPanel(JFrame frame, JPanel mainPanel) {
|
||||
this.setLayout(new BorderLayout());
|
||||
JLabel label = new JLabel("Bestellungen verwalten", SwingConstants.CENTER);
|
||||
label.setFont(new Font("Arial", Font.BOLD, 24));
|
||||
this.add(label, BorderLayout.NORTH);
|
||||
|
||||
// Tabelle vorbereiten
|
||||
String[] columns = {"Bestell-ID", "Kunde", "Artikel", "Menge"};
|
||||
tableModel = new DefaultTableModel(columns, 0);
|
||||
table = new JTable(tableModel);
|
||||
loadOrders();
|
||||
JScrollPane scrollPane = new JScrollPane(table);
|
||||
this.add(scrollPane, BorderLayout.CENTER);
|
||||
|
||||
// Steuerpanel unten
|
||||
JPanel controlPanel = new JPanel();
|
||||
JButton addButton = new JButton("Hinzufügen");
|
||||
JButton editButton = new JButton("Bearbeiten");
|
||||
JButton deleteButton = new JButton("Löschen");
|
||||
JButton backButton = new JButton("Zurück");
|
||||
controlPanel.add(addButton);
|
||||
controlPanel.add(editButton);
|
||||
controlPanel.add(deleteButton);
|
||||
controlPanel.add(backButton);
|
||||
this.add(controlPanel, BorderLayout.SOUTH);
|
||||
|
||||
// ActionListener für Buttons
|
||||
addButton.addActionListener(e -> addOrder());
|
||||
editButton.addActionListener(e -> editOrder());
|
||||
deleteButton.addActionListener(e -> deleteOrder());
|
||||
backButton.addActionListener(e -> switchPanel(frame, mainPanel));
|
||||
}
|
||||
|
||||
private void switchPanel(JFrame frame, JPanel mainPanel) {
|
||||
frame.getContentPane().removeAll();
|
||||
frame.add(mainPanel, BorderLayout.CENTER);
|
||||
frame.revalidate();
|
||||
frame.repaint();
|
||||
}
|
||||
|
||||
private void loadOrders() {
|
||||
orders = new ArrayList<>();
|
||||
tableModel.setRowCount(0);
|
||||
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
if (!line.trim().isEmpty()) {
|
||||
String[] data = line.split(",");
|
||||
if (data.length >= 4) {
|
||||
orders.add(data);
|
||||
tableModel.addRow(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
JOptionPane.showMessageDialog(this, "Fehler beim Laden der Bestellungen!", "Fehler", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
|
||||
private void saveOrders() {
|
||||
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
|
||||
for (String[] order : orders) {
|
||||
writer.write(String.join(",", order));
|
||||
writer.newLine();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
JOptionPane.showMessageDialog(this, "Fehler beim Speichern der Bestellungen!", "Fehler", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
|
||||
private void addOrder() {
|
||||
JTextField idField = new JTextField();
|
||||
JTextField customerField = new JTextField();
|
||||
JTextField itemField = new JTextField();
|
||||
JTextField quantityField = new JTextField();
|
||||
|
||||
Object[] fields = {
|
||||
"Bestell-ID:", idField,
|
||||
"Kunde:", customerField,
|
||||
"Artikel:", itemField,
|
||||
"Menge:", quantityField
|
||||
};
|
||||
|
||||
int option = JOptionPane.showConfirmDialog(this, fields, "Bestellung hinzufügen", JOptionPane.OK_CANCEL_OPTION);
|
||||
if (option == JOptionPane.OK_OPTION) {
|
||||
String[] order = {idField.getText(), customerField.getText(), itemField.getText(), quantityField.getText()};
|
||||
orders.add(order);
|
||||
tableModel.addRow(order);
|
||||
saveOrders();
|
||||
}
|
||||
}
|
||||
|
||||
private void editOrder() {
|
||||
int selectedRow = table.getSelectedRow();
|
||||
if (selectedRow == -1) {
|
||||
JOptionPane.showMessageDialog(this, "Bitte wählen Sie eine Bestellung aus!", "Warnung", JOptionPane.WARNING_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
String[] order = orders.get(selectedRow);
|
||||
|
||||
JTextField idField = new JTextField(order[0]);
|
||||
JTextField customerField = new JTextField(order[1]);
|
||||
JTextField itemField = new JTextField(order[2]);
|
||||
JTextField quantityField = new JTextField(order[3]);
|
||||
|
||||
Object[] fields = {
|
||||
"Bestell-ID:", idField,
|
||||
"Kunde:", customerField,
|
||||
"Artikel:", itemField,
|
||||
"Menge:", quantityField
|
||||
};
|
||||
|
||||
int option = JOptionPane.showConfirmDialog(this, fields, "Bestellung bearbeiten", JOptionPane.OK_CANCEL_OPTION);
|
||||
if (option == JOptionPane.OK_OPTION) {
|
||||
String[] updatedOrder = {idField.getText(), customerField.getText(), itemField.getText(), quantityField.getText()};
|
||||
orders.set(selectedRow, updatedOrder);
|
||||
tableModel.removeRow(selectedRow);
|
||||
tableModel.insertRow(selectedRow, updatedOrder);
|
||||
saveOrders();
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteOrder() {
|
||||
int selectedRow = table.getSelectedRow();
|
||||
if (selectedRow == -1) {
|
||||
JOptionPane.showMessageDialog(this, "Bitte wählen Sie eine Bestellung aus!", "Warnung", JOptionPane.WARNING_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
int option = JOptionPane.showConfirmDialog(this, "Möchten Sie diese Bestellung wirklich löschen?", "Bestätigung", JOptionPane.YES_NO_OPTION);
|
||||
if (option == JOptionPane.YES_OPTION) {
|
||||
orders.remove(selectedRow);
|
||||
tableModel.removeRow(selectedRow);
|
||||
saveOrders();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,153 @@
|
|||
package userinterface;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import java.awt.*;
|
||||
import java.io.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ReservationPanel extends JPanel {
|
||||
private DefaultTableModel tableModel;
|
||||
private JTable table;
|
||||
private List<String[]> reservations;
|
||||
private final String filePath = "src/Reservations.txt";
|
||||
|
||||
public ReservationPanel(JFrame frame, JPanel mainPanel) {
|
||||
this.setLayout(new BorderLayout());
|
||||
JLabel label = new JLabel("Reservierungen verwalten", SwingConstants.CENTER);
|
||||
label.setFont(new Font("Arial", Font.BOLD, 24));
|
||||
this.add(label, BorderLayout.NORTH);
|
||||
|
||||
// Tabelle vorbereiten
|
||||
String[] columns = {"Name", "Datum", "Zeit", "Personen"};
|
||||
tableModel = new DefaultTableModel(columns, 0);
|
||||
table = new JTable(tableModel);
|
||||
loadReservations();
|
||||
JScrollPane scrollPane = new JScrollPane(table);
|
||||
this.add(scrollPane, BorderLayout.CENTER);
|
||||
|
||||
// Steuerpanel unten
|
||||
JPanel controlPanel = new JPanel();
|
||||
JButton addButton = new JButton("Hinzufügen");
|
||||
JButton editButton = new JButton("Bearbeiten");
|
||||
JButton deleteButton = new JButton("Stornieren");
|
||||
JButton backButton = new JButton("Zurück");
|
||||
controlPanel.add(addButton);
|
||||
controlPanel.add(editButton);
|
||||
controlPanel.add(deleteButton);
|
||||
controlPanel.add(backButton);
|
||||
this.add(controlPanel, BorderLayout.SOUTH);
|
||||
|
||||
// ActionListener für Buttons
|
||||
addButton.addActionListener(e -> addReservation());
|
||||
editButton.addActionListener(e -> editReservation());
|
||||
deleteButton.addActionListener(e -> deleteReservation());
|
||||
backButton.addActionListener(e -> switchPanel(frame, mainPanel));
|
||||
}
|
||||
|
||||
private void switchPanel(JFrame frame, JPanel mainPanel) {
|
||||
frame.getContentPane().removeAll();
|
||||
frame.add(mainPanel, BorderLayout.CENTER);
|
||||
frame.revalidate();
|
||||
frame.repaint();
|
||||
}
|
||||
|
||||
private void loadReservations() {
|
||||
reservations = new ArrayList<>();
|
||||
tableModel.setRowCount(0);
|
||||
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
if (!line.trim().isEmpty()) {
|
||||
String[] data = line.split(",");
|
||||
if (data.length >= 4) {
|
||||
reservations.add(data);
|
||||
tableModel.addRow(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
JOptionPane.showMessageDialog(this, "Fehler beim Laden der Reservierungen!", "Fehler", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
|
||||
private void saveReservations() {
|
||||
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
|
||||
for (String[] reservation : reservations) {
|
||||
writer.write(String.join(",", reservation));
|
||||
writer.newLine();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
JOptionPane.showMessageDialog(this, "Fehler beim Speichern der Reservierungen!", "Fehler", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
|
||||
private void addReservation() {
|
||||
JTextField nameField = new JTextField();
|
||||
JTextField dateField = new JTextField();
|
||||
JTextField timeField = new JTextField();
|
||||
JTextField peopleField = new JTextField();
|
||||
|
||||
Object[] fields = {
|
||||
"Name:", nameField,
|
||||
"Datum (YYYY-MM-DD):", dateField,
|
||||
"Zeit (HH:MM):", timeField,
|
||||
"Personen:", peopleField
|
||||
};
|
||||
|
||||
int option = JOptionPane.showConfirmDialog(this, fields, "Reservierung hinzufügen", JOptionPane.OK_CANCEL_OPTION);
|
||||
if (option == JOptionPane.OK_OPTION) {
|
||||
String[] reservation = {nameField.getText(), dateField.getText(), timeField.getText(), peopleField.getText()};
|
||||
reservations.add(reservation);
|
||||
tableModel.addRow(reservation);
|
||||
saveReservations();
|
||||
}
|
||||
}
|
||||
|
||||
private void editReservation() {
|
||||
int selectedRow = table.getSelectedRow();
|
||||
if (selectedRow == -1) {
|
||||
JOptionPane.showMessageDialog(this, "Bitte wählen Sie eine Reservierung aus!", "Warnung", JOptionPane.WARNING_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
String[] reservation = reservations.get(selectedRow);
|
||||
|
||||
JTextField nameField = new JTextField(reservation[0]);
|
||||
JTextField dateField = new JTextField(reservation[1]);
|
||||
JTextField timeField = new JTextField(reservation[2]);
|
||||
JTextField peopleField = new JTextField(reservation[3]);
|
||||
|
||||
Object[] fields = {
|
||||
"Name:", nameField,
|
||||
"Datum (YYYY-MM-DD):", dateField,
|
||||
"Zeit (HH:MM):", timeField,
|
||||
"Personen:", peopleField
|
||||
};
|
||||
|
||||
int option = JOptionPane.showConfirmDialog(this, fields, "Reservierung bearbeiten", JOptionPane.OK_CANCEL_OPTION);
|
||||
if (option == JOptionPane.OK_OPTION) {
|
||||
String[] updatedReservation = {nameField.getText(), dateField.getText(), timeField.getText(), peopleField.getText()};
|
||||
reservations.set(selectedRow, updatedReservation);
|
||||
tableModel.removeRow(selectedRow);
|
||||
tableModel.insertRow(selectedRow, updatedReservation);
|
||||
saveReservations();
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteReservation() {
|
||||
int selectedRow = table.getSelectedRow();
|
||||
if (selectedRow == -1) {
|
||||
JOptionPane.showMessageDialog(this, "Bitte wählen Sie eine Reservierung aus!", "Warnung", JOptionPane.WARNING_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
int option = JOptionPane.showConfirmDialog(this, "Möchten Sie diese Reservierung wirklich stornieren?", "Bestätigung", JOptionPane.YES_NO_OPTION);
|
||||
if (option == JOptionPane.YES_OPTION) {
|
||||
reservations.remove(selectedRow);
|
||||
tableModel.removeRow(selectedRow);
|
||||
saveReservations();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
Dimitry:1234:MANAGER
|
||||
Abbas:1234:MANAGER
|
||||
Ananas Kopf:Bananenbieger:KITCHEN
|
||||
Arim:1234:MANAGER
|
||||
Dimitry:MANAGER:1234
|
||||
Abbas:MANAGER:1234
|
||||
Ananas Kopf:KITCHEN:1234
|
||||
Arim:MANAGER:1234
|
||||
|
|
|
|||
Loading…
Reference in New Issue