From 6ed93c1f9a7e818529aa1b33291fa23e9acc542c Mon Sep 17 00:00:00 2001 From: Alaa_Rifai123 Date: Thu, 16 Apr 2026 14:55:45 +0300 Subject: [PATCH] first comment --- .gitignore | 29 ++ .idea/.gitignore | 5 + .idea/misc.xml | 6 + .idea/modules.xml | 8 + manager_notes.txt | 6 + photo_2026-01-25_11-44-58.jpg | Bin 0 -> 211247 bytes production_lines.txt | 1 + products.csv | 3 + src/CEO.java | 83 ++++ src/CSV.java | 380 ++++++++++++++++ src/Controller.java | 66 +++ src/Daily_Recordings | 0 src/Daily_Recordings.java | 53 +++ src/Daily_Recordings.txt | 0 src/Daily_Recordings_2026-01-25.txt | 6 + src/ErrorLogger.java | 12 + src/Invantory.java | 318 ++++++++++++++ src/InventoryManagementFrame.java | 452 +++++++++++++++++++ src/Item.csv | 3 + src/Item.java | 83 ++++ src/LineNotes.csv | 4 + src/LoginFrame.java | 252 +++++++++++ src/Main.java | 25 ++ src/MangerFrame.java | 390 ++++++++++++++++ src/NOTFOUND.java | 5 + src/Product.csv | 8 + src/Product.java | 85 ++++ src/ProductLine.csv | 6 + src/ProductLine.java | 141 ++++++ src/ProductLineManager.java | 90 ++++ src/ProductionLinesManagementFrame.java | 561 ++++++++++++++++++++++++ src/SplashScreen.java | 124 ++++++ src/SupervisorMenuFrame.java | 136 ++++++ src/Task.csv | 6 + src/Task.java | 255 +++++++++++ src/errors.txt | 1 + src/notes.csv | 0 swing in project 3.iml | 11 + 38 files changed, 3614 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 manager_notes.txt create mode 100644 photo_2026-01-25_11-44-58.jpg create mode 100644 production_lines.txt create mode 100644 products.csv create mode 100644 src/CEO.java create mode 100644 src/CSV.java create mode 100644 src/Controller.java create mode 100644 src/Daily_Recordings create mode 100644 src/Daily_Recordings.java create mode 100644 src/Daily_Recordings.txt create mode 100644 src/Daily_Recordings_2026-01-25.txt create mode 100644 src/ErrorLogger.java create mode 100644 src/Invantory.java create mode 100644 src/InventoryManagementFrame.java create mode 100644 src/Item.csv create mode 100644 src/Item.java create mode 100644 src/LineNotes.csv create mode 100644 src/LoginFrame.java create mode 100644 src/Main.java create mode 100644 src/MangerFrame.java create mode 100644 src/NOTFOUND.java create mode 100644 src/Product.csv create mode 100644 src/Product.java create mode 100644 src/ProductLine.csv create mode 100644 src/ProductLine.java create mode 100644 src/ProductLineManager.java create mode 100644 src/ProductionLinesManagementFrame.java create mode 100644 src/SplashScreen.java create mode 100644 src/SupervisorMenuFrame.java create mode 100644 src/Task.csv create mode 100644 src/Task.java create mode 100644 src/errors.txt create mode 100644 src/notes.csv create mode 100644 swing in project 3.iml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f68d109 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +### IntelliJ IDEA ### +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..a0ccf77 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Environment-dependent path to Maven home directory +/mavenHomeManager.xml diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..0548357 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..7634a48 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/manager_notes.txt b/manager_notes.txt new file mode 100644 index 0000000..06a78fb --- /dev/null +++ b/manager_notes.txt @@ -0,0 +1,6 @@ +2025-12-23: +الجمهوؤية العربية + +2025-12-25: +الخط الاول زابط + diff --git a/photo_2026-01-25_11-44-58.jpg b/photo_2026-01-25_11-44-58.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8097a2c6a410365760ea494c61c1470e2bfea85f GIT binary patch literal 211247 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 literal 0 HcmV?d00001 diff --git a/production_lines.txt b/production_lines.txt new file mode 100644 index 0000000..193eb56 --- /dev/null +++ b/production_lines.txt @@ -0,0 +1 @@ +2025-12-23 - f diff --git a/products.csv b/products.csv new file mode 100644 index 0000000..89f6275 --- /dev/null +++ b/products.csv @@ -0,0 +1,3 @@ +id,name,materials +1,هاتف ذكي,101:2;102:1;103:1 +2,حاسوب محمول,102:1;101:3 diff --git a/src/CEO.java b/src/CEO.java new file mode 100644 index 0000000..8aa765b --- /dev/null +++ b/src/CEO.java @@ -0,0 +1,83 @@ +import java.util.ArrayList; + +public class CEO { + ProductLine k; + ProductLine u; + Invantory ss = Invantory.getInstance(); + + public CEO(ProductLine k) { + this.k = k; + } + + public CEO() { + + } + + public void addProductLine(String name) { + + ProductLine pl = new ProductLine(name); + Thread j=new Thread(pl); + j.start(); + + + CSV.writeProductLine(pl); + for (ProductLine h : ss.productesLine) { + System.out.println(h.getLineName()); + + } + } + + +public void edit(String lineName, String newStatus) throws NOTFOUND { + Invantory inv = Invantory.getInstance(); + ArrayList allLines = inv.getProductLines(); + + boolean found = false; + + for (ProductLine pl : allLines) { + if (pl.getLineName().equalsIgnoreCase(lineName)) { + pl.setEnum(newStatus); + found = true; + break; + } + } + + if (!found) { + throw new NOTFOUND("Production line not found: " + lineName); + } + + CSV.writeProductLine2(allLines); + + System.out.println("Status updated to " + newStatus + " and saved to CSV."); +} + + + + + + + + + + + + + + + + public String display() { + + StringBuilder report = new StringBuilder(); + + for (ProductLine j : ss.productesLine) { + + String line = + j.getLineName() + " " + "100%"; + + System.out.println(line); // ✅ خلي الطباعة مثل ما هي + report.append(line).append("\n"); // ✅ جمع النص + } + + return report.toString(); // ✅ رجّع النتيجة + } +} \ No newline at end of file diff --git a/src/CSV.java b/src/CSV.java new file mode 100644 index 0000000..5d5acfa --- /dev/null +++ b/src/CSV.java @@ -0,0 +1,380 @@ +import java.io.*; +import java.time.LocalDate; +import java.util.* ; +public class CSV { + File file1 = new File("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Item.csv"); + File file2 = new File("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Product.csv"); + public static void writeItem(Item item) { + try { + File file1 = new File("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Item.csv"); + BufferedWriter bw = new BufferedWriter(new FileWriter(file1, true)); + if (file1.length() == 0) { + bw.write("id,nameOfItem,category,quantity,price,theMinimumAllowed"); + bw.newLine(); + } + + bw.write(item.toString()); // ✅ + bw.newLine(); + bw.flush(); + bw.close(); + } catch (IOException e) { + String error = "An error occurred while reading the file"; + ErrorLogger.logError(error); + } + } + + public static void writeItem2(ArrayList items) { + try { + File file1 = new File("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Item.csv"); + BufferedWriter bw = new BufferedWriter(new FileWriter(file1)); + if (file1.length() == 0) { + bw.write("id,nameOfItem,category,quantity,price,theMinimumAllowed"); + bw.newLine(); + } for (Item item : items) { + bw.write(item.toString()); + bw.newLine(); + } + bw.flush(); + bw.close(); + } catch (IOException e) { + String error = "An error occurred while reading the file"; + ErrorLogger.logError(error); + } + } + + public static List readItem(String pathname) { + List items = new ArrayList<>(); + + try (BufferedReader br = new BufferedReader(new FileReader(pathname))) { + String line; + br.readLine(); + + while ((line = br.readLine()) != null) { + if (line.trim().isEmpty()) continue; + + String[] d = line.split(","); + + if (d.length != 6) continue; + + int id = Integer.parseInt(d[0].trim()); + String name = d[1].trim(); + String category = d[2].trim(); + int quantity = Integer.parseInt(d[3].trim()); + int price = Integer.parseInt(d[4].trim()); + int min = Integer.parseInt(d[5].trim()); + + Item item = new Item(id, name, price, quantity,min, category); + items.add(item); + } + + } catch (Exception e) { + ErrorLogger.logError("Error reading Item.csv"); + } + + return items; + } + + + + + + + + + + + + + + + + + + +public static void writeProduct(Product product) { + try { + File file2 = new File("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Product.csv"); + + boolean fileExists = file2.exists() && file2.length() > 0; + + BufferedWriter bw = new BufferedWriter(new FileWriter(file2, true)); + + if (!fileExists) { + bw.write("id,nameOfProduct,quantity,materials"); + bw.newLine(); + } + + StringBuilder sb = new StringBuilder(); + sb.append(product.getNumberOfProduct()).append(","); + sb.append(product.getNameOfProduct()).append(","); + sb.append(product.getQuantityOfProduct()).append(","); + + if (product.getP() != null && !product.getP().isEmpty()) { + for (Map.Entry entry : product.getP().entrySet()) { + sb.append(entry.getKey().getNameOfItem()) + .append(":") + .append(entry.getValue()) + .append(";"); + } + } + + bw.write(sb.toString()); + bw.newLine(); + bw.flush(); + bw.close(); + + } catch (IOException e) { + String error = "An error occurred while writing Product.csv"; + ErrorLogger.logError(error); + } +} + + + + + + + + + public static void writeProduct2(ArrayList products) { + File file2 = new File("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Product.csv"); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(file2)); + bw.write("id, nameOfProduct,HashMap p"); + bw.newLine(); + for (Product product : products) { + bw.write(product.toCSV()); + bw.newLine(); + } + bw.flush(); + bw.close(); + } catch (IOException e) { + String error = "An error occurred while reading the file"; + ErrorLogger.logError(error); + } + } + +public static List readProduct(String pathname) { + ArrayList products = new ArrayList<>(); + try (BufferedReader read = new BufferedReader(new FileReader(pathname))) { + read.readLine(); + Invantory inventory = Invantory.getInstance(); + + String line; + while ((line = read.readLine()) != null) { + if (line.trim().isEmpty()) continue; + + String[] d = line.split(","); + if (d.length < 4) continue; + + int id = Integer.parseInt(d[0].trim()); + String name = d[1].trim(); + int quantity = Integer.parseInt(d[2].trim()); + String materials = d[3].trim(); + + HashMap map = new HashMap<>(); + if (!materials.isEmpty()) { + String[] pairs = materials.split(";"); + for (String pair : pairs) { + if (pair.trim().isEmpty()) continue; + String[] itemParts = pair.split(":"); + if (itemParts.length < 2) continue; + Item item = inventory.searchByName(itemParts[0].trim()); + int qty = Integer.parseInt(itemParts[1].trim()); + if (item != null) map.put(item, qty); + } + } + + Product p = new Product(id, name, quantity, map); + products.add(p); + } + } catch (Exception e) { + ErrorLogger.logError("Error reading Product.csv"); + } + return products; +} + + + public static void writeProductLine(ProductLine productLine) { + try { + File file4 = new File("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\ProductLine.csv"); + BufferedWriter bw = new BufferedWriter(new FileWriter(file4, true)); + if (file4.length() == 0) { + bw.write("lineId,lineName,status"); + bw.newLine(); + } + + bw.write(productLine.toString()+ " "); + bw.newLine(); + bw.flush(); + bw.close(); + } catch (IOException e) { + String error = "An error occurred while reading the file"; + ErrorLogger.logError(error); + } + } + public static void writeProductLine2(ArrayListproductLines) { + File file4 = new File("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\ProductLine.csv"); + try(BufferedWriter bw = new BufferedWriter(new FileWriter(file4))) { + + ; + + bw.write("lineId,lineName,status"); + bw.newLine(); + for (ProductLine productLine:productLines){ + + bw.write(productLine.toString()+ " "); + bw.newLine(); + + } + + } catch (IOException e) { + String error = "An error occurred while reading the file"; + ErrorLogger.logError(error); + } + } + public static void writeLineNote(String lineName, String note) { + try { + File file = new File("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\LineNotes.csv"); + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + + if (file.length() == 0) { + bw.write("lineName,note,date"); + bw.newLine(); + } + + bw.write(lineName + "," + note.replace(",", " ") + "," + LocalDate.now()); + bw.newLine(); + bw.close(); + + } catch (IOException e) { + ErrorLogger.logError("Error writing notes file"); + } + } + + + public static List readProductLine(String pathname) { + List productLines = new ArrayList<>(); + try (BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\ProductLine.csv"))) { + String line = br.readLine(); + while ((line =br.readLine()) != null) { + if (line.trim().isEmpty() || line.startsWith("id")) { + continue; + } + String[] data = line.split(","); + try { + int id = Integer.parseInt(data[0].trim()); + String name = data[1].trim(); + String statusStr = data[2].trim(); + + ProductLine pl = new ProductLine(id, name); + pl.setEnum(statusStr); + + productLines.add(pl); + + + } catch (NumberFormatException e) { + String error = "Number format error in line"; + ErrorLogger.logError(error); + } + } + } catch (FileNotFoundException e) { + String error = "File not found"; + ErrorLogger.logError(error); + } catch (IOException e) { + String error = "An error occurred while reading the file"; + ErrorLogger.logError(error); + } + return productLines; + } + + + + + +public static void writeAllTasks(List tasks) { + String filePath = "C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Task.csv"; + File file = new File(filePath); + + try (FileWriter fw = new FileWriter(file, false); + BufferedWriter bw = new BufferedWriter(fw); + PrintWriter out = new PrintWriter(bw)) { + + out.println("number,NameOfProduct,LineName,Amount,Customer,StartDate,ExecutionDate,Status,FinishedAmount,PercentAge"); + + for (Task task : tasks) { + String productName = task.getPro() != null ? task.getPro().getNameOfProduct() : "Unknown"; + String lineName = task.getLineName() != null ? task.getLineName() : "NoLine"; + String startDate = task.getStartDate() != null ? task.getStartDate().toString() : ""; + String endDate = task.getExecutionDate() != null ? task.getExecutionDate().toString() : ""; + String status = task.getK() != null ? task.getK().toString() : "INPROGRESS"; + + out.println(String.join(",", + String.valueOf(task.getNumber()), + productName, + lineName, + String.valueOf(task.getAmount()), + task.getCustomer() != null ? task.getCustomer() : "", + startDate, + endDate, + status, + String.valueOf(task.getFinishedAmount()), + String.valueOf(task.getPercentAge()) + )); + } + + } catch (IOException e) { + ErrorLogger.logError("Error writing Task.csv"); + } +} + + +public static List readTask(String pathname) { + List tasks = new ArrayList<>(); + Invantory inv = Invantory.getInstance(); + + try (BufferedReader br = new BufferedReader(new FileReader(pathname))) { + String line = br.readLine(); + + while ((line = br.readLine()) != null) { + if (line.trim().isEmpty()) continue; + + String[] parts = line.split(","); + + if (parts.length < 8) continue; + + int id = Integer.parseInt(parts[0].trim()); + String productName = parts[1].trim(); + String lineName = parts[2].trim(); + int amount = Integer.parseInt(parts[3].trim()); + String customer = parts[4].trim(); + LocalDate startDate = !parts[5].trim().isEmpty() ? LocalDate.parse(parts[5].trim()) : LocalDate.now(); + LocalDate endDate = (parts.length > 6 && !parts[6].trim().isEmpty()) ? LocalDate.parse(parts[6].trim()) : null; + String status = parts[7].trim(); + + + int finished = (parts.length > 8) ? Integer.parseInt(parts[8].trim()) : 0; + double percent = (parts.length > 9) ? Double.parseDouble(parts[9].trim()) : 0.0; + + Product product = inv.searchAboutProductByname(productName); + if (product == null) product = new Product(-1, productName, 0, new HashMap<>()); + + Task task = new Task(id, product, amount, customer, startDate); + task.setenum(status); + task.setExecutionDate(endDate); + task.setLineName(lineName); + + + + + ProductLine l = inv.getProductLineByName(lineName); + if (l != null) task.login(l); + + tasks.add(task); + } + } catch (Exception e) { + System.out.println("❌ Error loading tasks: " + e.getMessage()); + } + return tasks; +} +} \ No newline at end of file diff --git a/src/Controller.java b/src/Controller.java new file mode 100644 index 0000000..5da0cd5 --- /dev/null +++ b/src/Controller.java @@ -0,0 +1,66 @@ +public class Controller { + + static CEO ceo = new CEO(); + Invantory invantory = Invantory.getInstance(); + + private static Controller instance; + + private Controller() { + invantory.productesLine.clear(); + invantory.productesLine.addAll( + CSV.readProductLine("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\ProductLine.csv") + ); + Invantory.loadInventory(); + + + } + + + public static Controller getInstance() { + if (instance == null) { + instance = new Controller(); + } + return instance; + } + void Edit(String name,String status) throws NOTFOUND { + ceo.edit(name,status); + } + +public Item AddItem(String nameOfItem, String category, int price, int quantity, int min) { + return invantory.AddItem(category, nameOfItem, price, quantity, min); +} + + public void Add(String lineName) { + ceo.addProductLine(lineName); + } + + public String Viow() { + return ceo.display(); + } + public void removeItemById(int itemId) throws NOTFOUND { + + Item item = Invantory.getInstance().getItem(itemId); + Invantory.getInstance().RemoveItem(item); + } + + public Item editItem( + int id, + String name, + String category, + int price, + int quantity, + int min + ) throws NOTFOUND { + + return invantory.editItem( + id, + name, + category, + price, + quantity, + min + ); + } + + +} diff --git a/src/Daily_Recordings b/src/Daily_Recordings new file mode 100644 index 0000000..e69de29 diff --git a/src/Daily_Recordings.java b/src/Daily_Recordings.java new file mode 100644 index 0000000..be97c66 --- /dev/null +++ b/src/Daily_Recordings.java @@ -0,0 +1,53 @@ +import java.io.*; +import java.time.LocalDate ; +import java.time.format.DateTimeFormatter; +public class Daily_Recordings { + Invantory i=Invantory.getInstance(); + public void Daily() { + String date = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String fileName = "C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Daily_Recordings.txt" + date + ".txt"; +// try (PrintWriter writer = new PrintWriter(new FileWriter(fileName),true)) { +// writer.println("Daily Inventory Report"); +// writer.println("Date: " + date); +// writer.println(); +// writer.println("Products"); +// for (Product p : i.general_products.values()) { +// writer.println("ID: " + p.getNumberOfProduct() + +// ", Name: " + p.getNameOfProduct() + +// ", Qty: " + p.getQuantityOfProduct()); +// } +// writer.println(); +// writer.println("Items"); +// for (Item item : i.general_items.values()) { +// writer.println("ID: " + item.getIdOfItem() + +// ", Name: " + item.getNameOfItem() + +// ", Qty: " + item.getQuantity() + +// ", Price: " + item.getPrice()); +// } +// writer.println(); +// writer.println("End of Report"); +// System.out.println("Report saved: " + fileName); +// } catch (IOException e) { +// ErrorLogger.logError("Error: " + e.getMessage()); +// } + + try (PrintWriter writer = new PrintWriter(new FileWriter(fileName, true))) { + writer.println("Daily Inventory Report"); + writer.println("Date: " + date); + writer.println(); + writer.println("Items"); + for (Item item : Invantory.getInstance().general_items.values()) { + writer.println("ID: " + item.getIdOfItem() + + ", Name: " + item.getNameOfItem() + + ", Qty: " + item.getQuantity() + + ", Price: " + item.getPrice()); + } + writer.println("End of Report"); + } catch (IOException e) { + e.printStackTrace(); + } + + + + } +} \ No newline at end of file diff --git a/src/Daily_Recordings.txt b/src/Daily_Recordings.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Daily_Recordings_2026-01-25.txt b/src/Daily_Recordings_2026-01-25.txt new file mode 100644 index 0000000..dccfd0d --- /dev/null +++ b/src/Daily_Recordings_2026-01-25.txt @@ -0,0 +1,6 @@ +Daily Inventory Report +Date: 2026-01-25 + +Items + +End of Report diff --git a/src/ErrorLogger.java b/src/ErrorLogger.java new file mode 100644 index 0000000..15297e9 --- /dev/null +++ b/src/ErrorLogger.java @@ -0,0 +1,12 @@ +import java.io.*; +public class ErrorLogger { + private static String ERROR_FILE = "C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\errors.txt"; + public static void logError(String message) { + try (PrintWriter pw = new PrintWriter(new FileWriter(ERROR_FILE, true))) { + pw.write(message); + pw.write("/n"); + } catch (IOException e) { + System.out.println("Failed to write error to file: " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/Invantory.java b/src/Invantory.java new file mode 100644 index 0000000..70c97d6 --- /dev/null +++ b/src/Invantory.java @@ -0,0 +1,318 @@ +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +public class Invantory { + static HashMap general_items = new HashMap<>(); + ArrayListproductesLine=new ArrayList<>(); + ArrayListtasks=new ArrayList<>(); + ArrayListtaskWasCancelled=new ArrayList<>(); + ArrayListgetProductesLine=new ArrayList<>(); + CSV csv; + static HashMap general_products = new HashMap<>(); + static Invantory invantory; + Item item ; + Product product; + + + +public static void loadInventory() { + Invantory instance = getInstance(); + + List items = CSV.readItem("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Item.csv"); // يفضل استخدام مسارات نسبية + general_items.clear(); + for (Item i : items) { + general_items.put(i.id, i); + } + + List products = CSV.readProduct("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Product.csv"); + general_products.clear(); + for (Product p : products) { + general_products.put(p.getNumberOfProduct(), p); + } + + instance.productesLine.clear(); + instance.productesLine.addAll(CSV.readProductLine("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\ProductLine.csv")); + + instance.tasks.clear(); + List loadedTasks = CSV.readTask("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Task.csv"); + + for (Task t : loadedTasks) { + ProductLine line = instance.getProductLineByName(t.getLineName()); + if (line != null) { + t.login(line); + } + if (!instance.tasks.contains(t)) { + instance.tasks.add(t); + } + } +} + + + + Invantory() + { + + } + public static Invantory getInstance() { + if (invantory==null) { + invantory = new Invantory(); + } + return invantory; + } + +public Item AddItem(String category, String nameOfItem, int price, int quantity, int min) { + Item item1 = new Item(category, nameOfItem, price, quantity, min); + + general_items.put(item1.getIdOfItem(), item1); + + CSV.writeItem2(new ArrayList<>(general_items.values())); + + return item1; +} + + public List getAllItems() { + return new ArrayList<>(items); + } + + + + public synchronized void increase(int itemid,int amount)throws NOTFOUND{ + Item item=general_items.get(itemid); + if (item==null) + { + String error="sorry,not found"; + ErrorLogger.logError(error); + throw new NOTFOUND(error); + } + item.setQuantity(item.getQuantity()+amount); + CSV.writeItem2(items); + System.out.println("amount"+amount+"was added"); + } + ArrayListitems=new ArrayList<>(); + ArrayListproducts=new ArrayList<>(); + + public void RemoveItem(Item item1) throws NOTFOUND { + if (!general_items.containsKey(item1.getIdOfItem())) { + throw new NOTFOUND("Item not found"); + } + + general_items.remove(item1.getIdOfItem()); + + CSV.writeItem2(new ArrayList<>(general_items.values())); + } + + + public boolean Check(Product p, int amount) { + for (Map.Entry entry : p.getP().entrySet()) { + Item l = entry.getKey(); + int requiredAmount = entry.getValue() * amount; + Item stockItem = general_items.get(l.getIdOfItem()); + if (stockItem == null || stockItem.getQuantity() < requiredAmount) { + ErrorLogger.logError("Not enough material for product"); + return false; + } + } + return true; + } + public void displayA(){ + items = (ArrayList) CSV.readItem("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Item.csv"); + + for (Item item1:items) + item1.print(); + + } + public void displayB(){ + products = (ArrayList) CSV.readProduct("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Product.csv"); + System.out.println(products.size()); + for (Product product1:products) + product1.printInfo(); + + } + + +public Item editItem( + int id, + String name, + String category, + int price, + int quantity, + int minAllowed +) throws NOTFOUND { + + Item item = general_items.get(id); + if (item == null) { + throw new NOTFOUND("Item not found"); + } + + item.setNameOfItem(name); + item.setCategory(category); + item.setPrice(price); + item.setQuantity(quantity); + item.setTheMinimumAllowed(minAllowed); + + CSV.writeItem2(new ArrayList<>(general_items.values())); + + return item; +} + + public synchronized void decrease(int id, int amount) throws NOTFOUND { + Item b = general_items.get(id); + if (b == null) { + String error = "Item " + id + " not found"; + ErrorLogger.logError(error); + throw new NOTFOUND(error); + } + if (b.getQuantity() < amount) { + String error = " Not enough quantity for item " + id; + ErrorLogger.logError(error); + throw new NOTFOUND(error); + } + b.setQuantity(b.getQuantity() - amount); + CSV.writeItem2(new ArrayList<>(general_items.values())); + + } + + public void UpdateItemQuantity(int id, int quantity) throws NOTFOUND { + Item item = general_items.get(id); + if (item != null) { + item.setQuantity(quantity); + CSV.writeItem2(new ArrayList<>(general_items.values())); + + System.out.println("The item quantity has been updated " + id + " to " + quantity); + } else { + String error = " Item " + id + " not found"; + ErrorLogger.logError(error); + throw new NOTFOUND(error); + } + } + + public Item getItem(int id) throws NOTFOUND { + Item item = general_items.get(id); + if (item == null) { + String error = " Item " + id + " not found"; + ErrorLogger.logError(error); + throw new NOTFOUND(error); + } + + return item; + } + + public Item searchByName(String name){ + + for (Item item : general_items.values()) { + if (item.getNameOfItem().equalsIgnoreCase(name)) { + return item; + } + } + String error = "Item " + name + " not found"; + ErrorLogger.logError(error); + + return null; + } + + public ListSearchByName(String name) { + return general_items.values().stream() + .filter(i -> i.getNameOfItem().toLowerCase().contains(name.toLowerCase())) + .collect(Collectors.toList()); + } + + public ListSearchByCategory(String category){ + return general_items.values().stream().filter(i->i.getCategory().toLowerCase().contains(category.toLowerCase())).collect(Collectors.toList()); + } + + public ListSearchByStatus(String status) throws NOTFOUND { + switch (status) { + case "AVAILABLE": + return general_items.values().stream().filter(i -> i.getQuantity() > 0).collect(Collectors.toList()); + case "Out_Of_Stock": + return general_items.values().stream().filter(i -> i.getQuantity() == 0).collect(Collectors.toList()); + case "BELOW_THRESHOLD": + return general_items.values().stream().filter(i -> i.getQuantity() < i.getTheMinimumAllowed()).collect(Collectors.toList()); + default: { + ErrorLogger.logError("not found any item have this status"); + throw new NOTFOUND("not found any item have this status"); + } + } + } + + public synchronized void SellProduct(int IdProduct, int Amount) throws NOTFOUND { + Product p = general_products.get(IdProduct); + if (p == null) { + String error = "Product " + IdProduct + " not found"; + ErrorLogger.logError(error); + throw new NOTFOUND(error); + } + if (p.getQuantityOfProduct() < Amount) { + String error = "Not enough quantity for product " + IdProduct; + ErrorLogger.logError(error); + throw new NOTFOUND(error); + } + p.setQuantityOfProduct(p.getQuantityOfProduct() - Amount); + System.out.println("Done"); + } + public void AddProduct(String nameOfProduct,HashMap p) { + Product product1=new Product( nameOfProduct, p); + general_products.put(product1.getNumberOfProduct(), product1); + CSV.writeProduct(product1); + } + + public Product getproduct(int id) throws NOTFOUND { + Product p = general_products.get(id); + if (p == null) { + String error = "Product " + id + " not found"; + ErrorLogger.logError(error); + throw new NOTFOUND(error); + } + return p; + } + + synchronized void IncreaseProduct(int id, int amount )throws NOTFOUND{ + Product p=general_products.get(id); + if(p==null) + throw new NOTFOUND("this is new product"); + + + p.setQuantityOfProduct( p.QuantityOfProduct+amount); + CSV.writeProduct2(products); + + } + + public Product searchAboutProductById(int i) { + for (Product k : general_products.values()) { + if (k.getNumberOfProduct() == i) + return k; + } + return null; + } + + + public Product searchAboutProductByname(String gg) { + for (Product k : general_products.values()) { + if (k.getNameOfProduct().equals(gg) ) + return k; + } + return null; + } + public ProductLine getProductLineByName(String name) { + for (ProductLine line : productesLine) { + if (line.getLineName().equalsIgnoreCase(name)) { + return line; + } + } + return null; + } + public int getNextTaskNumber() { + int max = 0; + for (Task t : tasks) { + if (t.getNumber() > max) max = t.getNumber(); + } + return max + 1; + } + + public ArrayList getProductLines() { + return productesLine; + } + +} \ No newline at end of file diff --git a/src/InventoryManagementFrame.java b/src/InventoryManagementFrame.java new file mode 100644 index 0000000..6e31a6c --- /dev/null +++ b/src/InventoryManagementFrame.java @@ -0,0 +1,452 @@ +import java.awt.*; +import java.io.FileWriter; +import java.io.PrintWriter; +import java.util.List; +import javax.swing.*; +import javax.swing.border.EmptyBorder; +import javax.swing.table.*; + +public class InventoryManagementFrame extends JFrame { + + Controller con = Controller.getInstance(); + Invantory ss = Invantory.getInstance(); + + private JTable table; + private DefaultTableModel tableModel; + private JTextField searchField; + private JComboBox searchTypeBox; + + // Dashboard labels + private JLabel totalLbl, availableLbl, lowLbl, belowMinLbl; + + // ===== Colors & Theme ===== + private final Color primaryOrange = new Color(255, 140, 0); + private final Color darkOrange = new Color(230, 120, 0); + private final Color softYellow = new Color(255, 230, 150); + private final Color backgroundColor = new Color(255, 248, 220); + private final Color lowRedText = new Color(180, 0, 0); + private final Color availableGreenText = new Color(0, 140, 0); + + private final Font titleFont = new Font("SansSerif", Font.BOLD, 34); + private final Font tableFont = new Font("SansSerif", Font.PLAIN, 16); + private final Font buttonFont = new Font("SansSerif", Font.BOLD, 18); + + public InventoryManagementFrame() { + + setTitle("Dominus – Inventory Management"); + setExtendedState(JFrame.MAXIMIZED_BOTH); + setDefaultCloseOperation(EXIT_ON_CLOSE); + setLayout(new BorderLayout()); + getContentPane().setBackground(backgroundColor); + + // ===== TITLE ===== + JLabel titleLabel = new JLabel("Inventory Management", SwingConstants.CENTER); + titleLabel.setFont(titleFont); + titleLabel.setForeground(primaryOrange); + titleLabel.setOpaque(true); + titleLabel.setBackground(softYellow); + titleLabel.setBorder(new EmptyBorder(25, 0, 25, 0)); + add(titleLabel, BorderLayout.NORTH); + + // ===== CENTER PANEL ===== + JPanel centerPanel = new JPanel(new BorderLayout()); + centerPanel.setBackground(backgroundColor); + add(centerPanel, BorderLayout.CENTER); + + // ===== TABLE ===== + String[] columns = {"ID", "Item Name", "Category", "Quantity", "Price", "Minimum Limit"}; + tableModel = new DefaultTableModel(columns, 0); + table = new JTable(tableModel); + table.setRowHeight(32); + table.setFont(tableFont); + table.setSelectionBackground(primaryOrange); + table.getTableHeader().setFont(new Font("SansSerif", Font.BOLD, 16)); + table.getTableHeader().setBackground(primaryOrange); + table.getTableHeader().setForeground(Color.WHITE); + + table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { + @Override + public Component getTableCellRendererComponent( + JTable table, Object value, boolean isSelected, + boolean hasFocus, int row, int column) { + + Component c = super.getTableCellRendererComponent( + table, value, isSelected, hasFocus, row, column); + + if (!isSelected) { + c.setBackground(row % 2 == 0 ? Color.WHITE : softYellow); + } + + if (column == 3 && value != null) { // Quantity column + int qty = Integer.parseInt(value.toString()); + int min = Integer.parseInt(table.getValueAt(row, 5).toString()); + if (qty < min) c.setForeground(lowRedText); + else c.setForeground(availableGreenText); + } else { + c.setForeground(Color.BLACK); + } + return c; + } + }); + + JScrollPane tableScroll = new JScrollPane(table); + tableScroll.setBorder(BorderFactory.createLineBorder(primaryOrange, 2)); + + centerPanel.add(tableScroll, BorderLayout.CENTER); + + // ===== STATISTICS DASHBOARD ===== + JPanel statsPanel = new JPanel(new GridLayout(1, 4, 15, 15)); + statsPanel.setBackground(softYellow); + statsPanel.setBorder(BorderFactory.createTitledBorder("Statistics")); + + totalLbl = createStatLabel(primaryOrange); + availableLbl = createStatLabel(availableGreenText); + lowLbl = createStatLabel(lowRedText); + belowMinLbl = createStatLabel(new Color(150, 0, 150)); + + statsPanel.add(totalLbl); + statsPanel.add(availableLbl); + statsPanel.add(lowLbl); + statsPanel.add(belowMinLbl); + + centerPanel.add(statsPanel, BorderLayout.SOUTH); + + // ===== BUTTONS PANEL (RIGHT) ===== + JPanel buttonsPanel = new JPanel(); + buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.Y_AXIS)); + buttonsPanel.setBackground(softYellow); + buttonsPanel.setBorder(new EmptyBorder(30, 30, 30, 30)); + + Dimension btnSize = new Dimension(250, 55); + + JButton addBtn = createButton("Add Item", btnSize); + JButton editBtn = createButton("Edit Item", btnSize); + JButton deleteBtn = createButton("Delete Item", btnSize); + JButton saveBtn = createButton("Save Daily Report", btnSize); + JButton backBtn = createButton("Back", btnSize); + + addBtn.addActionListener(e -> addItem()); + editBtn.addActionListener(e -> editItem()); + deleteBtn.addActionListener(e -> deleteSelectedItem()); + saveBtn.addActionListener(e -> saveDailyReportFromCSV()); + backBtn.addActionListener(e -> { + new SupervisorMenuFrame(); + dispose(); + }); + + buttonsPanel.add(Box.createVerticalGlue()); + buttonsPanel.add(addBtn); + buttonsPanel.add(Box.createVerticalStrut(20)); + buttonsPanel.add(editBtn); + buttonsPanel.add(Box.createVerticalStrut(20)); + buttonsPanel.add(deleteBtn); + buttonsPanel.add(Box.createVerticalStrut(20)); + buttonsPanel.add(saveBtn); + buttonsPanel.add(Box.createVerticalStrut(20)); + buttonsPanel.add(backBtn); + buttonsPanel.add(Box.createVerticalGlue()); + + centerPanel.add(buttonsPanel, BorderLayout.EAST); + + // ===== SEARCH PANEL (ABOVE TABLE) ===== + JPanel searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + searchPanel.setBackground(backgroundColor); + searchPanel.setBorder(BorderFactory.createTitledBorder("Search Inventory")); + + searchField = new JTextField(15); + searchTypeBox = new JComboBox<>(new String[]{"Item Name", "Category", "Status"}); + + JComboBox statusOptionsBox = new JComboBox<>(new String[]{"Available", "Out of Stock", "Below Minimum"}); + statusOptionsBox.setVisible(false); + + searchTypeBox.addActionListener(e -> { + String selected = searchTypeBox.getSelectedItem().toString(); + if (selected.equals("Status")) { + statusOptionsBox.setVisible(true); + searchField.setEnabled(false); + } else { + statusOptionsBox.setVisible(false); + searchField.setEnabled(true); + } + }); + + JButton searchBtn = createButton("Search", new Dimension(120, 35)); + searchBtn.setFont(new Font("SansSerif", Font.BOLD, 14)); + searchBtn.addActionListener(e -> { + String type = searchTypeBox.getSelectedItem().toString(); + String text = searchField.getText(); + if (type.equals("Status")) text = statusOptionsBox.getSelectedItem().toString(); + search(text, type); + }); + + searchPanel.add(new JLabel("Search:")); + searchPanel.add(searchField); + searchPanel.add(searchTypeBox); + searchPanel.add(statusOptionsBox); + searchPanel.add(searchBtn); + + centerPanel.add(searchPanel, BorderLayout.NORTH); + + // Load existing items + loadItemsFromFile(); + updateDashboard(); + + setVisible(true); + } + + // ===== UTILITY METHODS ===== + private JLabel createStatLabel(Color color) { + JLabel lbl = new JLabel("", SwingConstants.CENTER); + lbl.setFont(new Font("SansSerif", Font.BOLD, 18)); + lbl.setForeground(color); + return lbl; + } + + private JButton createButton(String text, Dimension size) { + JButton btn = new JButton(text) { + protected void paintComponent(Graphics g) { + Graphics2D g2 = (Graphics2D) g.create(); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2.setColor(getModel().isPressed() ? darkOrange : primaryOrange); + g2.fillRoundRect(0, 0, getWidth(), getHeight(), 30, 30); + super.paintComponent(g); + g2.dispose(); + } + + protected void paintBorder(Graphics g) { + g.setColor(darkOrange); + ((Graphics2D) g).drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 30, 30); + } + }; + btn.setPreferredSize(size); + btn.setMaximumSize(size); + btn.setMinimumSize(size); + btn.setContentAreaFilled(false); + btn.setFocusPainted(false); + btn.setForeground(Color.WHITE); + btn.setFont(buttonFont); + btn.setAlignmentX(Component.CENTER_ALIGNMENT); + return btn; + } + + // ===== LOAD ITEMS ===== + private void loadItemsFromFile() { + tableModel.setRowCount(0); + List items = CSV.readItem("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Daily_Recordings"); + for (Item item : items) { + tableModel.addRow(new Object[]{ + item.getIdOfItem(), + item.getNameOfItem(), + item.getCategory(), + item.getQuantity(), + item.getPrice(), + item.getTheMinimumAllowed() + }); + } + updateDashboard(); + } + + // ===== DASHBOARD UPDATE ===== + private void updateDashboard() { + int total = tableModel.getRowCount(); + int available = 0, low = 0, belowMin = 0; + for (int i = 0; i < total; i++) { + int qty = Integer.parseInt(tableModel.getValueAt(i, 3).toString()); + int min = Integer.parseInt(tableModel.getValueAt(i, 5).toString()); + String status = tableModel.getValueAt(i, 4).toString(); + if (status.equalsIgnoreCase("Available")) available++; + if (status.equalsIgnoreCase("Low")) low++; + if (qty < min) belowMin++; + } + totalLbl.setText("Total Items: " + total); + availableLbl.setText("Available: " + available); + lowLbl.setText("Low Stock: " + low); + belowMinLbl.setText("Below Minimum: " + belowMin); + } + + // ===== ADD ITEM ===== + private void addItem() { + JTextField nameField = new JTextField(); + JTextField category = new JTextField(); + JTextField price = new JTextField(); + JTextField quantity = new JTextField(); + JTextField minimum = new JTextField(); + + JPanel panel = new JPanel(new GridLayout(0, 1, 5, 5)); + panel.add(new JLabel("Item Name:")); + panel.add(nameField); + panel.add(new JLabel("Category:")); + panel.add(category); + panel.add(new JLabel("Price:")); + panel.add(price); + panel.add(new JLabel("Quantity:")); + panel.add(quantity); + panel.add(new JLabel("Minimum allowed:")); + panel.add(minimum); + + int result = JOptionPane.showConfirmDialog(this, panel, "Add Item", JOptionPane.OK_CANCEL_OPTION); + + if (result == JOptionPane.OK_OPTION) { + String itemName = nameField.getText(); + String cat = category.getText(); + int pr = Integer.parseInt(price.getText()); + int qty = Integer.parseInt(quantity.getText()); + int min = Integer.parseInt(minimum.getText()); + + Item item = con.AddItem(itemName, cat, pr, qty, min); + tableModel.addRow(new Object[]{ + item.getIdOfItem(), + item.getNameOfItem(), + item.getCategory(), + item.getQuantity(), + item.getPrice(), + item.getTheMinimumAllowed() + }); + updateDashboard(); + } + } + + // ===== EDIT ITEM ===== + private void editItem() { + int selectedRow = table.getSelectedRow(); + if (selectedRow == -1) { + JOptionPane.showMessageDialog(this, "Please select an item to edit"); + return; + } + + int id = Integer.parseInt(tableModel.getValueAt(selectedRow, 0).toString()); + + JTextField nameField = new JTextField(tableModel.getValueAt(selectedRow, 1).toString()); + JTextField categoryField = new JTextField(tableModel.getValueAt(selectedRow, 2).toString()); + JTextField quantityField = new JTextField(tableModel.getValueAt(selectedRow, 3).toString()); + JTextField priceField = new JTextField(tableModel.getValueAt(selectedRow, 4).toString()); + JTextField minField = new JTextField(tableModel.getValueAt(selectedRow, 5).toString()); + + JPanel panel = new JPanel(new GridLayout(0, 1, 5, 5)); + panel.add(new JLabel("Item Name:")); + panel.add(nameField); + panel.add(new JLabel("Category:")); + panel.add(categoryField); + panel.add(new JLabel("Quantity:")); + panel.add(quantityField); + panel.add(new JLabel("Price:")); + panel.add(priceField); + panel.add(new JLabel("Minimum Allowed:")); + panel.add(minField); + + int result = JOptionPane.showConfirmDialog(this, panel, "Edit Item", JOptionPane.OK_CANCEL_OPTION); + + if (result == JOptionPane.OK_OPTION) { + try { + String name = nameField.getText(); + String category = categoryField.getText(); + int quantity = Integer.parseInt(quantityField.getText()); + int price = Integer.parseInt(priceField.getText()); + int min = Integer.parseInt(minField.getText()); + + Item updatedItem = con.editItem(id, name, category, price, quantity, min); + + tableModel.setValueAt(updatedItem.getNameOfItem(), selectedRow, 1); + tableModel.setValueAt(updatedItem.getCategory(), selectedRow, 2); + tableModel.setValueAt(updatedItem.getQuantity(), selectedRow, 3); + tableModel.setValueAt(updatedItem.getPrice(), selectedRow, 4); + tableModel.setValueAt(updatedItem.getTheMinimumAllowed(), selectedRow, 5); + + updateDashboard(); + + } catch (NumberFormatException ex) { + JOptionPane.showMessageDialog(this, "Please enter valid numbers"); + } catch (NOTFOUND ex) { + JOptionPane.showMessageDialog(this, ex.getMessage()); + } + } + } + + // ===== DELETE ITEM ===== + private void deleteSelectedItem() { + int row = table.getSelectedRow(); + if (row == -1) { + JOptionPane.showMessageDialog(this, "Please select an item to delete"); + return; + } + + int confirm = JOptionPane.showConfirmDialog(this, "Are you sure you want to delete this item?", "Confirm Delete", JOptionPane.YES_NO_OPTION); + if (confirm != JOptionPane.YES_OPTION) return; + + int modelRow = table.convertRowIndexToModel(row); + int itemId = Integer.parseInt(tableModel.getValueAt(modelRow, 0).toString()); + + try { + con.removeItemById(itemId); + tableModel.removeRow(modelRow); + updateDashboard(); + } catch (NOTFOUND e) { + JOptionPane.showMessageDialog(this, e.getMessage()); + } + } + + // ===== SEARCH ITEM ===== + private void search(String text, String type) { + try { + table.clearSelection(); + boolean found = false; + + if (type.equals("Status")) { + String selectedStatus = text.trim(); + for (int i = 0; i < table.getRowCount(); i++) { + int qty = Integer.parseInt(table.getValueAt(i, 3).toString()); + int min = Integer.parseInt(table.getValueAt(i, 5).toString()); + String status = qty == 0 ? "Out of Stock" : qty < min ? "Below Minimum" : "Available"; + if (status.equalsIgnoreCase(selectedStatus)) { + table.addRowSelectionInterval(i, i); + found = true; + } + } + } else { + text = text == null ? "" : text.trim().toLowerCase(); + for (int i = 0; i < table.getRowCount(); i++) { + String value = type.equals("Item Name") ? table.getValueAt(i, 1).toString() : table.getValueAt(i, 2).toString(); + if (value.toLowerCase().contains(text)) { + table.addRowSelectionInterval(i, i); + found = true; + } + } + } + + if (!found) JOptionPane.showMessageDialog(this, "No items found matching your search criteria"); + } catch (Exception e) { + JOptionPane.showMessageDialog(this, "An unexpected error occurred during search:\n" + e.getMessage()); + } + } + + // ===== SAVE DAILY REPORT ===== + private void saveDailyReportFromCSV() { + try { + String date = java.time.LocalDate.now().toString(); + String fileName = "C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Daily_Recordings_" + date + ".txt"; + + List itemsFromCSV = CSV.readItem("C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\Daily_Recordings"); + + try (PrintWriter writer = new PrintWriter(new FileWriter(fileName, false))) { + writer.println("Daily Inventory Report"); + writer.println("Date: " + date); + writer.println(); + writer.println("Items"); + for (Item item : itemsFromCSV) { + writer.println("ID: " + item.getIdOfItem() + + ", Name: " + item.getNameOfItem() + + ", Qty: " + item.getQuantity() + + ", Price: " + item.getPrice() + + ", min: " + item.getTheMinimumAllowed()); + } + writer.println(); + writer.println("End of Report"); + } + + JOptionPane.showMessageDialog(this, "Daily inventory report saved successfully"); + + } catch (Exception e) { + JOptionPane.showMessageDialog(this, "Error saving daily report: " + e.getMessage()); + } + } +} diff --git a/src/Item.csv b/src/Item.csv new file mode 100644 index 0000000..ebd8770 --- /dev/null +++ b/src/Item.csv @@ -0,0 +1,3 @@ +id,nameOfItem,category,quantity,price,theMinimumAllowed +7,kf,n,54,54,2 +8,dkjb,dub,52,584,5 diff --git a/src/Item.java b/src/Item.java new file mode 100644 index 0000000..6a98fe8 --- /dev/null +++ b/src/Item.java @@ -0,0 +1,83 @@ +public class Item { + int IdOfItem ; + static int id=0; + String NameOfItem ; + int Price ; + int Quantity ; + int TheMinimumAllowed ; + String Category ; + public Item( String category,String nameOfItem,int price,int quantity,int theMinimumAllowed) { + Category=category ; + IdOfItem =++id; + NameOfItem = nameOfItem; + Price=price; + Quantity=quantity; + TheMinimumAllowed=theMinimumAllowed ; + } + + +public Item(int id, String name, int price, int quantity, int minAllowed, String category) { + this.IdOfItem = id; + this.NameOfItem = name; + this.Price = price; + this.Quantity = quantity; + this.TheMinimumAllowed = minAllowed; + this.Category = category; + + if (id > Item.id) { + Item.id = id; + } +} + + + public int getIdOfItem() { + return IdOfItem; + } + public String getNameOfItem() { + return NameOfItem; + } + + public void setNameOfItem(String nameOfItem) { + NameOfItem = nameOfItem; + } + + public int getPrice() { + return Price; + } + + public void setPrice(int price) { + Price = price; + } + public int getQuantity() { + return Quantity; + } + public void setQuantity(int quantity) { + Quantity = quantity; + } + public int getTheMinimumAllowed() { + return TheMinimumAllowed; + } + + public void setTheMinimumAllowed(int theMinimumAllowed) { + TheMinimumAllowed = theMinimumAllowed; + } + + public String getCategory() { + return Category; + } + public void setCategory(String category) { + Category = category; + } + public void print() { + System.out.println( "Item{"+"id:"+getIdOfItem()+" "+"name:"+ getNameOfItem() + " "+"price:" +getPrice()+" "+ "Quantity:" + getQuantity()+" "+"The minimum allowed=" + getTheMinimumAllowed()+" "+"Category:" +getCategory()+"}"); + } + + @Override + public String toString() { + return getIdOfItem() + "," + + getNameOfItem() + "," +getCategory()+ "," +getQuantity() + + "," +getPrice() + "," + + getTheMinimumAllowed() + ; + } +} \ No newline at end of file diff --git a/src/LineNotes.csv b/src/LineNotes.csv new file mode 100644 index 0000000..332a70c --- /dev/null +++ b/src/LineNotes.csv @@ -0,0 +1,4 @@ +lineName,note,date +a,الخط سريع,2026-01-25 +a,الخط ليس سريع,2026-01-25 +hjbjfr,sidbjg,2026-01-25 diff --git a/src/LoginFrame.java b/src/LoginFrame.java new file mode 100644 index 0000000..1d50bae --- /dev/null +++ b/src/LoginFrame.java @@ -0,0 +1,252 @@ +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; + +public class LoginFrame extends JFrame { + + private RoundedTextField usernameField; + private RoundedPasswordField passwordField; + private JComboBox roleBox; + private RoundedButton loginButton; + private JButton eyeButton; + + // ====== YELLOW THEME ====== + Color primaryYellow = new Color(255, 215, 0); + Color darkYellow = new Color(180, 140, 0); + Color deepText = new Color(70, 50, 0); + + public LoginFrame() { + + setTitle("alsb3"); + setExtendedState(JFrame.MAXIMIZED_BOTH); + setDefaultCloseOperation(EXIT_ON_CLOSE); + setLayout(null); + + BackgroundPanel backgroundPanel = + new BackgroundPanel("C:\\Users\\HP\\Desktop\\محاضرات\\خوارزميات\\عملي\\محاضرات المعيدة\\photo_2026-01-25_12-00-37.jpg"); + backgroundPanel.setLayout(null); + setContentPane(backgroundPanel); + + Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); + int W = screen.width; + int H = screen.height; + + int centerY = H / 2; + + int fieldW = 320; + int fieldH = 50; + int labelW = 170; + int labelH = 40; + int gap = 20; + int space = 85; + + // ====== نحرك المجموعة لليسار ====== + int groupW = labelW + gap + fieldW; + int groupX = 150; // بدل المنتصف صار يسار الشاشة + + int labelX = groupX; + int fieldX = groupX + labelW + gap; + + JLabel userLabel = new RoundedLabel("Username", darkYellow); + userLabel.setFont(new Font("Serif", Font.BOLD, 28)); + userLabel.setBounds(labelX, centerY - space, labelW, labelH); + backgroundPanel.add(userLabel); + + usernameField = new RoundedTextField(); + usernameField.setFont(new Font("Serif", Font.BOLD, 24)); + usernameField.setBackground(primaryYellow); + usernameField.setForeground(deepText); + usernameField.setBounds(fieldX, centerY - space, fieldW, fieldH); + backgroundPanel.add(usernameField); + + JLabel passLabel = new RoundedLabel("Password", darkYellow); + passLabel.setFont(new Font("Serif", Font.BOLD, 28)); + passLabel.setBounds(labelX, centerY, labelW, labelH); + backgroundPanel.add(passLabel); + + passwordField = new RoundedPasswordField(); + passwordField.setFont(new Font("Serif", Font.BOLD, 24)); + passwordField.setBackground(primaryYellow); + passwordField.setForeground(deepText); + passwordField.setBounds(fieldX, centerY, fieldW, fieldH); + backgroundPanel.add(passwordField); + + eyeButton = new JButton("\uD83D\uDC41"); + eyeButton.setFont(new Font("Serif", Font.BOLD, 24)); + eyeButton.setBounds(fieldX + fieldW + 10, centerY, 50, fieldH); + eyeButton.setFocusPainted(false); + eyeButton.setBorderPainted(false); + eyeButton.setContentAreaFilled(false); + eyeButton.setForeground(primaryYellow); + backgroundPanel.add(eyeButton); + + eyeButton.addActionListener(e -> togglePassword()); + + JLabel roleLabel = new RoundedLabel("Role", darkYellow); + roleLabel.setFont(new Font("Serif", Font.BOLD, 28)); + roleLabel.setBounds(labelX, centerY + space, labelW, labelH); + backgroundPanel.add(roleLabel); + + roleBox = new JComboBox<>(new String[]{"manager", "Supervisor"}); + roleBox.setFont(new Font("Serif", Font.BOLD, 24)); + roleBox.setBackground(primaryYellow); + roleBox.setForeground(deepText); + roleBox.setBounds(fieldX, centerY + space, fieldW, fieldH); + backgroundPanel.add(roleBox); + + // ====== زر تسجيل الدخول أصفر ====== + loginButton = new RoundedButton("Login"); + loginButton.setFont(new Font("Serif", Font.BOLD, 30)); + loginButton.setBackground(primaryYellow); + loginButton.setForeground(deepText); + + int btnW = 220; + int btnH = 55; + int buttonY = centerY + space * 2 + 10; + + loginButton.setBounds(groupX, buttonY, btnW, btnH); // صار عاليسار + backgroundPanel.add(loginButton); + + loginButton.addActionListener(e -> performLogin()); + + setVisible(true); + } + + private void togglePassword() { + if (passwordField.getEchoChar() == '\u2022') { + passwordField.setEchoChar((char) 0); + } else { + passwordField.setEchoChar('\u2022'); + } + } + + private void performLogin() { + String username = usernameField.getText().trim(); + String password = new String(passwordField.getPassword()).trim(); + String role = (String) roleBox.getSelectedItem(); + + if ("manager".equals(role) && "laith".equals(username) && "123".equals(password)) { + SwingUtilities.invokeLater(() -> new MangerFrame().setVisible(true)); + dispose(); + } else if ("Supervisor".equals(role) && "ali".equals(username) && "234".equals(password)) { + SwingUtilities.invokeLater(() -> new SupervisorMenuFrame().setVisible(true)); + dispose(); + } else { + JOptionPane.showMessageDialog( + this, + "Invalid username, password or role", + "Login Failed", + JOptionPane.ERROR_MESSAGE + ); + } + } + + // ====== الخلفية ====== + static class BackgroundPanel extends JPanel { + private Image background; + + public BackgroundPanel(String path) { + background = new ImageIcon(path).getImage(); + } + + protected void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g; + + if (background != null) { + g2.drawImage(background, 0, 0, getWidth(), getHeight(), this); + } + + g2.setFont(new Font("Serif", Font.BOLD, 130)); + String title = "Welcome to alsb3"; + + FontMetrics fm = g2.getFontMetrics(); + int x = 150; // صار عاليسار + int y = 170; + + g2.setColor(new Color(0, 0, 0, 120)); + g2.drawString(title, x + 4, y + 4); + + g2.setColor(new Color(255, 215, 0)); + g2.drawString(title, x, y); + } + } + + static class RoundedLabel extends JLabel { + private final Color bg; + + public RoundedLabel(String text, Color bg) { + super(text, SwingConstants.CENTER); + this.bg = bg; + setForeground(Color.WHITE); + } + + protected void paintComponent(Graphics g) { + Graphics2D g2 = (Graphics2D) g; + g2.setColor(bg); + g2.fillRoundRect(0, 0, getWidth(), getHeight(), 20, 20); + super.paintComponent(g); + } + } + + static class RoundedTextField extends JTextField { + public RoundedTextField() { + setOpaque(false); + addFocusListener(new GlowEffect(this)); + } + + protected void paintComponent(Graphics g) { + Graphics2D g2 = (Graphics2D) g; + g2.setColor(getBackground()); + g2.fillRoundRect(0, 0, getWidth(), getHeight(), 20, 20); + super.paintComponent(g); + } + } + + static class RoundedPasswordField extends JPasswordField { + public RoundedPasswordField() { + setOpaque(false); + setEchoChar('\u2022'); + addFocusListener(new GlowEffect(this)); + } + + protected void paintComponent(Graphics g) { + Graphics2D g2 = (Graphics2D) g; + g2.setColor(getBackground()); + g2.fillRoundRect(0, 0, getWidth(), getHeight(), 20, 20); + super.paintComponent(g); + } + } + + static class GlowEffect extends FocusAdapter { + private final JComponent comp; + + public GlowEffect(JComponent comp) { + this.comp = comp; + } + + public void focusGained(FocusEvent e) { + comp.setBorder(BorderFactory.createLineBorder(new Color(255, 200, 0), 3)); + } + + public void focusLost(FocusEvent e) { + comp.setBorder(null); + } + } + + static class RoundedButton extends JButton { + public RoundedButton(String text) { + super(text); + setContentAreaFilled(false); + setFocusPainted(false); + setBorderPainted(false); + } + + protected void paintComponent(Graphics g) { + Graphics2D g2 = (Graphics2D) g; + g2.setColor(getBackground()); + g2.fillRoundRect(0, 0, getWidth(), getHeight(), 25, 25); + super.paintComponent(g); + } + } +} diff --git a/src/Main.java b/src/Main.java new file mode 100644 index 0000000..ce4c39d --- /dev/null +++ b/src/Main.java @@ -0,0 +1,25 @@ +import javax.swing.*; + +public class Main { + public static void main(String[] args) { + + + + SwingUtilities.invokeLater(() -> { + new SplashScreen().setVisible(true); + }); + + + SwingUtilities.invokeLater(() -> new SplashScreen().setVisible(true)); + Controller.getInstance(); + +// SwingUtilities.invokeLater(() -> new LoginFrame().setVisible(true)); + + +// SwingUtilities.invokeLater(() -> new MangerFrame().setVisible(true)); + +// SwingUtilities.invokeLater(() -> new SupervisorMenuFrame().setVisible(true)); +// SwingUtilities.invokeLater(() -> new InventoryManagementFrame().setVisible(true)); + + } +} \ No newline at end of file diff --git a/src/MangerFrame.java b/src/MangerFrame.java new file mode 100644 index 0000000..a65fc42 --- /dev/null +++ b/src/MangerFrame.java @@ -0,0 +1,390 @@ +import java.awt.*; +import java.time.LocalDate; +import javax.swing.*; +import javax.swing.border.EmptyBorder; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.DefaultTableModel; + +public class MangerFrame extends JFrame { + + Controller con = Controller.getInstance(); + Invantory ss = Invantory.getInstance(); + + private final Color primaryOrange = new Color(255, 140, 0); + private final Color darkOrange = new Color(230, 120, 0); + private final Color softYellow = new Color(255, 230, 150); + private final Color backgroundColor = new Color(255, 248, 220); + + private JTable table; + private DefaultTableModel tableModel; + + private JLabel totalLbl, activeLbl, stoppedLbl, maintenanceLbl; + + private final Font titleFont = new Font("SansSerif", Font.BOLD, 34); + private final Font buttonFont = new Font("SansSerif", Font.BOLD, 18); + private final Font tableFont = new Font("SansSerif", Font.PLAIN, 16); + + public MangerFrame() { + + setTitle("alsb3 – Production Management"); + setSize(1300, 750); + setExtendedState(JFrame.MAXIMIZED_BOTH); + setLocationRelativeTo(null); + setDefaultCloseOperation(EXIT_ON_CLOSE); + setLayout(new BorderLayout()); + getContentPane().setBackground(backgroundColor); + + // ===== TITLE ===== + JLabel titleLabel = new JLabel("alsb3 – Production Management", SwingConstants.CENTER); + titleLabel.setFont(titleFont); + titleLabel.setForeground(primaryOrange); + titleLabel.setBorder(new EmptyBorder(25, 0, 25, 0)); + titleLabel.setOpaque(true); + titleLabel.setBackground(softYellow); + add(titleLabel, BorderLayout.NORTH); + + JPanel centerPanel = new JPanel(new BorderLayout()); + centerPanel.setBackground(backgroundColor); + add(centerPanel, BorderLayout.CENTER); + + // ===== BUTTONS PANEL (RIGHT SIDE) ===== + JPanel buttonsPanel = new JPanel(); + buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.Y_AXIS)); + buttonsPanel.setBackground(softYellow); + buttonsPanel.setBorder(new EmptyBorder(30, 30, 30, 30)); + + Dimension btnSize = new Dimension(300, 55); + + JButton addLineBtn = createButton("Add Production Line", btnSize); + JButton updateStatusBtn = createButton("Update Line Status", btnSize); + JButton notesBtn = createButton("Evaluation & Notes", btnSize); + JButton performanceBtn = createButton("Production Lines Performance", btnSize); + JButton backBtn = createButton("Back", btnSize); + + buttonsPanel.add(Box.createVerticalGlue()); + buttonsPanel.add(addLineBtn); + buttonsPanel.add(Box.createVerticalStrut(20)); + buttonsPanel.add(updateStatusBtn); + buttonsPanel.add(Box.createVerticalStrut(20)); + buttonsPanel.add(notesBtn); + buttonsPanel.add(Box.createVerticalStrut(20)); + buttonsPanel.add(performanceBtn); + buttonsPanel.add(Box.createVerticalStrut(30)); + buttonsPanel.add(backBtn); + buttonsPanel.add(Box.createVerticalGlue()); + + centerPanel.add(buttonsPanel, BorderLayout.EAST); + + // ===== SEARCH PANEL ===== + JPanel searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + searchPanel.setBackground(backgroundColor); + searchPanel.setBorder(BorderFactory.createTitledBorder("Search Production Line by ID")); + + JTextField searchField = new JTextField(10); + JButton searchBtn = createButton("Search", new Dimension(120, 35)); + searchBtn.setFont(new Font("SansSerif", Font.BOLD, 14)); + searchBtn.addActionListener(e -> searchById(searchField.getText())); + + searchPanel.add(new JLabel("Line ID:")); + searchPanel.add(searchField); + searchPanel.add(searchBtn); + + centerPanel.add(searchPanel, BorderLayout.NORTH); + + // ===== TABLE ===== + String[] columns = {"ID", "Line Name", "Status"}; + tableModel = new DefaultTableModel(columns, 0); + table = new JTable(tableModel); + + table.setFont(tableFont); + table.setRowHeight(32); + table.setSelectionBackground(primaryOrange); + table.getTableHeader().setFont(new Font("SansSerif", Font.BOLD, 16)); + table.getTableHeader().setBackground(primaryOrange); + table.getTableHeader().setForeground(Color.WHITE); + + table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { + @Override + public Component getTableCellRendererComponent( + JTable table, Object value, boolean isSelected, + boolean hasFocus, int row, int col) { + + Component c = super.getTableCellRendererComponent( + table, value, isSelected, hasFocus, row, col); + + if (!isSelected) { + c.setBackground(row % 2 == 0 ? Color.WHITE : softYellow); + } + + if (col == 2 && value != null) { + switch (value.toString()) { + case "Active": + c.setForeground(new Color(0, 150, 0)); + break; + case "Stopped": + c.setForeground(Color.RED); + break; + case "Under Maintenance": + c.setForeground(primaryOrange); + break; + default: + c.setForeground(Color.BLACK); + } + } else { + c.setForeground(Color.BLACK); + } + return c; + } + }); + + JScrollPane tableScroll = new JScrollPane(table); + tableScroll.setBorder(BorderFactory.createLineBorder(primaryOrange, 2)); + + centerPanel.add(tableScroll, BorderLayout.CENTER); + + // ===== STATISTICS ===== + JPanel statsPanel = new JPanel(new GridLayout(1, 4, 15, 15)); + statsPanel.setBackground(softYellow); + statsPanel.setBorder(BorderFactory.createTitledBorder("Statistics")); + + totalLbl = createStatLabel(); + activeLbl = createStatLabel(); + stoppedLbl = createStatLabel(); + maintenanceLbl = createStatLabel(); + + statsPanel.add(totalLbl); + statsPanel.add(activeLbl); + statsPanel.add(stoppedLbl); + statsPanel.add(maintenanceLbl); + + centerPanel.add(statsPanel, BorderLayout.SOUTH); + + // ===== ACTIONS ===== + addLineBtn.addActionListener(e -> addLine()); + updateStatusBtn.addActionListener(e -> updateLineStatus()); + notesBtn.addActionListener(e -> openNotesDialog()); + performanceBtn.addActionListener(e -> showPerformance()); + backBtn.addActionListener(e -> { + new LoginFrame(); + dispose(); + }); + + loadLinesToTable(); + updateStatistics(); + setVisible(true); + } + + private void updateLineStatus() { + int row = table.getSelectedRow(); + + if (row == -1) { + JOptionPane.showMessageDialog(this, "Please select a production line first"); + return; + } + + JComboBox statusBox = new JComboBox<>( + new String[]{"Active", "Stopped", "Under Maintenance"} + ); + + int result = JOptionPane.showConfirmDialog(this, statusBox, "Update Line Status", JOptionPane.OK_CANCEL_OPTION); + + if (result == JOptionPane.OK_OPTION) { + String lineName = tableModel.getValueAt(row, 1).toString(); + String newStatus = statusBox.getSelectedItem().toString(); + + try { + con.Edit(lineName, newStatus); + + Invantory inv = Invantory.getInstance(); + CSV.writeProductLine2(inv.getProductLines()); + + tableModel.setValueAt(newStatus, row, 2); + updateStatistics(); + + JOptionPane.showMessageDialog(this, "Status updated and saved to file!"); + + } catch (NOTFOUND e) { + JOptionPane.showMessageDialog(this, e.getMessage()); + } + } + } + + private void showPerformance() { + + String V = con.Viow(); + System.out.println("the Performance viewed"); + + JTextArea area = new JTextArea(V, 12, 40); + area.setEditable(false); + + JOptionPane.showMessageDialog( + this, + new JScrollPane(area), + "Production Lines Performance", + JOptionPane.INFORMATION_MESSAGE + ); + + } + + private void searchById(String text) { + try { + int id = Integer.parseInt(text); + for (int i = 0; i < tableModel.getRowCount(); i++) { + if ((int) tableModel.getValueAt(i, 0) == id) { + table.setRowSelectionInterval(i, i); + table.scrollRectToVisible(table.getCellRect(i, 0, true)); + return; + } + } + JOptionPane.showMessageDialog(this, "Line not found"); + } catch (NumberFormatException e) { + JOptionPane.showMessageDialog(this, "Invalid ID"); + } + } + + private void openNotesDialog() { + + JComboBox lineBox = new JComboBox<>(); + for (ProductLine pl : ss.productesLine) { + lineBox.addItem(pl.getLineName()); + } + + JTextArea notesArea = new JTextArea(8, 30); + notesArea.setLineWrap(true); + notesArea.setWrapStyleWord(true); + + JPanel panel = new JPanel(new BorderLayout(5, 5)); + + JPanel top = new JPanel(new GridLayout(2, 1, 5, 5)); + top.add(new JLabel("Production Line:")); + top.add(lineBox); + + panel.add(top, BorderLayout.NORTH); + panel.add(new JScrollPane(notesArea), BorderLayout.CENTER); + + int result = JOptionPane.showConfirmDialog( + this, + panel, + "Evaluation & Notes", + JOptionPane.OK_CANCEL_OPTION + ); + + if (result == JOptionPane.OK_OPTION) { + + String lineName = lineBox.getSelectedItem().toString(); + String note = notesArea.getText(); + + if (note.trim().isEmpty()) { + JOptionPane.showMessageDialog(this, "Note cannot be empty"); + return; + } + + CSV.writeLineNote(lineName, note); + + JOptionPane.showMessageDialog(this, "Note saved successfully ✅"); + } + } + + private void addLine() { + + JTextField nameField = new JTextField(); + JTextField outputField = new JTextField(); + + JPanel panel = new JPanel(new GridLayout(0, 1, 5, 5)); + panel.add(new JLabel("Line Name:")); + panel.add(nameField); + + int result = JOptionPane.showConfirmDialog( + this, panel, + "Add Production Line", JOptionPane.OK_CANCEL_OPTION + ); + + if (result == JOptionPane.OK_OPTION) { + + con.Add(nameField.getText()); + + ss.productesLine.clear(); + ss.productesLine.addAll( + CSV.readProductLine( + "C:\\Users\\alaa\\Desktop\\swing in project 3\\src\\ProductLine.csv" + ) + ); + + loadLinesToTable(); + updateStatistics(); + } + } + + private void updateStatistics() { + int total = tableModel.getRowCount(); + int a = 0, s = 0, m = 0; + + for (int i = 0; i < total; i++) { + switch (tableModel.getValueAt(i, 2).toString()) { + case "Active": a++; break; + case "Stopped": s++; break; + case "Under Maintenance": m++; break; + } + } + + totalLbl.setText("Total: " + total); + activeLbl.setText("Active: " + a); + stoppedLbl.setText("Stopped: " + s); + maintenanceLbl.setText("Maintenance: " + m); + } + + private JButton createButton(String text, Dimension size) { + + JButton btn = new JButton(text) { + protected void paintComponent(Graphics g) { + Graphics2D g2 = (Graphics2D) g.create(); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + + g2.setColor(getModel().isPressed() ? darkOrange : primaryOrange); + g2.fillRoundRect(0, 0, getWidth(), getHeight(), 30, 30); + + super.paintComponent(g); + g2.dispose(); + } + + protected void paintBorder(Graphics g) { + g.setColor(darkOrange); + ((Graphics2D) g).drawRoundRect(0, 0, + getWidth() - 1, getHeight() - 1, 30, 30); + } + }; + + btn.setPreferredSize(size); + btn.setMaximumSize(size); + btn.setMinimumSize(size); + btn.setContentAreaFilled(false); + btn.setFocusPainted(false); + btn.setForeground(Color.WHITE); + btn.setFont(buttonFont); + btn.setAlignmentX(Component.CENTER_ALIGNMENT); + + return btn; + } + + private void loadLinesToTable() { + tableModel.setRowCount(0); + for (ProductLine pl : ss.productesLine) { + tableModel.addRow(new Object[]{ + pl.getLineId(), + pl.getLineName(), + pl.getStatus() != null ? pl.getStatus().name().replace("_", " ") : "Active", + "-", + LocalDate.now() + }); + } + } + + private JLabel createStatLabel() { + JLabel lbl = new JLabel("", SwingConstants.CENTER); + lbl.setFont(new Font("SansSerif", Font.BOLD, 18)); + lbl.setForeground(primaryOrange); + return lbl; + } + +} diff --git a/src/NOTFOUND.java b/src/NOTFOUND.java new file mode 100644 index 0000000..e4f3eee --- /dev/null +++ b/src/NOTFOUND.java @@ -0,0 +1,5 @@ +public class NOTFOUND extends Exception { + NOTFOUND(String m) { + super(m); + } +} \ No newline at end of file diff --git a/src/Product.csv b/src/Product.csv new file mode 100644 index 0000000..694a5e9 --- /dev/null +++ b/src/Product.csv @@ -0,0 +1,8 @@ +id, nameOfProduct,HashMap p +1,jj,1,DDD:1; +1,jj,1,DDD:1; +1,jj,1,DDD:1; +1,jj,1,DDD:1; +1,jj,1,DDD:1; +1,jj,1,DDD:1; +1,jj,1,DDD:1; diff --git a/src/Product.java b/src/Product.java new file mode 100644 index 0000000..a604af1 --- /dev/null +++ b/src/Product.java @@ -0,0 +1,85 @@ +import java.util.HashMap ; +import java.util.Map; +public class Product { + private int NumberOfProduct ; + private String NameOfProduct ; + private static int AUTO_ID = 0; + int QuantityOfProduct=1 ; + HashMapP=new HashMap<>(); + +public Product(String name, HashMap p) { + this.NumberOfProduct = ++AUTO_ID; + this.NameOfProduct = name; + + this.P = p; +} + + +public Product(int idFromCsv, String name, int quantity, HashMap p) { + this.NumberOfProduct = idFromCsv; + AUTO_ID = Math.max(AUTO_ID, idFromCsv); // 🔥 مهم + this.NameOfProduct = name; + this.QuantityOfProduct = quantity; + this.P = p; +} + + + public int getQuantityOfProduct() { + return QuantityOfProduct; + } + public void setQuantityOfProduct(int quantityOfProduct) { + QuantityOfProduct = quantityOfProduct; + } + public HashMap getP() { + return P; + } + public int getNumberOfProduct() { + return NumberOfProduct; + } + public String getNameOfProduct() { + return NameOfProduct; + } + public void printInfo() { + System.out.println("Product{"+"id:" +getNumberOfProduct()+" "+"Name:"+ getNameOfProduct()+" "+"P:" +getP() +"}"); + } + + public String toCSV() { + StringBuilder sb = new StringBuilder(); + sb.append(NumberOfProduct).append(","); + sb.append(NameOfProduct).append(","); + sb.append(QuantityOfProduct).append(","); + + if (P != null && !P.isEmpty()) { + for (Map.Entry entry : P.entrySet()) { + sb.append(entry.getKey().getNameOfItem()) + .append(":") + .append(entry.getValue()) + .append(";"); + } + } + + return sb.toString(); + } + + + @Override + public String toString() { + return NameOfProduct ; + } + + + + + public String printMaterials() { + StringBuilder stringBuilder = new StringBuilder(); + for (Map.Entry entry : getP().entrySet()) { + Item item = entry.getKey(); + int quantity = entry.getValue(); + stringBuilder.append(item.getNameOfItem()) + .append(":") + .append(quantity) + .append(";"); + } + return stringBuilder.toString(); + } +} \ No newline at end of file diff --git a/src/ProductLine.csv b/src/ProductLine.csv new file mode 100644 index 0000000..434f97b --- /dev/null +++ b/src/ProductLine.csv @@ -0,0 +1,6 @@ +lineId,lineName,status +1,a,Active +2,b,Active +3,c,Active +4,hjbjfr,Stopped +5,dkujbjhr,Active diff --git a/src/ProductLine.java b/src/ProductLine.java new file mode 100644 index 0000000..e5d1f4d --- /dev/null +++ b/src/ProductLine.java @@ -0,0 +1,141 @@ +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.HashMap; + +public class ProductLine implements Runnable { + static int id=0; + private int lineId; + private String lineName; + private Invantory inventory = Invantory.getInstance(); + + + public ProductLine(int id, String name) { + this.lineId = id; + this.lineName = name; + this.status = Ex.Active; + + if (id > ProductLine.id) { + ProductLine.id = id; + } + } + + + enum Ex {Active, Stopped, Under_Maintenance} + Ex status ; + + ArrayList t = new ArrayList<>(); + static ArrayListallTheTask=new ArrayList<>(); + static HashMap productTotals = new HashMap<>(); + float The_Proportion_Of_Production = 0.0f; + + private boolean isRunning = true; + private Task currentTask = null; + + +public ProductLine(String lineName) { + this.lineId = ++id; + this.lineName = lineName; + this.status = Ex.Active; + this.inventory = Invantory.getInstance(); +} + + +public synchronized void addTask(Task task) { + this.t.add(task); + this.currentTask = task; + notifyAll(); +} + +@Override +public void run() { + try { + while (true) { + Thread.sleep(100); + + + if (this.currentTask != null) { + Thread b=new Thread(currentTask); + b.start(); + + currentTask.setenum("INPROGRESS"); + for (int i = 1; i <= currentTask.getAmount(); i++) { + Thread.sleep(500); + + currentTask.setFinishedAmount(i); + + System.out.println("النسبة الآن: " + currentTask.getPercentAge()); + } + + CSV.writeAllTasks(Invantory.getInstance().tasks); + this.currentTask = null; + } + } + } catch (InterruptedException e) { + e.printStackTrace(); + } +} + + public void setCurrentTask(Task task) { + this.currentTask = task; + } + void calculateTotalProduction() { + + for (Task k : t) { + int productId = k.getPro().getNumberOfProduct(); + int amount = k.getAmount(); + productTotals.put(productId, productTotals.getOrDefault(productId, 0) + amount); + } + } + + +void The_Proportion_Of_Productiones() { + double totalProduced = 0; + double totalRequested = 0; + + for (Task task : t) { + totalProduced += task.getFinishedAmount(); + totalRequested += task.getAmount(); + } + + if (totalRequested > 0) { + The_Proportion_Of_Production = (float)((totalProduced * 100.0) / totalRequested); + } else { + The_Proportion_Of_Production = 0.0f; + } +} + + public void shutdownLine() { + this.isRunning = false; + synchronized (this) { + notifyAll(); + } + } + +void setEnum(String e) { + status = Ex.valueOf(e.replace(" ", "_")); +} + + public Ex getStatus() { return status; } + public String getLineName() { return lineName; } + public int getLineId() { return lineId; } + + public void totoString() { + System.out.println("ProductLine{" + + "id=" + lineId + + ", name='" + lineName + '\'' + + ", status=" + status + + ", productionShare=" + The_Proportion_Of_Production + "%" + + '}'); + } +public void setStatus(String status) { + this.status = Ex.valueOf(status.replace(" ", "_")); +} + + + @Override + public String toString() { + return lineId + "," + lineName + "," + status; + } + + +} \ No newline at end of file diff --git a/src/ProductLineManager.java b/src/ProductLineManager.java new file mode 100644 index 0000000..8ade6e2 --- /dev/null +++ b/src/ProductLineManager.java @@ -0,0 +1,90 @@ +import java.time.LocalDate; +import java.util.*; +import java.util.stream.Collectors; +public class ProductLineManager { + Invantory r=Invantory.getInstance(); + void addTask(int number, Product pro, int amount, String customer, LocalDate startDate){ + Task k=new Task( number, pro, amount, customer, startDate); + r.tasks.add(k); + + } + void cancelTask(Task km){ + km.setenum("cancelled"); + } + void display(ProductLine k ){ + for (Task l : k.t) { + l.printInfo(); + } + } + void displayTasks(Product s){ + for (Task b: r.tasks){ + if(b.getPro()==s){ + b.printInfo(); + } + } + } + void aVoidProductLine(Product s){ + for (ProductLine f:r.productesLine) + { + for (Task v:f.t){ + if (v.getPro()==s) + { + System.out.println( f.getLineName()); + break; + } + } + } + } + void taskstatuscancelled() { + System.out.println(r.tasks.stream() + .filter(i -> i != null && i.getK() != null) + .filter(i -> i.getK() == Task.Ex.CANCELLED) + .collect(Collectors.toList())); + } + void displayproductbelongtosbecificproductline(ProductLine k ){ + if (k.productTotals == null || k.productTotals.isEmpty()) { + System.out.println(" No products have been registered yet"); + return; + } + for (Map.Entryn:k.productTotals.entrySet()){ + Product kkk= r.searchAboutProductById(n.getKey()); + kkk.printInfo(); + + } + } + void printalltheproductsofallproductline(){ + for (ProductLine k : r.productesLine){ + for (Map.Entryn:k.productTotals.entrySet()){ + Product kkk= r.searchAboutProductById(n.getKey()); + kkk.printInfo(); + + } + } + } + void prntthemostpopularproduct(LocalDate start, LocalDate end) { + System.out.println("The most requested product:"); + Map count = new HashMap<>(); + for (Task task : r.tasks) { + if (task.getStartDate() != null && task.getExecutionDate() != null) { + if (!task.getStartDate().isBefore(start) && + !task.getExecutionDate().isAfter(end)) { + String name = task.getPro().getNameOfProduct(); + count.put(name, count.getOrDefault(name, 0) + 1); + } + } + } + String topProduct = null; + int max = 0; + for (Map.Entry entry : count.entrySet()) { + if (entry.getValue() > max) { + max = entry.getValue(); + topProduct = entry.getKey(); + } + } + if (topProduct != null) { + System.out.println(" " + topProduct + " (" + max + ")"); + } else { + System.out.println(" There aren't tasks"); + } + } +} \ No newline at end of file diff --git a/src/ProductionLinesManagementFrame.java b/src/ProductionLinesManagementFrame.java new file mode 100644 index 0000000..68b33cd --- /dev/null +++ b/src/ProductionLinesManagementFrame.java @@ -0,0 +1,561 @@ +import javax.swing.*; +import javax.swing.border.BevelBorder; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.DefaultTableModel; +import java.awt.*; +import java.time.LocalDate; + +public class ProductionLinesManagementFrame extends JFrame { + + private final Color fancyOrange = new Color(255, 140, 0); // اللون البرتقالي الأساسي + private final Color lightOrange = new Color(255, 220, 180); // خلفية الصفوف المتبادلة + private final Color babyOrange = new Color(255, 235, 200); // خلفية الواجهة + + private JTable table; + private DefaultTableModel tableModel; + + private String searchText = ""; + private int searchColumn = -1; + + public ProductionLinesManagementFrame() { + + setTitle("Production Lines Management"); + Task.currentUI = this; + + setSize(1300, 750); + setExtendedState(JFrame.MAXIMIZED_BOTH); + setDefaultCloseOperation(EXIT_ON_CLOSE); + setLocationRelativeTo(null); + setLayout(new BorderLayout()); + getContentPane().setBackground(babyOrange); + + JLabel title = new JLabel("Production Lines Management", SwingConstants.CENTER); + title.setFont(new Font("Verdana", Font.BOLD, 34)); + title.setForeground(fancyOrange); + title.setBorder(BorderFactory.createEmptyBorder(20, 0, 20, 0)); + add(title, BorderLayout.NORTH); + + JPanel centerPanel = new JPanel(new BorderLayout()); + centerPanel.setBackground(babyOrange); + add(centerPanel, BorderLayout.CENTER); + + // 🟧 لوحة الأزرار على اليمين + JPanel buttonsPanel = new JPanel(); + buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.Y_AXIS)); + buttonsPanel.setBackground(babyOrange); + buttonsPanel.setBorder( + BorderFactory.createCompoundBorder( + BorderFactory.createMatteBorder(0, 2, 0, 0, fancyOrange), + BorderFactory.createEmptyBorder(20, 20, 20, 20) + ) + ); + + Dimension btnSize = new Dimension(320, 58); + + JButton addTaskBtn = createButton("Add Task", btnSize); + addTaskBtn.addActionListener(e -> addNewTask()); + + JButton editTaskBtn = createButton("Edit Task", btnSize); + JButton cancelTaskBtn = createButton("Cancel Task", btnSize); + JButton productsByLineBtn = createButton("Products by Line", btnSize); + JButton linesByProductBtn = createButton("Line by Product", btnSize); + + JButton mostRequestedBtn = createButton("Most Requested Product", btnSize); + + + JButton backBtn = createButton("Back", btnSize); + backBtn.addActionListener(e -> { + new SupervisorMenuFrame(); + dispose(); + }); + + buttonsPanel.add(addTaskBtn); buttonsPanel.add(Box.createVerticalStrut(10)); + buttonsPanel.add(editTaskBtn); editTaskBtn.addActionListener(e -> editTask()); buttonsPanel.add(Box.createVerticalStrut(10)); + buttonsPanel.add(cancelTaskBtn); cancelTaskBtn.addActionListener(e -> cancelTask()); buttonsPanel.add(Box.createVerticalStrut(20)); + buttonsPanel.add(productsByLineBtn); productsByLineBtn.addActionListener(e -> filterTasksByLine()); buttonsPanel.add(Box.createVerticalStrut(10)); + buttonsPanel.add(linesByProductBtn); linesByProductBtn.addActionListener(e -> filterTasksByProduct()); buttonsPanel.add(Box.createVerticalStrut(20)); + + buttonsPanel.add(mostRequestedBtn); buttonsPanel.add(Box.createVerticalStrut(10)); + buttonsPanel.add(backBtn); + + // 🔹 أضف لوحة الأزرار على اليمين + centerPanel.add(buttonsPanel, BorderLayout.EAST); + + // 🔹 لوحة البحث + JPanel searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + searchPanel.setBackground(babyOrange); + searchPanel.setBorder(BorderFactory.createTitledBorder("Search ")); + + JComboBox filterBox = new JComboBox<>(new String[]{ "tasks by product","tasks by line "}); + JTextField searchField = new JTextField(15); + JButton searchBtn = createButton("Search", new Dimension(120, 35)); + searchBtn.addActionListener(e -> { + searchText = searchField.getText().trim(); + searchColumn = filterBox.getSelectedIndex() + 1; + table.clearSelection(); + table.repaint(); + }); + + JButton showAllBtn = createButton("Show All Tasks", new Dimension(180, 35)); + showAllBtn.setBackground(new Color(255, 180, 100)); + showAllBtn.addActionListener(e -> loadTasksTable()); + + searchPanel.add(new JLabel("Search by:")); + searchPanel.add(filterBox); + searchPanel.add(searchField); + searchPanel.add(searchBtn); + searchPanel.add(showAllBtn); + + centerPanel.add(searchPanel, BorderLayout.NORTH); + + // 🔹 جدول البيانات على اليسار + String[] columns = {"Task ID", "Production Line", "Product", "Amount", "Customer", "Start Date", "Status"}; + tableModel = new DefaultTableModel(columns, 0); + + table = new JTable(tableModel); + table.setRowHeight(30); + table.setFont(new Font("Arial", Font.PLAIN, 15)); + table.setSelectionBackground(fancyOrange); + + table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { + Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); + if (!isSelected) { + if (!searchText.isEmpty() && searchColumn != -1) { + Object cellValue = table.getValueAt(row, searchColumn); + if (cellValue != null && cellValue.toString().toLowerCase().contains(searchText.toLowerCase())) { + c.setBackground(fancyOrange); + c.setForeground(Color.WHITE); + return c; + } + } + c.setBackground(row % 2 == 0 ? Color.WHITE : lightOrange); + c.setForeground(Color.BLACK); + } + return c; + } + }); + + JScrollPane scrollPane = new JScrollPane(table); + scrollPane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(fancyOrange, 2), "Production Tasks")); + centerPanel.add(scrollPane, BorderLayout.CENTER); + + Invantory.loadInventory(); + loadTasksTable(); + setVisible(true); + } + + private JButton createButton(String text, Dimension size) { + JButton btn = new JButton(text); + btn.setPreferredSize(size); + btn.setMinimumSize(size); + btn.setMaximumSize(size); + btn.setFont(new Font("Arial", Font.BOLD, 16)); + btn.setBackground(fancyOrange); + btn.setForeground(Color.WHITE); + btn.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED)); + btn.setFocusPainted(false); + btn.setAlignmentX(Component.CENTER_ALIGNMENT); + return btn; + } + + // ⚡ جميع دوال إضافة، تعديل، إلغاء، تصفية... تبقى كما هي تماماً + // loadTasksTable(), addNewTask(), cancelTask(), editTask(), filterTasksByLine(), filterTasksByProduct(), viewProductsByLine(), viewLinesByProduct(), refreshTableData() + // ... يمكنك نسخها كما هي من الكود السابق بدون أي تعديل. + + + + +private void loadTasksTable() { + Invantory inv = Invantory.getInstance(); + + tableModel.setRowCount(0); + + for (Task task : inv.tasks) { + String productName = (task.getPro() != null) ? task.getPro().getNameOfProduct() : "Unknown"; + String lineName = (task.getLineName() != null) ? task.getLineName() : "No Line"; + + String status = (task.getK() != null) ? task.getK().toString() : "INPROGRESS"; + + + tableModel.addRow(new Object[]{ + task.getNumber(), + lineName, + productName, + task.getAmount(), + task.getCustomer(), + task.getStartDate(), + status, + String.format("%.1f%%", task.getPercentAge()) // 👈 جلب النسبة من كائن Task + }); + } +} + + + +private void addNewTask() { + Invantory inv = Invantory.getInstance(); + + JComboBox productBox = new JComboBox<>(); + for (Product p : inv.general_products.values()) productBox.addItem(p); + + JComboBox lineBox = new JComboBox<>(); + for (ProductLine line : inv.getProductLines()) lineBox.addItem(line.getLineName()); + + JTextField amountField = new JTextField(); + JTextField customerField = new JTextField(); + JTextField startDateField = new JTextField(LocalDate.now().toString()); + + JPanel panel = new JPanel(new GridLayout(0, 1, 5, 5)); + panel.add(new JLabel("Product:")); panel.add(productBox); + panel.add(new JLabel("Amount:")); panel.add(amountField); + panel.add(new JLabel("Customer Name:")); panel.add(customerField); + panel.add(new JLabel("Start Date (YYYY-MM-DD):")); panel.add(startDateField); + panel.add(new JLabel("Production Line:")); panel.add(lineBox); + + int result = JOptionPane.showConfirmDialog(this, panel, "Add New Task", JOptionPane.OK_CANCEL_OPTION); + + if (result == JOptionPane.OK_OPTION) { + try { + Product selectedProduct = (Product) productBox.getSelectedItem(); + String lineName = (String) lineBox.getSelectedItem(); + ProductLine selectedLine = inv.getProductLineByName(lineName); + int amount = Integer.parseInt(amountField.getText()); + String customer = customerField.getText(); + LocalDate startDate = LocalDate.parse(startDateField.getText()); + + int taskNumber = inv.getNextTaskNumber(); + Task task = new Task(taskNumber, selectedProduct, amount, customer, startDate); + + + task.login(selectedLine); + + if (!inv.tasks.contains(task)) { + inv.tasks.add(task); + } + + CSV.writeAllTasks(inv.tasks); + + + if (selectedLine != null) { + selectedLine.setCurrentTask(task); + } + + loadTasksTable(); + + JOptionPane.showMessageDialog(this, "Task #" + taskNumber + " added and production started!"); + + } catch (Exception ex) { + JOptionPane.showMessageDialog(this, "Error: " + ex.getMessage()); + ex.printStackTrace(); + } + } +} + private void cancelTask() { + int row = table.getSelectedRow(); + + if (row == -1) { + JOptionPane.showMessageDialog(this, "Please select a task from the table first."); + return; + } + + int confirm = JOptionPane.showConfirmDialog(this, + "Are you sure you want to cancel this task?", + "Confirm Cancellation", + JOptionPane.YES_NO_OPTION); + + if (confirm == JOptionPane.YES_OPTION) { + Invantory inv = Invantory.getInstance(); + + int taskId = (int) tableModel.getValueAt(row, 0); + + boolean found = false; + for (Task t : inv.tasks) { + if (t.getNumber() == taskId) { + t.setenum("CANCELLED"); + found = true; + break; + } + } + + if (found) { + CSV.writeAllTasks(inv.tasks); + + int statusColumn = tableModel.getColumnCount() - 1; + tableModel.setValueAt("CANCELLED", row, statusColumn); + + JOptionPane.showMessageDialog(this, "Task #" + taskId + " has been cancelled."); + } else { + JOptionPane.showMessageDialog(this, "Error: Task not found in memory."); + } + } + } + private void editTask() { + int row = table.getSelectedRow(); + + if (row == -1) { + JOptionPane.showMessageDialog(this, "Please select a task to edit."); + return; + } + + Invantory inv = Invantory.getInstance(); + int taskId = (int) tableModel.getValueAt(row, 0); + + Task taskToEdit = null; + for (Task t : inv.tasks) { + if (t.getNumber() == taskId) { + taskToEdit = t; + break; + } + } + + if (taskToEdit == null) return; + + JTextField customerField = new JTextField(taskToEdit.getCustomer()); + JTextField amountField = new JTextField(String.valueOf(taskToEdit.getAmount())); + + JComboBox productBox = new JComboBox<>(); + for (Product p : inv.general_products.values()) { + productBox.addItem(p); + if (p.getNameOfProduct().equals(taskToEdit.getPro().getNameOfProduct())) { + productBox.setSelectedItem(p); + } + } + + JComboBox lineBox = new JComboBox<>(); + for (ProductLine line : inv.getProductLines()) { + lineBox.addItem(line.getLineName()); + if (line.getLineName().equals(taskToEdit.getLineName())) { + lineBox.setSelectedItem(line.getLineName()); + } + } + + JPanel panel = new JPanel(new GridLayout(0, 1, 5, 5)); + panel.add(new JLabel("Customer Name:")); + panel.add(customerField); + panel.add(new JLabel("Amount:")); + panel.add(amountField); + panel.add(new JLabel("Product:")); + panel.add(productBox); + panel.add(new JLabel("Production Line:")); + panel.add(lineBox); + + int result = JOptionPane.showConfirmDialog(this, panel, "Edit Task #" + taskId, JOptionPane.OK_CANCEL_OPTION); + + if (result == JOptionPane.OK_OPTION) { + try { + taskToEdit.setCustomer(customerField.getText().trim()); + taskToEdit.setAmount(Integer.parseInt(amountField.getText().trim())); + taskToEdit.setPro((Product) productBox.getSelectedItem()); + + String newLineName = (String) lineBox.getSelectedItem(); + ProductLine newLine = inv.getProductLineByName(newLineName); + taskToEdit.login(newLine); + + CSV.writeAllTasks(inv.tasks); + + loadTasksTable(); + + JOptionPane.showMessageDialog(this, "Task #" + taskId + " updated successfully!"); + + } catch (NumberFormatException ex) { + JOptionPane.showMessageDialog(this, "Invalid Amount. Please enter a number."); + } catch (Exception ex) { + JOptionPane.showMessageDialog(this, "Error: " + ex.getMessage()); + } + } + } + private void filterTasksByLine() { + Invantory inv = Invantory.getInstance(); + + JComboBox lineBox = new JComboBox<>(); + for (ProductLine line : inv.getProductLines()) { + lineBox.addItem(line.getLineName()); + } + + int result = JOptionPane.showConfirmDialog(this, lineBox, + "Select Production Line to Filter", JOptionPane.OK_CANCEL_OPTION); + + if (result == JOptionPane.OK_OPTION) { + String selectedLine = (String) lineBox.getSelectedItem(); + + tableModel.setRowCount(0); + + boolean found = false; + for (Task task : inv.tasks) { + if (task.getLineName() != null && task.getLineName().equalsIgnoreCase(selectedLine)) { + + String productName = (task.getPro() != null) ? task.getPro().getNameOfProduct() : "Unknown"; + String status = (task.getK() != null) ? task.getK().toString() : "INPROGRESS"; + + tableModel.addRow(new Object[]{ + task.getNumber(), + task.getLineName(), + productName, + task.getAmount(), + task.getCustomer(), + task.getStartDate(), + task.getExecutionDate(), + status + }); + found = true; + } + } + + if (!found) { + JOptionPane.showMessageDialog(this, "No tasks found for production line: " + selectedLine); + loadTasksTable(); + } + } + } + private void filterTasksByProduct() { + Invantory inv = Invantory.getInstance(); + + JComboBox productBox = new JComboBox<>(); + for (Product p : inv.general_products.values()) { + productBox.addItem(p.getNameOfProduct()); + } + + int result = JOptionPane.showConfirmDialog(this, productBox, + "Filter by Product", JOptionPane.OK_CANCEL_OPTION); + + if (result == JOptionPane.OK_OPTION) { + String selectedProductName = (String) productBox.getSelectedItem(); + + tableModel.setRowCount(0); + + boolean found = false; + for (Task task : inv.tasks) { + if (task.getPro() != null && task.getPro().getNameOfProduct().equalsIgnoreCase(selectedProductName)) { + + String lineName = (task.getLineName() != null) ? task.getLineName() : "No Line"; + String status = (task.getK() != null) ? task.getK().toString() : "INPROGRESS"; + + tableModel.addRow(new Object[]{ + task.getNumber(), + lineName, + task.getPro().getNameOfProduct(), + task.getAmount(), + task.getCustomer(), + task.getStartDate(), + task.getExecutionDate(), + status + }); + found = true; + } + } + + if (!found) { + JOptionPane.showMessageDialog(this, "No tasks found for product: " + selectedProductName); + loadTasksTable(); + } + } + } + private void viewProductsByLine() { + Invantory inv = Invantory.getInstance(); + + JComboBox lineBox = new JComboBox<>(); + for (ProductLine line : inv.getProductLines()) { + lineBox.addItem(line.getLineName()); + } + + int result = JOptionPane.showConfirmDialog(this, lineBox, + "Select Line to View its Products", JOptionPane.OK_CANCEL_OPTION); + + if (result == JOptionPane.OK_OPTION) { + String selectedLine = (String) lineBox.getSelectedItem(); + + tableModel.setRowCount(0); + + java.util.HashSet displayedSet = new java.util.HashSet<>(); + + boolean found = false; + for (Task task : inv.tasks) { + if (task.getLineName() != null && task.getLineName().equalsIgnoreCase(selectedLine)) { + + int productId = (task.getPro() != null) ? task.getPro().getNumberOfProduct() : -1; + String productName = (task.getPro() != null) ? task.getPro().getNameOfProduct() : "Unknown"; + String customerName = (task.getCustomer() != null) ? task.getCustomer() : "No Customer"; + + String uniqueKey = productId + "-" + customerName; + + if (!displayedSet.contains(uniqueKey)) { + tableModel.addRow(new Object[]{ + productId, + selectedLine, + productName, + task.getAmount(), + customerName, + task.getStartDate(), + task.getExecutionDate() != null ? task.getExecutionDate() : "—" + }); + displayedSet.add(uniqueKey); + found = true; + } + } + } + + if (!found) { + JOptionPane.showMessageDialog(this, "No products or users found for this line."); + loadTasksTable(); + } + } + } + private void viewLinesByProduct() { + Invantory inv = Invantory.getInstance(); + + JComboBox productBox = new JComboBox<>(); + for (Product p : inv.general_products.values()) { + productBox.addItem(p.getNameOfProduct()); + } + + int result = JOptionPane.showConfirmDialog(this, productBox, + "Select Product to View its Lines", JOptionPane.OK_CANCEL_OPTION); + + if (result == JOptionPane.OK_OPTION) { + String selectedProduct = (String) productBox.getSelectedItem(); + + tableModel.setRowCount(0); + + java.util.HashSet displayedSet = new java.util.HashSet<>(); + + boolean found = false; + for (Task task : inv.tasks) { + if (task.getPro() != null && task.getPro().getNameOfProduct().equalsIgnoreCase(selectedProduct)) { + + String lineName = (task.getLineName() != null) ? task.getLineName() : "No Line"; + int productId = task.getPro().getNumberOfProduct(); + String customerName = (task.getCustomer() != null) ? task.getCustomer() : "Unknown"; + + String uniqueKey = lineName + "-" + customerName; + + if (!displayedSet.contains(uniqueKey)) { + tableModel.addRow(new Object[]{ + productId, + lineName, + selectedProduct, + task.getAmount(), + customerName, + task.getStartDate(), + task.getK() + }); + displayedSet.add(uniqueKey); + found = true; + } + } + } + + if (!found) { + JOptionPane.showMessageDialog(this, "No production lines are currently assigned to: " + selectedProduct); + loadTasksTable(); + } + } + } + + public void refreshTableData() { + SwingUtilities.invokeLater(() -> { + loadTasksTable(); + }); + } +} \ No newline at end of file diff --git a/src/SplashScreen.java b/src/SplashScreen.java new file mode 100644 index 0000000..ee51f56 --- /dev/null +++ b/src/SplashScreen.java @@ -0,0 +1,124 @@ +import javax.swing.*; +import java.awt.*; + +public class SplashScreen extends JFrame { + + private JProgressBar progressBar; + private Image backgroundImage; + + private static final String BACKGROUND_IMAGE_PATH = + "photo_2026-01-25_11-44-58.jpg"; + + public SplashScreen() { + setTitle("alsb3"); + + setUndecorated(true); + setExtendedState(JFrame.MAXIMIZED_BOTH); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + backgroundImage = new ImageIcon(BACKGROUND_IMAGE_PATH).getImage(); + + JPanel mainPanel = new JPanel() { + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g; + + g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, + RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + + // رسم الخلفية + if (backgroundImage != null) { + g2.drawImage(backgroundImage, 0, 0, getWidth(), getHeight(), this); + } + + // ====== العنوان ====== + String text = "alsb3"; + Font font = new Font("Serif", Font.BOLD, 150); + g2.setFont(font); + + FontMetrics fm = g2.getFontMetrics(); + int x = (getWidth() - fm.stringWidth(text)) / 2; + int y = (getHeight() / 2) - 100; // مرفوع لفوق + + // ظل ناعم + g2.setColor(new Color(40, 40, 45, 170)); + g2.drawString(text, x + 6, y + 6); + + g2.setColor(new Color(90, 95, 105, 140)); + g2.drawString(text, x + 3, y + 3); + + // النص الأساسي + g2.setColor(new Color(190, 190, 190, 220)); + g2.drawString(text, x, y); + + g2.setColor(new Color(220, 220, 220, 100)); + g2.drawString(text, x - 2, y - 2); + + // ====== وضع شريط التحميل تحت العنوان ====== + progressBar.setBounds( + (getWidth() - 450) / 2, + y + 40, + 450, + 20 + ); + } + }; + + mainPanel.setLayout(null); + + // ====== شريط التحميل ====== + progressBar = new JProgressBar(0, 100); + progressBar.setForeground(new Color(255, 215, 0)); // أصفر + progressBar.setBackground(new Color(40, 45, 55)); + progressBar.setBorderPainted(false); + progressBar.setStringPainted(false); + + mainPanel.add(progressBar); + add(mainPanel); + + setVisible(true); + + startLoading(); + } + + private void startLoading() { + SwingWorker worker = + new SwingWorker() { + + @Override + protected Void doInBackground() throws Exception { + + Invantory inv = Invantory.getInstance(); + + for (ProductLine pl : inv.getProductLines()) { + Thread t = new Thread(pl); + t.start(); + System.out.println("✅ Engine Started: " + pl.getLineName()); + } + + for (int i = 0; i <= 100; i++) { + Thread.sleep(30); + publish(i); + } + return null; + } + + @Override + protected void process(java.util.List chunks) { + progressBar.setValue(chunks.get(chunks.size() - 1)); + } + + @Override + protected void done() { + SwingUtilities.invokeLater(() -> { + new LoginFrame().setVisible(true); + }); + dispose(); + } + }; + + worker.execute(); + } +} diff --git a/src/SupervisorMenuFrame.java b/src/SupervisorMenuFrame.java new file mode 100644 index 0000000..d861a4e --- /dev/null +++ b/src/SupervisorMenuFrame.java @@ -0,0 +1,136 @@ +import javax.swing.*; +import javax.swing.border.BevelBorder; +import java.awt.*; + +public class SupervisorMenuFrame extends JFrame { + + private final Color primaryOrange = new Color(255, 140, 0); + private final Color darkOrange = new Color(230, 120, 0); + private final Color softYellow = new Color(255, 230, 150); + private final Color backgroundColor = new Color(255, 248, 220); + + public SupervisorMenuFrame() { + + setTitle("alsb3– Production Supervisoment"); + setExtendedState(JFrame.MAXIMIZED_BOTH); // Full Screen + setDefaultCloseOperation(EXIT_ON_CLOSE); + setLayout(new BorderLayout()); + setLocationRelativeTo(null); + + BackgroundPanel backgroundPanel = + new BackgroundPanel("C:\\Users\\HP\\Desktop\\محاضرات\\خوارزميات\\عملي\\محاضرات المعيدة\\photo_2026-01-25_12-00-37.jpg"); // إزالة الصورة، أو ضع مسار خلفية برتقالي فاتح + backgroundPanel.setLayout(new BorderLayout()); + backgroundPanel.setBackground(backgroundColor); + setContentPane(backgroundPanel); + + JLabel titleLabel = new JLabel("alsb3 – Production Supervisoment", SwingConstants.CENTER); + titleLabel.setFont(new Font("SansSerif", Font.BOLD, 36)); + titleLabel.setForeground(primaryOrange); + titleLabel.setBorder(BorderFactory.createEmptyBorder(30, 0, 30, 0)); + titleLabel.setOpaque(true); + titleLabel.setBackground(softYellow); + backgroundPanel.add(titleLabel, BorderLayout.NORTH); + + JPanel centerPanel = new JPanel(new GridBagLayout()); + centerPanel.setOpaque(false); + backgroundPanel.add(centerPanel, BorderLayout.CENTER); + + GridBagConstraints gbc = new GridBagConstraints(); + gbc.insets = new Insets(20, 20, 20, 20); + gbc.fill = GridBagConstraints.HORIZONTAL; + + Dimension btnSize = new Dimension(420, 70); + + JLabel sectionTitle = new JLabel("Select Supervisor Operation", SwingConstants.CENTER); + sectionTitle.setFont(new Font("SansSerif", Font.BOLD, 24)); + sectionTitle.setForeground(primaryOrange); + sectionTitle.setOpaque(true); + sectionTitle.setBackground(softYellow); + sectionTitle.setBorder(BorderFactory.createEmptyBorder(10, 20, 10, 20)); + + JButton inventoryBtn = createButton("Inventory Management", btnSize); + JButton productionBtn = createButton("Production Lines Management", btnSize); + JButton backBtn = createButton("Back", btnSize); + + gbc.gridx = 0; + gbc.gridy = 0; + centerPanel.add(sectionTitle, gbc); + + gbc.gridy++; + centerPanel.add(inventoryBtn, gbc); + + gbc.gridy++; + centerPanel.add(productionBtn, gbc); + + gbc.gridy++; + centerPanel.add(backBtn, gbc); + + inventoryBtn.addActionListener(e -> { + new InventoryManagementFrame(); + dispose(); + }); + + productionBtn.addActionListener(e -> { + new ProductionLinesManagementFrame(); + dispose(); + }); + + backBtn.addActionListener(e -> { + new LoginFrame(); + dispose(); + }); + + setVisible(true); + } + + private JButton createButton(String text, Dimension size) { + JButton btn = new JButton(text) { + protected void paintComponent(Graphics g) { + Graphics2D g2 = (Graphics2D) g.create(); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + + g2.setColor(getModel().isPressed() ? darkOrange : primaryOrange); + g2.fillRoundRect(0, 0, getWidth(), getHeight(), 30, 30); + + super.paintComponent(g); + g2.dispose(); + } + + protected void paintBorder(Graphics g) { + g.setColor(darkOrange); + ((Graphics2D) g).drawRoundRect(0, 0, + getWidth() - 1, getHeight() - 1, 30, 30); + } + }; + + btn.setPreferredSize(size); + btn.setMaximumSize(size); + btn.setMinimumSize(size); + btn.setContentAreaFilled(false); + btn.setFocusPainted(false); + btn.setForeground(Color.WHITE); + btn.setFont(new Font("SansSerif", Font.BOLD, 20)); + btn.setAlignmentX(Component.CENTER_ALIGNMENT); + + return btn; + } + + static class BackgroundPanel extends JPanel { + private Image background; + + public BackgroundPanel(String path) { + if (!path.isEmpty()) { + background = new ImageIcon(path).getImage(); + } + } + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + if (background != null) { + g.drawImage(background, 0, 0, getWidth(), getHeight(), this); + } + } + } +} diff --git a/src/Task.csv b/src/Task.csv new file mode 100644 index 0000000..93ce2ad --- /dev/null +++ b/src/Task.csv @@ -0,0 +1,6 @@ +number,NameOfProduct,LineName,Amount,Customer,StartDate,ExecutionDate,Status,FinishedAmount,PercentAge +1,jj,masa,1,jojo,2026-01-24,,INPROGRESS,0,0.0 +2,jj,ggg,1,jjj,2026-01-24,,INPROGRESS,0,0.0 +3,jj,maaaaai,5454,مجد,2026-01-25,,CANCELLED,0,0.0 +4,jj,b,78,nfg,2026-01-25,,INPROGRESS,0,0.0 +5,jj,c,98,alaa,2026-01-25,,INPROGRESS,0,0.0 diff --git a/src/Task.java b/src/Task.java new file mode 100644 index 0000000..caee047 --- /dev/null +++ b/src/Task.java @@ -0,0 +1,255 @@ + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Map; +public class Task implements Runnable { + private int number; + public static ProductionLinesManagementFrame currentUI; + Product pro; + ProductLine dd; + int Amount; + String Customer; + LocalDate StartDate; + LocalDate ExecutionDate; + Invantory i = Invantory.getInstance(); + Ex k; + int finishedAmount; + double percentAge; + + public void setLineName(String lineName) { + this.lineName = lineName; + } + + public String getLineName() { + return lineName; + } + + enum Ex {INPROGRESS, COMPLETE, CANCELLED} + private String lineName; + + + public void login(ProductLine line) { + this.dd = line; + this.lineName = (line != null) ? line.getLineName() : "NoLine"; + } + public Task(int number, Product pro, int amount, String customer, LocalDate startDate) { + this.number = number; + this.pro = pro; + this.Amount = amount; + this.Customer = customer; + this.StartDate = startDate; + this.setenum("INPROGRESS"); + } + + public Task(int number, String proName, String lineName, int amount, String customer, + LocalDate startDate, LocalDate executionDate, String status, float percentAge) { + this.number = number; + this.Amount = amount; + this.Customer = customer; + this.StartDate = startDate; + this.ExecutionDate = executionDate; + this.percentAge = percentAge; + try { + Product foundProduct = i.searchAboutProductByname(proName); + if (foundProduct != null) { + this.pro = foundProduct; + } + } catch (NullPointerException e){ + System.out.println("not found"); + ErrorLogger.logError("not found"); + } + + if (status != null && !status.isEmpty()) { + this.setenum(status); + } else { + this.setenum("INPROGRESS"); + } + + i.tasks.add(this); + } + + public void setenum(String e) { + try { + k = Ex.valueOf(e.toUpperCase()); + } catch (IllegalArgumentException ex) { + k = Ex.INPROGRESS; + } + } + + public Ex getK() { + return k; + } + + public void printInfo() { + System.out.println("📋 معلومات المهمة #" + number + ":"); + System.out.println(" المنتج: " + (pro != null ? pro.getNameOfProduct() : "غير محدد")); + System.out.println(" الكمية: " + Amount); + System.out.println(" العميل: " + Customer); + System.out.println(" تاريخ البدء: " + StartDate); + System.out.println(" تاريخ الانتهاء: " + (ExecutionDate != null ? ExecutionDate : "قيد التنفيذ")); + System.out.println(" الحالة: " + (k != null ? k.toString() : "INPROGRESS")); + System.out.println(" الكمية المنتجة: " + finishedAmount + "/" + Amount); + System.out.println(" النسبة: " + percentAge + "%"); + } + + public void printSimpleInfo() { + System.out.println("Task #" + number + + " - Product: " + (pro != null ? pro.getNameOfProduct() : "N/A") + + " - Amount: " + Amount + + " - Status: " + (k != null ? k : "INPROGRESS")); + } + + + + public void productlineinformation() { + if (dd != null) { + System.out.println("productLine: " + dd.getLineName() + + " (ID: " + dd.getLineId() + + ", status: " + dd.getStatus() + ")"); + } else { + ErrorLogger.logError("The task is not assigned to a production line"); + } + } + + + public int getNumber() { return number; } + public void setNumber(int number) { this.number = number; } + + public Product getPro() { return pro; } + public void setPro(Product pro) { this.pro = pro; } + + public ProductLine getDd() { return dd; } + + public int getAmount() { return Amount; } + public void setAmount(int amount) { Amount = amount; } + + public String getCustomer() { return Customer; } + public void setCustomer(String customer) { Customer = customer; } + + public LocalDate getStartDate() { return StartDate; } + public void setStartDate(LocalDate startDate) { StartDate = startDate; } + + public LocalDate getExecutionDate() { return ExecutionDate; } + public void setExecutionDate(LocalDate executionDate) { ExecutionDate = executionDate; } + + public int getFinishedAmount() { return finishedAmount; } + public double getPercentAge() { return percentAge; } + + + +@Override +public void run() { + + setenum("INPROGRESS"); + try { + if (i.Check(pro, Amount)) { + for (Map.Entry entry : pro.getP().entrySet()) { + i.decrease(entry.getKey().getIdOfItem(), entry.getValue() * Amount); + } + + int stepAmount = Amount / 10; + for (int f = 1; f <= 10; f++) { + if (this.k == Ex.CANCELLED) { + if (currentUI != null) currentUI.refreshTableData(); + return; + } + + Thread.sleep(1000); + + if (f < 10) { + i.IncreaseProduct(pro.getNumberOfProduct(), stepAmount); + finishedAmount = stepAmount * f; + } else { + int remaining = Amount - (stepAmount * 9); + i.IncreaseProduct(pro.getNumberOfProduct(), remaining); + finishedAmount = Amount; + } + percentAge = f * 10.0; + + if (currentUI != null) { + currentUI.refreshTableData(); + } + } + + setenum("COMPLETE"); + ExecutionDate = LocalDate.now(); + if (currentUI != null) currentUI.refreshTableData(); + + } else { + setenum("CANCELLED"); + if (currentUI != null) currentUI.refreshTableData(); + } + } catch (Exception e) { + setenum("CANCELLED"); + if (currentUI != null) currentUI.refreshTableData(); + } +} + public void showPercentAge() { + System.out.println("الكمية المنتجة: " + finishedAmount + "/" + Amount); + System.out.println("النسبة المئوية: " + percentAge + "%"); + } + + @Override + public String toString() { + String lineName = (dd != null) ? dd.getLineName() : "NoLine"; + String execDate = (ExecutionDate != null) ? ExecutionDate.toString() : ""; + String status = (k != null) ? k.toString() : "INPROGRESS"; + String productName = (pro != null) ? pro.getNameOfProduct() : "Unknown"; + + return number + "," + + productName + "," + + lineName + "," + + Amount + "," + + Customer + "," + + (StartDate != null ? StartDate.toString() : "") + "," + + execDate + "," + + status + "," + + finishedAmount + "," + + percentAge; + } + +public void setFinishedAmount(int finishedAmount) { + this.finishedAmount = finishedAmount; + + if (this.Amount > 0) { + this.percentAge = (finishedAmount * 100.0) / this.Amount; + } + + if (this.percentAge >= 100) { + this.percentAge = 100.0; + this.setenum("COMPLETED"); + this.ExecutionDate = java.time.LocalDate.now(); + } + + if (currentUI != null) { + currentUI.refreshTableData(); + } +} + + public static void loadInventory() { + try { + ArrayList loadedTasks = (ArrayList) CSV.readTask("C:\\Users\\victus\\Desktop\\Object-Oriented Programming JAVA in Arabic\\Factory\\src\\Task.csv"); + Invantory inv = Invantory.getInstance(); + + for (Task task : loadedTasks) { + boolean exists = false; + for (Task existing : inv.tasks) { + if (existing.getNumber() == task.getNumber()) { + exists = true; + break; + } + } + + if (!exists) { + inv.tasks.add(task); + } + } + + + } catch (Exception e) { + ErrorLogger.logError("Error loading tasks"); + } + } + + +} \ No newline at end of file diff --git a/src/errors.txt b/src/errors.txt new file mode 100644 index 0000000..64e5d22 --- /dev/null +++ b/src/errors.txt @@ -0,0 +1 @@ +Item DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nError reading Item.csv/nError reading Item.csv/nError reading Item.csv/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nError reading Item.csv/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nError reading Item.csv/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/nItem DDD not found/n \ No newline at end of file diff --git a/src/notes.csv b/src/notes.csv new file mode 100644 index 0000000..e69de29 diff --git a/swing in project 3.iml b/swing in project 3.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/swing in project 3.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file