initial commit
This commit is contained in:
commit
2a77c8e75a
38
.gitignore
vendored
Normal file
38
.gitignore
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea/modules.xml
|
||||
.idea/jarRepositories.xml
|
||||
.idea/compiler.xml
|
||||
.idea/libraries/
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### Eclipse ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
17
.idea/dataSources.xml
generated
Normal file
17
.idea/dataSources.xml
generated
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||
<data-source source="LOCAL" name="@localhost" uuid="ab0522bd-1cfb-4e09-a121-85218f5838de">
|
||||
<driver-ref>mysql.8</driver-ref>
|
||||
<synchronize>true</synchronize>
|
||||
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
|
||||
<jdbc-url>jdbc:mysql://localhost:32768</jdbc-url>
|
||||
<jdbc-additional-properties>
|
||||
<property name="com.intellij.clouds.kubernetes.db.host.port" />
|
||||
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
|
||||
<property name="com.intellij.clouds.kubernetes.db.container.port" />
|
||||
</jdbc-additional-properties>
|
||||
<working-dir>$ProjectFileDir$</working-dir>
|
||||
</data-source>
|
||||
</component>
|
||||
</project>
|
7
.idea/discord.xml
generated
Normal file
7
.idea/discord.xml
generated
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DiscordProjectSettings">
|
||||
<option name="show" value="PROJECT_FILES" />
|
||||
<option name="description" value="" />
|
||||
</component>
|
||||
</project>
|
7
.idea/encodings.xml
generated
Normal file
7
.idea/encodings.xml
generated
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding">
|
||||
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
|
||||
</component>
|
||||
</project>
|
14
.idea/misc.xml
generated
Normal file
14
.idea/misc.xml
generated
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="MavenProjectsManager">
|
||||
<option name="originalFiles">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/pom.xml" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
7
.idea/sqldialects.xml
generated
Normal file
7
.idea/sqldialects.xml
generated
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="SqlDialectMappings">
|
||||
<file url="file://$PROJECT_DIR$/src/main/sql/main.sql" dialect="MySQL" />
|
||||
<file url="PROJECT" dialect="MySQL" />
|
||||
</component>
|
||||
</project>
|
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
17
pom.xml
Normal file
17
pom.xml
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>org.example</groupId>
|
||||
<artifactId>comp353_assignment2</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>21</maven.compiler.source>
|
||||
<maven.compiler.target>21</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
</project>
|
221
src/main/sql/main.sql
Normal file
221
src/main/sql/main.sql
Normal file
@ -0,0 +1,221 @@
|
||||
-- Create the database
|
||||
CREATE DATABASE nplo_db;
|
||||
USE nplo_db;
|
||||
|
||||
-- Create Member table
|
||||
CREATE TABLE Member
|
||||
(
|
||||
MemberID INT PRIMARY KEY AUTO_INCREMENT,
|
||||
FirstName VARCHAR(50) NOT NULL,
|
||||
LastName VARCHAR(50) NOT NULL,
|
||||
MiddleInitial CHAR(1),
|
||||
DateOfBirth DATE,
|
||||
Address VARCHAR(255),
|
||||
Gender ENUM ('Male', 'Female', 'Other'),
|
||||
PhoneNumber VARCHAR(20),
|
||||
EmailAddress VARCHAR(100),
|
||||
SocialSecurityNumber VARCHAR(11),
|
||||
MembershipStartDate DATE,
|
||||
MemberType ENUM ('Donor', 'Client', 'Employee') NOT NULL
|
||||
);
|
||||
|
||||
-- Create Donations table
|
||||
CREATE TABLE Donations
|
||||
(
|
||||
DonationID INT PRIMARY KEY AUTO_INCREMENT,
|
||||
DonorID INT,
|
||||
DonationDate DATE NOT NULL,
|
||||
DonationType ENUM ('Money', 'Products') NOT NULL,
|
||||
DonationAmount DECIMAL(10, 2),
|
||||
FOREIGN KEY (DonorID) REFERENCES Member (MemberID)
|
||||
);
|
||||
|
||||
-- Create Products table
|
||||
CREATE TABLE Products
|
||||
(
|
||||
ProductID INT PRIMARY KEY AUTO_INCREMENT,
|
||||
Description TEXT,
|
||||
DonationDate DATE,
|
||||
SellingPrice DECIMAL(10, 2),
|
||||
Weight DECIMAL(5, 2),
|
||||
InStock BOOLEAN DEFAULT TRUE,
|
||||
DonationID INT,
|
||||
FOREIGN KEY (DonationID) REFERENCES Donations (DonationID)
|
||||
);
|
||||
|
||||
-- Create Sales table
|
||||
CREATE TABLE Sales
|
||||
(
|
||||
SaleID INT PRIMARY KEY AUTO_INCREMENT,
|
||||
SaleDate DATE NOT NULL,
|
||||
TotalAmount DECIMAL(10, 2) NOT NULL,
|
||||
ClientID INT,
|
||||
DeliveryFee DECIMAL(10, 2),
|
||||
FOREIGN KEY (ClientID) REFERENCES Member (MemberID)
|
||||
);
|
||||
|
||||
-- Create SalesItems table
|
||||
CREATE TABLE SalesItems
|
||||
(
|
||||
SaleItemID INT PRIMARY KEY AUTO_INCREMENT,
|
||||
SaleID INT,
|
||||
ProductID INT,
|
||||
Quantity INT,
|
||||
FOREIGN KEY (SaleID) REFERENCES Sales (SaleID),
|
||||
FOREIGN KEY (ProductID) REFERENCES Products (ProductID)
|
||||
);
|
||||
|
||||
-- Create Employees table
|
||||
CREATE TABLE Employees
|
||||
(
|
||||
EmployeeID INT PRIMARY KEY,
|
||||
JobTitle ENUM ('President', 'Vice-President', 'Cashier', 'Other') NOT NULL,
|
||||
Salary DECIMAL(10, 2),
|
||||
FOREIGN KEY (EmployeeID) REFERENCES Member (MemberID)
|
||||
);
|
||||
|
||||
-- Create Expenses table
|
||||
CREATE TABLE Expenses
|
||||
(
|
||||
ExpenseID INT PRIMARY KEY AUTO_INCREMENT,
|
||||
ApprovedByID INT,
|
||||
PaymentDate DATE NOT NULL,
|
||||
Amount DECIMAL(10, 2) NOT NULL,
|
||||
ExpenseType ENUM ('Rent', 'Bill Payment', 'Charity Payment') NOT NULL,
|
||||
Description TEXT,
|
||||
FOREIGN KEY (ApprovedByID) REFERENCES Employees (EmployeeID)
|
||||
);
|
||||
|
||||
-- Add constraints and triggers
|
||||
|
||||
-- Ensure only presidents can approve expenses
|
||||
CREATE TRIGGER chk_president_approval_insert
|
||||
BEFORE INSERT
|
||||
ON Expenses
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
DECLARE job_title VARCHAR(255);
|
||||
|
||||
SELECT JobTitle
|
||||
INTO job_title
|
||||
FROM Employees
|
||||
WHERE EmployeeID = NEW.ApprovedByID;
|
||||
|
||||
IF job_title != 'President' THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = 'ApprovedByID must refer to an employee with the job title President';
|
||||
END IF;
|
||||
END;
|
||||
|
||||
-- Trigger to update product stock status when sold
|
||||
DELIMITER //
|
||||
CREATE TRIGGER update_product_stock
|
||||
AFTER INSERT
|
||||
ON SalesItems
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE Products SET InStock = FALSE WHERE ProductID = NEW.ProductID;
|
||||
END;
|
||||
//
|
||||
DELIMITER ;
|
||||
|
||||
-- Trigger to calculate and update delivery fee
|
||||
DELIMITER //
|
||||
CREATE TRIGGER calculate_delivery_fee
|
||||
BEFORE INSERT
|
||||
ON Sales
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
DECLARE total_weight DECIMAL(10, 2);
|
||||
|
||||
SELECT SUM(p.Weight * si.Quantity)
|
||||
INTO total_weight
|
||||
FROM SalesItems si
|
||||
JOIN Products p ON si.ProductID = p.ProductID
|
||||
WHERE si.SaleID = NEW.SaleID;
|
||||
|
||||
SET NEW.DeliveryFee = total_weight * 6.50;
|
||||
SET NEW.TotalAmount = NEW.TotalAmount + NEW.DeliveryFee;
|
||||
END;
|
||||
//
|
||||
DELIMITER ;
|
||||
|
||||
-- Insert data into Member table
|
||||
INSERT INTO Member (FirstName, LastName, MiddleInitial, DateOfBirth, Address, Gender, PhoneNumber, EmailAddress,
|
||||
SocialSecurityNumber, MembershipStartDate, MemberType)
|
||||
VALUES ('John', 'Doe', 'A', '1980-05-15', '123 Main St, Anytown, USA', 'Male', '555-123-4567', 'john.doe@email.com',
|
||||
'123-45-6789', '2022-01-01', 'Donor'),
|
||||
('Jane', 'Smith', 'B', '1985-08-22', '456 Elm St, Somewhere, USA', 'Female', '555-987-6543',
|
||||
'jane.smith@email.com', '987-65-4321', '2022-02-15', 'Client'),
|
||||
('Bob', 'Johnson', 'C', '1975-03-10', '789 Oak St, Nowhere, USA', 'Male', '555-246-8135',
|
||||
'bob.johnson@email.com', '246-81-3579', '2020-03-01', 'Employee'),
|
||||
('Darton', 'Johnson', 'C', '1972-11-11', '789 Oak St, Nowhere, USA', 'Male', '561-216-8835',
|
||||
'darton.johnson@email.com', '148-46-2580', '2020-03-01', 'Employee'),
|
||||
('Alice', 'Williams', 'D', '1990-11-30', '321 Pine St, Everywhere, USA', 'Female', '555-369-2580',
|
||||
'alice.williams@email.com', '369-25-8014', '2022-04-15', 'Donor');
|
||||
|
||||
-- Insert data into Donations table
|
||||
INSERT INTO Donations (DonorID, DonationDate, DonationType, DonationAmount)
|
||||
VALUES (1, '2023-01-15', 'Money', 500.00),
|
||||
(4, '2023-02-20', 'Products', NULL),
|
||||
(1, '2023-03-10', 'Money', 250.00),
|
||||
(4, '2023-04-05', 'Products', NULL);
|
||||
|
||||
-- Insert data into Products table
|
||||
INSERT INTO Products (Description, DonationDate, SellingPrice, Weight, InStock, DonationID)
|
||||
VALUES ('Laptop', '2023-02-20', 300.00, 2.5, TRUE, 2),
|
||||
('Chair', '2023-02-20', 50.00, 5.0, TRUE, 2),
|
||||
('Bookshelf', '2023-04-05', 100.00, 20.0, TRUE, 4),
|
||||
('Microwave', '2023-04-05', 75.00, 10.0, TRUE, 4);
|
||||
|
||||
-- Insert data into Sales table
|
||||
INSERT INTO Sales (SaleDate, TotalAmount, ClientID, DeliveryFee)
|
||||
VALUES ('2023-05-01', 350.00, 2, NULL),
|
||||
('2023-05-15', 100.00, 2, NULL);
|
||||
|
||||
-- Insert data into SalesItems table
|
||||
INSERT INTO SalesItems (SaleID, ProductID, Quantity)
|
||||
VALUES (1, 1, 1),
|
||||
(1, 2, 1),
|
||||
(2, 3, 1);
|
||||
|
||||
-- Insert data into Employees table
|
||||
INSERT INTO Employees (EmployeeID, JobTitle, Salary)
|
||||
VALUES (3, 'President', 100000.00),
|
||||
(4, 'Cashier', 30000.00);
|
||||
|
||||
-- Insert data into Expenses table
|
||||
INSERT INTO Expenses (ApprovedByID, PaymentDate, Amount, ExpenseType, Description)
|
||||
VALUES (3, '2023-06-01', 2000.00, 'Rent', 'Monthly office rent'),
|
||||
(3, '2023-06-05', 500.00, 'Bill Payment', 'Electricity bill'),
|
||||
(3, '2023-06-10', 1000.00, 'Charity Payment', 'Donation to local food bank');
|
||||
|
||||
-- Part 2 Question 1
|
||||
# List the details of all the clients that are not volunteer employees and donors as well.
|
||||
# Details include client ID, first-name, last-name, middle-initial, date-of-birth, address,
|
||||
# gender, phone-number, email-address, social-security-number, job-title, and the start date
|
||||
# of membership
|
||||
SELECT
|
||||
m.MemberID AS ClientID,
|
||||
m.FirstName,
|
||||
m.LastName,
|
||||
m.MiddleInitial,
|
||||
m.DateOfBirth,
|
||||
m.Address,
|
||||
m.Gender,
|
||||
m.PhoneNumber,
|
||||
m.EmailAddress,
|
||||
m.SocialSecurityNumber,
|
||||
e.JobTitle,
|
||||
m.MembershipStartDate
|
||||
FROM
|
||||
Member m
|
||||
LEFT JOIN Employees e ON m.MemberID = e.EmployeeID
|
||||
WHERE
|
||||
m.MemberType = 'Client'
|
||||
AND m.MemberID IN (
|
||||
SELECT DISTINCT DonorID
|
||||
FROM Donations
|
||||
WHERE DonorID IS NOT NULL
|
||||
)
|
||||
AND (e.EmployeeID IS NULL OR e.Salary > 0);
|
Loading…
x
Reference in New Issue
Block a user