Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions SQL/InventoryDB.sql
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
CREATE DATABASE IF NOT EXISTS `inventory` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
CREATE DATABASE IF NOT EXISTS `inventory` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `inventory`;
-- MySQL dump 10.13 Distrib 8.0.25, for Win64 (x86_64)
--
Expand Down Expand Up @@ -28,7 +28,7 @@ CREATE TABLE `currentstock` (
`productcode` varchar(45) NOT NULL,
`quantity` int NOT NULL,
PRIMARY KEY (`productcode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
Expand All @@ -55,7 +55,7 @@ CREATE TABLE `customers` (
`location` varchar(45) NOT NULL,
`phone` varchar(45) NOT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=307 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
) ENGINE=InnoDB AUTO_INCREMENT=307 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
Expand Down Expand Up @@ -84,7 +84,7 @@ CREATE TABLE `products` (
`brand` varchar(45) NOT NULL,
PRIMARY KEY (`pid`),
UNIQUE KEY `productcode_UNIQUE` (`productcode`)
) ENGINE=InnoDB AUTO_INCREMENT=130 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
) ENGINE=InnoDB AUTO_INCREMENT=130 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
Expand Down Expand Up @@ -112,7 +112,7 @@ CREATE TABLE `purchaseinfo` (
`quantity` int NOT NULL,
`totalcost` double NOT NULL,
PRIMARY KEY (`purchaseID`)
) ENGINE=InnoDB AUTO_INCREMENT=1012 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
) ENGINE=InnoDB AUTO_INCREMENT=1012 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
Expand Down Expand Up @@ -141,7 +141,7 @@ CREATE TABLE `salesinfo` (
`revenue` double NOT NULL,
`soldby` varchar(45) NOT NULL,
PRIMARY KEY (`salesid`)
) ENGINE=InnoDB AUTO_INCREMENT=2013 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
) ENGINE=InnoDB AUTO_INCREMENT=2013 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
Expand All @@ -168,7 +168,7 @@ CREATE TABLE `suppliers` (
`location` varchar(45) NOT NULL,
`mobile` varchar(10) NOT NULL,
PRIMARY KEY (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=409 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
) ENGINE=InnoDB AUTO_INCREMENT=409 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
Expand All @@ -192,7 +192,7 @@ CREATE TABLE `userlogs` (
`username` varchar(45) NOT NULL,
`in_time` varchar(45) NOT NULL,
`out_time` varchar(45) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
Expand Down Expand Up @@ -221,7 +221,7 @@ CREATE TABLE `users` (
`password` varchar(200) NOT NULL,
`usertype` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
Expand Down
Binary file added src/com/inventory/DAO/CustomerDAO.class
Binary file not shown.
Binary file not shown.
Binary file added src/com/inventory/DAO/DeliveryDAO.class
Binary file not shown.
208 changes: 208 additions & 0 deletions src/com/inventory/DAO/DeliveryDAO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
package com.inventory.DAO;

import com.inventory.Database.ConnectionFactory;
import java.sql.*;
import java.util.ArrayList;

/**
* DAO for Delivery records.
*/
public class DeliveryDAO {

private Connection conn;

// --- Inner class to hold delivery details ---
public static class DeliveryDetail {
private int deliveryId;
private Date deliveryDate;
private String customerName;
private String productName;
private String agentName;
private String status;
private String signatureNotes;

public DeliveryDetail(int deliveryId, Date deliveryDate, String customerName,
String productName, String agentName, String status,
String signatureNotes) {
this.deliveryId = deliveryId;
this.deliveryDate = deliveryDate;
this.customerName = customerName;
this.productName = productName;
this.agentName = agentName;
this.status = status;
this.signatureNotes = signatureNotes;
}

public Object[] toArray() {
return new Object[]{
deliveryId,
deliveryDate,
customerName,
productName,
agentName,
status,
(signatureNotes != null && !signatureNotes.isEmpty()) ? signatureNotes : "N/A"
};
}
}

public DeliveryDAO() {
conn = new ConnectionFactory().getConn();
}

// --- Load ALL deliveries (ADMIN view) ---
public ArrayList<DeliveryDetail> getAllDeliveryDetails() {
ArrayList<DeliveryDetail> deliveryList = new ArrayList<>();

String query = "SELECT d.delivery_id, d.delivery_date, d.customer_name, " +
"p.productname, u.name AS agent_name, d.delivery_status, d.customer_signature " +
"FROM delivery d " +
"INNER JOIN products p ON d.inventory_id = p.pid " +
"INNER JOIN users u ON d.user_id = u.id";

try (Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query)) {

while (rs.next()) {
DeliveryDetail detail = new DeliveryDetail(
rs.getInt("delivery_id"),
rs.getDate("delivery_date"),
rs.getString("customer_name"),
rs.getString("productname"),
rs.getString("agent_name"),
rs.getString("delivery_status"),
rs.getString("customer_signature")
);
deliveryList.add(detail);
}

} catch (SQLException e) {
System.err.println("Error loading all deliveries: " + e.getMessage());
}

return deliveryList;
}

// --- Load deliveries for specific delivery agent ---
public ArrayList<DeliveryDetail> getDeliveriesByAgentId(int agentId) {
ArrayList<DeliveryDetail> deliveryList = new ArrayList<>();

String query = "SELECT d.delivery_id, d.delivery_date, d.customer_name, " +
"p.productname, u.name AS agent_name, d.delivery_status, d.customer_signature " +
"FROM delivery d " +
"INNER JOIN products p ON d.inventory_id = p.pid " +
"INNER JOIN users u ON d.user_id = u.id " +
"WHERE d.user_id = ?";

try (PreparedStatement ps = conn.prepareStatement(query)) {

ps.setInt(1, agentId);

try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
DeliveryDetail detail = new DeliveryDetail(
rs.getInt("delivery_id"),
rs.getDate("delivery_date"),
rs.getString("customer_name"),
rs.getString("productname"),
rs.getString("agent_name"),
rs.getString("delivery_status"),
rs.getString("customer_signature")
);
deliveryList.add(detail);
}
}

} catch (SQLException e) {
System.err.println("Error loading agent deliveries: " + e.getMessage());
}

return deliveryList;
}

// --- Add new delivery ---
public boolean addDelivery(int inventoryId, int agentId, String customerName, Date deliveryDate) {
String query = "INSERT INTO delivery (inventory_id, user_id, delivery_date, delivery_status, customer_name, customer_signature) " +
"VALUES (?, ?, ?, 'Pending', ?, NULL)";

try (PreparedStatement ps = conn.prepareStatement(query)) {

ps.setInt(1, inventoryId);
ps.setInt(2, agentId);
ps.setDate(3, deliveryDate);
ps.setString(4, customerName);

return ps.executeUpdate() > 0;

} catch (SQLException e) {
System.err.println("Error adding delivery: " + e.getMessage());
return false;
}
}

// --- Update delivery status ---
public boolean updateDeliveryStatus(int deliveryId, String newStatus, String signature) {
String query = "UPDATE delivery SET delivery_status = ?, customer_signature = ? WHERE delivery_id = ?";

try (PreparedStatement ps = conn.prepareStatement(query)) {

ps.setString(1, newStatus);
ps.setString(2, (signature == null || signature.isEmpty()) ? null : signature);
ps.setInt(3, deliveryId);

return ps.executeUpdate() > 0;

} catch (SQLException e) {
System.err.println("Error updating delivery status: " + e.getMessage());
return false;
}
}

// --- Get count of pending deliveries for daily summary ---
public int getPendingDeliveriesCount() {
String query = "SELECT COUNT(*) FROM delivery WHERE delivery_status IN ('Pending', 'In Transit')";

try (Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query)) {

if (rs.next()) {
return rs.getInt(1);
}

} catch (SQLException e) {
System.err.println("Error counting pending deliveries: " + e.getMessage());
}

return 0;
}

// --- Get list of pending deliveries for details view ---
public ArrayList<String> getPendingDeliveriesList() {
ArrayList<String> list = new ArrayList<>();
String query = "SELECT d.delivery_id, d.delivery_date, d.customer_name, p.productname, u.name AS agent_name, d.delivery_status " +
"FROM delivery d " +
"INNER JOIN products p ON d.inventory_id = p.pid " +
"INNER JOIN users u ON d.user_id = u.id " +
"WHERE d.delivery_status IN ('Pending', 'In Transit')";

try (Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query)) {

while (rs.next()) {
String item = String.format("ID: %d | Date: %s | Product: %s | Customer: %s | Agent: %s | Status: %s",
rs.getInt("delivery_id"),
rs.getDate("delivery_date"),
rs.getString("productname"),
rs.getString("customer_name"),
rs.getString("agent_name"),
rs.getString("delivery_status"));
list.add(item);
}

} catch (SQLException e) {
System.err.println("Error loading pending deliveries list: " + e.getMessage());
}

return list;
}
}
Binary file added src/com/inventory/DAO/ProductDAO.class
Binary file not shown.
Loading