├── .gitattributes
├── .gitignore
├── .idea
├── .gitignore
├── artifacts
│ └── StoreManagementSystem_jar.xml
├── compiler.xml
├── dataSources.xml
├── description.html
├── encodings.xml
├── gradle.xml
├── inspectionProfiles
│ └── Project_Default.xml
├── libraries
│ └── sqlite_jdbc_3_31_1.xml
├── misc.xml
├── modules.xml
├── sqldialects.xml
├── uiDesigner.xml
└── vcs.xml
├── LICENSE
├── README.md
├── StoreManagementSystem.iml
├── database.png
├── diagram.png
├── diagram.uml
├── docs
├── allclasses-frame.html
├── allclasses-noframe.html
├── app
│ ├── Main.html
│ ├── class-use
│ │ └── Main.html
│ ├── package-frame.html
│ ├── package-summary.html
│ ├── package-tree.html
│ ├── package-use.html
│ └── utils
│ │ ├── HelperMethods.html
│ │ ├── PasswordUtils.html
│ │ ├── class-use
│ │ ├── HelperMethods.html
│ │ └── PasswordUtils.html
│ │ ├── package-frame.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
├── constant-values.html
├── controller
│ ├── LoginController.html
│ ├── RegisterController.html
│ ├── UserSessionController.html
│ ├── admin
│ │ ├── MainDashboardController.html
│ │ ├── class-use
│ │ │ └── MainDashboardController.html
│ │ ├── package-frame.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ ├── package-use.html
│ │ └── pages
│ │ │ ├── CustomersController.html
│ │ │ ├── HomeController.html
│ │ │ ├── OrdersController.html
│ │ │ ├── ProductsController.html
│ │ │ ├── SettingsController.html
│ │ │ ├── class-use
│ │ │ ├── CustomersController.html
│ │ │ ├── HomeController.html
│ │ │ ├── OrdersController.html
│ │ │ ├── ProductsController.html
│ │ │ └── SettingsController.html
│ │ │ ├── package-frame.html
│ │ │ ├── package-summary.html
│ │ │ ├── package-tree.html
│ │ │ └── package-use.html
│ ├── class-use
│ │ ├── LoginController.html
│ │ ├── RegisterController.html
│ │ └── UserSessionController.html
│ ├── package-frame.html
│ ├── package-summary.html
│ ├── package-tree.html
│ ├── package-use.html
│ └── user
│ │ ├── UserMainDashboardController.html
│ │ ├── class-use
│ │ └── UserMainDashboardController.html
│ │ ├── package-frame.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ ├── package-use.html
│ │ └── pages
│ │ ├── UserHomeController.html
│ │ ├── UserOrdersController.html
│ │ ├── UserProductsController.html
│ │ ├── class-use
│ │ ├── UserHomeController.html
│ │ ├── UserOrdersController.html
│ │ └── UserProductsController.html
│ │ ├── package-frame.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
├── deprecated-list.html
├── help-doc.html
├── index-files
│ ├── index-1.html
│ ├── index-10.html
│ ├── index-11.html
│ ├── index-12.html
│ ├── index-13.html
│ ├── index-14.html
│ ├── index-15.html
│ ├── index-16.html
│ ├── index-17.html
│ ├── index-18.html
│ ├── index-19.html
│ ├── index-2.html
│ ├── index-20.html
│ ├── index-3.html
│ ├── index-4.html
│ ├── index-5.html
│ ├── index-6.html
│ ├── index-7.html
│ ├── index-8.html
│ └── index-9.html
├── index.html
├── model
│ ├── Customer.html
│ ├── Datasource.html
│ ├── Order.html
│ ├── Product.html
│ ├── User.html
│ ├── class-use
│ │ ├── Customer.html
│ │ ├── Datasource.html
│ │ ├── Order.html
│ │ ├── Product.html
│ │ └── User.html
│ ├── package-frame.html
│ ├── package-summary.html
│ ├── package-tree.html
│ └── package-use.html
├── overview-frame.html
├── overview-summary.html
├── overview-tree.html
├── package-list
├── script.js
└── stylesheet.css
├── screenshots
├── 1.login.png
├── 10.admin-addproduct.png
├── 11.search.png
├── 2.register.png
├── 3.admin-home.png
├── 4.admin-products.png
├── 5.admin-orders.png
├── 6.admin-customers.png
├── 7.customer-home.png
├── 8.customer-products.png
└── 9.customer-orders.png
└── src
├── app
├── Main.java
├── db
│ └── store_manager.sqlite
└── utils
│ ├── HelperMethods.java
│ └── PasswordUtils.java
├── controller
├── LoginController.java
├── RegisterController.java
├── UserSessionController.java
├── admin
│ ├── MainDashboardController.java
│ └── pages
│ │ ├── CustomersController.java
│ │ ├── HomeController.java
│ │ ├── OrdersController.java
│ │ ├── SettingsController.java
│ │ └── products
│ │ ├── AddProductController.java
│ │ ├── EditProductController.java
│ │ ├── ProductsController.java
│ │ └── ViewProductController.java
└── user
│ ├── UserMainDashboardController.java
│ └── pages
│ ├── UserHomeController.java
│ ├── UserOrdersController.java
│ └── UserProductsController.java
├── model
├── Categories.java
├── Customer.java
├── Datasource.java
├── Order.java
├── Product.java
└── User.java
└── view
├── admin
├── main-dashboard.fxml
└── pages
│ ├── customers
│ ├── add-customer.fxml
│ ├── customers.fxml
│ ├── edit-customer.fxml
│ └── view-customer.fxml
│ ├── home
│ └── home.fxml
│ ├── orders
│ └── orders.fxml
│ ├── products
│ ├── add-product.fxml
│ ├── edit-product.fxml
│ ├── products.fxml
│ └── view-product.fxml
│ └── settings
│ └── settings.fxml
├── login.fxml
├── register.fxml
├── resources
├── css
│ ├── bootstrap3.css
│ ├── dashboard.css
│ └── login.css
└── img
│ └── brand
│ ├── fav.png
│ ├── loginBg.jpg
│ ├── sm-logo-admin.png
│ ├── sm-logo.png
│ ├── sm-logo.psd
│ └── store-manager-logo.ai
└── user
├── main-dashboard.fxml
└── pages
├── home
└── home.fxml
├── orders
└── orders.fxml
└── products
├── products.fxml
└── view-product.fxml
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Compiled class file
2 | *.class
3 |
4 | # Log file
5 | *.log
6 |
7 | # BlueJ files
8 | *.ctxt
9 |
10 | # Mobile Tools for Java (J2ME)
11 | .mtj.tmp/
12 |
13 | # Package Files #
14 | *.jar
15 | *.war
16 | *.nar
17 | *.ear
18 | *.zip
19 | *.tar.gz
20 | *.rar
21 |
22 | # Database Files
23 | *.db
24 | *.sq
25 | *.sqm
26 | *.sql
27 | *.sqlite
28 |
29 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
30 | hs_err_pid*
31 |
32 | #out dir
33 |
34 | out/
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Datasource local storage ignored files
5 | /../../../../../../../../:\Users\sajmi\OneDrive\Documents\GitHub\StoreManager\.idea/dataSources/
6 | /dataSources.local.xml
7 | # Editor-based HTTP Client requests
8 | /httpRequests/
9 |
--------------------------------------------------------------------------------
/.idea/artifacts/StoreManagementSystem_jar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | $PROJECT_DIR$/out/artifacts/StoreManagementSystem_jar
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/.idea/dataSources.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | sqlite.xerial
6 | true
7 | org.sqlite.JDBC
8 | jdbc:sqlite:$PROJECT_DIR$/src/app/db/store_manager.sqlite
9 | $ProjectFileDir$
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/description.html:
--------------------------------------------------------------------------------
1 | Simple JavaFX 2.0 application that includes simple .fxml file with attached controller and Main class to quick start. Artifact to build JavaFX application is provided.
2 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/.idea/libraries/sqlite_jdbc_3_31_1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/sqldialects.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Sajmir Doko
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Store Management System
2 |
3 | The **Store Management System** is a JavaFX application that offers essential CRUD (Create, Read, Update, Delete) functionalities for managing a physical store's operations digitally. This application is designed to help store owners and clients streamline their everyday activities efficiently.
4 |
5 | ## Table of Contents
6 |
7 | - [Getting Started](#getting-started)
8 | - [Technologies Used](#technologies-used)
9 | - [Features](#features)
10 | - [User Types](#user-types)
11 | - [Credentials](#credentials)
12 | - [Screenshots](#screenshots)
13 |
14 | ## Getting Started
15 |
16 | To get started with the **Store Management System**, follow these steps:
17 |
18 | 1. Clone the repository:
19 |
20 | ```bash
21 | git clone https://github.com/sajdoko/StoreManagementSystem.git
22 | ```
23 | 2. Open the project in your preferred integrated development environment, such as IntelliJ IDEA.
24 | 3. Configure your project to use Amazon Corretto 8 as the Java Development Kit (JDK).
25 | 4. Make sure you have JavaFX installed for the graphical user interface.
26 | 5. Set up your database using SQLite.
27 | 6. Build and run the application.
28 |
29 | ## Technologies Used
30 |
31 | The Store Management System is developed using the following technologies:
32 | * Integrated Development Environment (IDE): IntelliJ IDEA
33 | * Software Development Kit (SDK): Amazon Corretto 8
34 | * Graphical User Interface (GUI): JavaFX
35 | * Database: SQLite
36 |
37 | ## Features
38 |
39 | ### Store Administrator
40 |
41 | * Login/Logout: Secure access to the system with user authentication.
42 | * Dashboard Overview: Get a quick overview of key metrics and activities.
43 | * Product Management: Create, view, update, search, and delete product records.
44 | * Customer Orders: View a list of customer orders.
45 | * Customer Management: List, search, and delete customer records.
46 |
47 | ### Client
48 |
49 | * Registration/Login/Logout: Clients can create an account or log in for personalized experiences.
50 | * Dashboard Overview: Clients have access to an overview of their activities.
51 | * Product Listings: Browse and search for available products.
52 | * Product Purchase: Buy products easily.
53 | * Order History: View their own order history.
54 |
55 | ## User Types
56 | * Store Administrator
57 | * Client
58 |
59 | ## Credentials
60 | Use the following credentials to access the system:
61 |
62 | | Username | Password |
63 | | -------- | -------------- |
64 | | sajdoko | 1 |
65 | | testuser | 123456 |
66 |
67 | ## Screenshots
68 |
69 |
70 | ### Store Administrator View
71 | 
72 |
73 | ### Client View
74 | 
75 |
--------------------------------------------------------------------------------
/StoreManagementSystem.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/database.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/database.png
--------------------------------------------------------------------------------
/diagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/diagram.png
--------------------------------------------------------------------------------
/diagram.uml:
--------------------------------------------------------------------------------
1 |
2 |
3 | JAVA
4 |
5 |
6 | controller.RegisterController
7 | model.Customer
8 | controller.user.pages.UserOrdersController
9 | controller.admin.pages.SettingsController
10 | app.utils.PasswordUtils
11 | controller.admin.pages.products.AddProductController
12 | controller.UserSessionController
13 | model.Order
14 | app.Main
15 | model.Categories
16 | app.utils.HelperMethods
17 | controller.admin.pages.products.ViewProductController
18 | controller.admin.pages.products.ProductsController
19 | model.User
20 | model.Datasource
21 | controller.user.pages.UserProductsController
22 | controller.admin.pages.HomeController
23 | model.Product
24 | controller.admin.pages.OrdersController
25 | controller.admin.MainDashboardController
26 | controller.user.UserMainDashboardController
27 | controller.admin.pages.CustomersController
28 | controller.LoginController
29 | controller.user.pages.UserHomeController
30 | controller.admin.pages.products.EditProductController
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | Constructors
55 | Inner Classes
56 | Methods
57 |
58 | All
59 | private
60 |
61 |
62 |
--------------------------------------------------------------------------------
/docs/allclasses-frame.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | All Classes
7 |
8 |
9 |
10 |
11 |
12 | All Classes
13 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/docs/allclasses-noframe.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | All Classes
7 |
8 |
9 |
10 |
11 |
12 | All Classes
13 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/docs/app/class-use/Main.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Class app.Main
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of app.Main
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/app/package-frame.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | app
7 |
8 |
9 |
10 |
11 |
12 |
13 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/docs/app/package-tree.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | app Class Hierarchy
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
79 |
80 |
Class Hierarchy
81 |
82 | - java.lang.Object
83 |
84 | - javafx.application.Application
85 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
112 |
113 |
114 | - Prev
115 | - Next
116 |
117 |
121 |
124 |
125 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
--------------------------------------------------------------------------------
/docs/app/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Package app
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of app
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/app/utils/class-use/HelperMethods.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Class app.utils.HelperMethods
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of app.utils.HelperMethods
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/app/utils/class-use/PasswordUtils.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Class app.utils.PasswordUtils
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of app.utils.PasswordUtils
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/app/utils/package-frame.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | app.utils
7 |
8 |
9 |
10 |
11 |
12 |
13 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/docs/app/utils/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Package app.utils
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of app.utils
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/controller/admin/class-use/MainDashboardController.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Class controller.admin.MainDashboardController
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of controller.admin.MainDashboardController
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/controller/admin/package-frame.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | controller.admin
7 |
8 |
9 |
10 |
11 |
12 |
13 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/docs/controller/admin/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Package controller.admin
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of controller.admin
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/controller/admin/pages/class-use/CustomersController.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Class controller.admin.pages.CustomersController
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of controller.admin.pages.CustomersController
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/controller/admin/pages/class-use/HomeController.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Class controller.admin.pages.HomeController
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of controller.admin.pages.HomeController
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/controller/admin/pages/class-use/OrdersController.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Class controller.admin.pages.OrdersController
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of controller.admin.pages.OrdersController
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/controller/admin/pages/class-use/SettingsController.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Class controller.admin.pages.SettingsController
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of controller.admin.pages.SettingsController
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/controller/admin/pages/package-frame.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | controller.admin.pages
7 |
8 |
9 |
10 |
11 |
12 |
13 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/docs/controller/admin/pages/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Package controller.admin.pages
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of controller.admin.pages
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/controller/class-use/LoginController.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Class controller.LoginController
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of controller.LoginController
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/controller/class-use/RegisterController.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Class controller.RegisterController
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of controller.RegisterController
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/controller/package-frame.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | controller
7 |
8 |
9 |
10 |
11 |
12 |
13 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/docs/controller/user/class-use/UserMainDashboardController.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Class controller.user.UserMainDashboardController
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of controller.user.UserMainDashboardController
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/controller/user/package-frame.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | controller.user
7 |
8 |
9 |
10 |
11 |
12 |
13 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/docs/controller/user/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Package controller.user
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of controller.user
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/controller/user/pages/class-use/UserHomeController.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Class controller.user.pages.UserHomeController
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of controller.user.pages.UserHomeController
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/controller/user/pages/class-use/UserOrdersController.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Class controller.user.pages.UserOrdersController
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of controller.user.pages.UserOrdersController
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/controller/user/pages/package-frame.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | controller.user.pages
7 |
8 |
9 |
10 |
11 |
12 |
13 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/docs/controller/user/pages/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Uses of Package controller.user.pages
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
75 | No usage of controller.user.pages
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/deprecated-list.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Deprecated List
7 |
8 |
9 |
10 |
11 |
12 |
22 |
25 |
26 |
44 |
71 |
72 |
76 |
77 |
95 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Generated Documentation (Untitled)
7 |
60 |
61 |
75 |
76 |
--------------------------------------------------------------------------------
/docs/model/package-frame.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | model
7 |
8 |
9 |
10 |
11 |
12 |
13 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/docs/overview-frame.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Overview List
7 |
8 |
9 |
10 |
11 |
12 |
13 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/docs/package-list:
--------------------------------------------------------------------------------
1 | app
2 | app.utils
3 | controller
4 | controller.admin
5 | controller.admin.pages
6 | controller.user
7 | controller.user.pages
8 | model
9 |
--------------------------------------------------------------------------------
/docs/script.js:
--------------------------------------------------------------------------------
1 | function show(type)
2 | {
3 | count = 0;
4 | for (var key in methods) {
5 | var row = document.getElementById(key);
6 | if ((methods[key] & type) != 0) {
7 | row.style.display = '';
8 | row.className = (count++ % 2) ? rowColor : altColor;
9 | }
10 | else
11 | row.style.display = 'none';
12 | }
13 | updateTabs(type);
14 | }
15 |
16 | function updateTabs(type)
17 | {
18 | for (var value in tabs) {
19 | var sNode = document.getElementById(tabs[value][0]);
20 | var spanNode = sNode.firstChild;
21 | if (value == type) {
22 | sNode.className = activeTableTab;
23 | spanNode.innerHTML = tabs[value][1];
24 | }
25 | else {
26 | sNode.className = tableTab;
27 | spanNode.innerHTML = "" + tabs[value][1] + "";
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/screenshots/1.login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/screenshots/1.login.png
--------------------------------------------------------------------------------
/screenshots/10.admin-addproduct.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/screenshots/10.admin-addproduct.png
--------------------------------------------------------------------------------
/screenshots/11.search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/screenshots/11.search.png
--------------------------------------------------------------------------------
/screenshots/2.register.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/screenshots/2.register.png
--------------------------------------------------------------------------------
/screenshots/3.admin-home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/screenshots/3.admin-home.png
--------------------------------------------------------------------------------
/screenshots/4.admin-products.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/screenshots/4.admin-products.png
--------------------------------------------------------------------------------
/screenshots/5.admin-orders.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/screenshots/5.admin-orders.png
--------------------------------------------------------------------------------
/screenshots/6.admin-customers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/screenshots/6.admin-customers.png
--------------------------------------------------------------------------------
/screenshots/7.customer-home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/screenshots/7.customer-home.png
--------------------------------------------------------------------------------
/screenshots/8.customer-products.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/screenshots/8.customer-products.png
--------------------------------------------------------------------------------
/screenshots/9.customer-orders.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/screenshots/9.customer-orders.png
--------------------------------------------------------------------------------
/src/app/Main.java:
--------------------------------------------------------------------------------
1 | package app;
2 |
3 | import javafx.application.Application;
4 | import javafx.application.Platform;
5 | import javafx.fxml.FXMLLoader;
6 | import javafx.scene.Parent;
7 | import javafx.scene.Scene;
8 | import javafx.scene.image.Image;
9 | import javafx.stage.Stage;
10 | import model.Datasource;
11 |
12 | public class Main extends Application {
13 |
14 | /**
15 | * {@inheritDoc}
16 | * @param primaryStage Accepts Stage.
17 | */
18 | @Override
19 | public void start(Stage primaryStage) throws Exception{
20 | Parent root = FXMLLoader.load(getClass().getResource("../view/login.fxml"));
21 | primaryStage.setTitle("Store Management System");
22 | primaryStage.getIcons().add(new Image("/view/resources/img/brand/fav.png"));
23 | primaryStage.setScene(new Scene(root, 1280, 800));
24 | primaryStage.show();
25 |
26 | }
27 |
28 | /**
29 | * {@inheritDoc}
30 | * This method initializes the application and opens the connection to the database.
31 | * @throws Exception If an input or exception occurred.
32 | */
33 | @Override
34 | public void init() throws Exception {
35 | super.init();
36 | if(!Datasource.getInstance().open()) {
37 | System.out.println("FATAL ERROR: Couldn't connect to database");
38 | Platform.exit();
39 | }
40 | }
41 |
42 | /**
43 | * {@inheritDoc}
44 | * This method stops the application and closes the connection to the database.
45 | * @throws Exception If an input or exception occurred.
46 | */
47 | @Override
48 | public void stop() throws Exception {
49 | super.stop();
50 | Datasource.getInstance().close();
51 | }
52 |
53 | /**
54 | * {@inheritDoc}
55 | * The main method.
56 | */
57 | public static void main(String[] args) {
58 | launch(args);
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/app/db/store_manager.sqlite:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/src/app/db/store_manager.sqlite
--------------------------------------------------------------------------------
/src/controller/LoginController.java:
--------------------------------------------------------------------------------
1 | package controller;
2 |
3 |
4 | import java.io.IOException;
5 | import java.sql.SQLException;
6 |
7 | import app.utils.HelperMethods;
8 | import app.utils.PasswordUtils;
9 | import javafx.event.ActionEvent;
10 | import javafx.fxml.FXML;
11 | import javafx.fxml.FXMLLoader;
12 | import javafx.scene.Node;
13 | import javafx.scene.Scene;
14 | import javafx.scene.control.PasswordField;
15 | import javafx.scene.control.TextField;
16 | import javafx.stage.Stage;
17 | import model.User;
18 |
19 | /**
20 | * This class handles the login operations of the application.
21 | * @author Sajmir Doko
22 | */
23 | public class LoginController {
24 | @FXML
25 | public TextField usernameField;
26 | @FXML
27 | public PasswordField passwordField;
28 |
29 | Stage dialogStage = new Stage();
30 | Scene scene;
31 |
32 | /**
33 | * This method handles the login button action event.
34 | * It gets the user entered data and makes the proper validations.
35 | * If the entered details are correct, it creates an new UserSessionController instance
36 | * and transitions the user screen to the appropriate dashboard.
37 | * @param event Accepts ActionEvent.
38 | * @throws IOException If an input or output exception occurred.
39 | * @throws SQLException If an SQL error occurred.
40 | * @since 1.0.0
41 | */
42 | public void handleLoginButtonAction(ActionEvent event) throws SQLException, IOException {
43 | String username = usernameField.getText();
44 | String providedPassword = passwordField.getText();
45 |
46 | if ((username == null || username.isEmpty()) || (providedPassword == null || providedPassword.isEmpty())) {
47 | HelperMethods.alertBox("Please enter the Username and Password", null, "Login Failed!");
48 | } else if (!HelperMethods.validateUsername(username)) {
49 | HelperMethods.alertBox("Please enter a valid Username!", null, "Login Failed!");
50 | } else {
51 |
52 | User user = model.Datasource.getInstance().getUserByUsername(username);
53 | if (user.getPassword() == null || user.getPassword().isEmpty()) {
54 | HelperMethods.alertBox("There is no user registered with that username!", null, "Login Failed!");
55 | } else {
56 | boolean passwordMatch = PasswordUtils.verifyUserPassword(providedPassword, user.getPassword(), user.getSalt());
57 |
58 | if (passwordMatch) {
59 | UserSessionController.setUserId(user.getId());
60 | UserSessionController.setUserFullName(user.getFullname());
61 | UserSessionController.setUserName(user.getUsername());
62 | UserSessionController.setUserEmail(user.getEmail());
63 | UserSessionController.setUserAdmin(user.getAdmin());
64 | UserSessionController.setUserStatus(user.getStatus());
65 |
66 | Node node = (Node) event.getSource();
67 | dialogStage = (Stage) node.getScene().getWindow();
68 | dialogStage.close();
69 | if (user.getAdmin() == 0) {
70 | scene = new Scene(FXMLLoader.load(getClass().getResource("../view/user/main-dashboard.fxml")));
71 | } else if (user.getAdmin() == 1) {
72 | scene = new Scene(FXMLLoader.load(getClass().getResource("../view/admin/main-dashboard.fxml")));
73 | }
74 | dialogStage.setScene(scene);
75 | dialogStage.show();
76 | } else {
77 | HelperMethods.alertBox("Please enter correct Email and Password", null, "Login Failed!");
78 | }
79 | }
80 | }
81 | }
82 |
83 | /**
84 | * This method handles the register button action event.
85 | * It transfers the user screen to the registration view.
86 | * @param actionEvent Accepts ActionEvent.
87 | * @throws IOException If an input or output exception occurred.
88 | * @since 1.0.0
89 | */
90 | public void handleRegisterButtonAction(ActionEvent actionEvent) throws IOException {
91 | Stage dialogStage;
92 | Node node = (Node) actionEvent.getSource();
93 | dialogStage = (Stage) node.getScene().getWindow();
94 | dialogStage.close();
95 | Scene scene = new Scene(FXMLLoader.load(getClass().getResource("/view/register.fxml")));
96 | dialogStage.setScene(scene);
97 | dialogStage.show();
98 | }
99 | }
100 |
--------------------------------------------------------------------------------
/src/controller/UserSessionController.java:
--------------------------------------------------------------------------------
1 | package controller;
2 |
3 |
4 | /**
5 | * This class acts as an user session.
6 | * It stores logged in user details.
7 | * It is constructed with the Singleton Design Pattern.
8 | *
9 | * This pattern involves a single class which is responsible to create an object while making sure that only single
10 | * object gets created. This class provides a way to access its only object which can be accessed directly without
11 | * need to instantiate the object of the class.
12 | *
13 | */
14 | public class UserSessionController {
15 |
16 | private static int userId;
17 | private static String userFullName;
18 | private static String userName;
19 | private static String userEmail;
20 | private static String userStatus;
21 | private static int userAdmin;
22 |
23 | /**
24 | * Create an object of UserSessionController
25 | */
26 | private static final UserSessionController instance = new UserSessionController();
27 |
28 | /**
29 | * Make the constructor private so that this class cannot be instantiated
30 | */
31 | private UserSessionController() { }
32 |
33 | /**
34 | * Get the only object available
35 | * @return UserSessionController instance.
36 | */
37 | public static UserSessionController getInstance() {
38 | return instance;
39 | }
40 |
41 |
42 | public static String getUserFullName() {
43 | return userFullName;
44 | }
45 |
46 | public static int getUserId() {
47 | return userId;
48 | }
49 |
50 | public static String getUserName() {
51 | return userName;
52 | }
53 |
54 | public static String getUserEmail() {
55 | return userEmail;
56 | }
57 |
58 | public static String getUserStatus() {
59 | return userStatus;
60 | }
61 |
62 | public static int getUserAdmin() {
63 | return userAdmin;
64 | }
65 |
66 | public static void setUserFullName(String userFullName) {
67 | UserSessionController.userFullName = userFullName;
68 | }
69 |
70 | public static void setUserName(String userName) {
71 | UserSessionController.userName = userName;
72 | }
73 |
74 | public static void setUserEmail(String userEmail) {
75 | UserSessionController.userEmail = userEmail;
76 | }
77 |
78 | public static void setUserStatus(String userStatus) {
79 | UserSessionController.userStatus = userStatus;
80 | }
81 |
82 | public static void setUserAdmin(int userAdmin) {
83 | UserSessionController.userAdmin = userAdmin;
84 | }
85 |
86 | public static void setUserId(int userId) {
87 | UserSessionController.userId = userId;
88 | }
89 |
90 | public static void cleanUserSession() {
91 | userId = 0;
92 | userFullName = null;
93 | userName = null;
94 | userEmail = null;
95 | userAdmin = 0;
96 | userStatus = null;
97 | }
98 |
99 | }
100 |
--------------------------------------------------------------------------------
/src/controller/admin/pages/HomeController.java:
--------------------------------------------------------------------------------
1 | package controller.admin.pages;
2 |
3 | import javafx.concurrent.Task;
4 | import javafx.fxml.FXML;
5 | import javafx.scene.control.Label;
6 | import model.Datasource;
7 |
8 | /**
9 | * This class handles the admin home page.
10 | * @author Sajmir Doko
11 | */
12 | public class HomeController {
13 |
14 | @FXML
15 | public Label productsCount;
16 | @FXML
17 | public Label customersCount;
18 |
19 | /**
20 | * This method gets the products count for the admin dashboard and sets it to the productsCount label.
21 | * @since 1.0.0
22 | */
23 | public void getDashboardProdCount() {
24 | Task getDashProdCount = new Task() {
25 | @Override
26 | protected Integer call() {
27 | return Datasource.getInstance().countAllProducts();
28 | }
29 | };
30 |
31 | getDashProdCount.setOnSucceeded(e -> {
32 | productsCount.setText(String.valueOf(getDashProdCount.valueProperty().getValue()));
33 | });
34 |
35 | new Thread(getDashProdCount).start();
36 | }
37 |
38 | /**
39 | * This method gets the customers count for the admin dashboard and sets it to the customersCount label.
40 | * @since 1.0.0
41 | */
42 | public void getDashboardCostCount() {
43 | Task getDashCostCount = new Task() {
44 | @Override
45 | protected Integer call() {
46 | return Datasource.getInstance().countAllCustomers();
47 | }
48 | };
49 |
50 | getDashCostCount.setOnSucceeded(e -> {
51 | customersCount.setText(String.valueOf(getDashCostCount.valueProperty().getValue()));
52 | });
53 |
54 | new Thread(getDashCostCount).start();
55 | }
56 |
57 | // TODO
58 | // Add best sellers
59 | // Add latest sold products
60 | }
61 |
--------------------------------------------------------------------------------
/src/controller/admin/pages/OrdersController.java:
--------------------------------------------------------------------------------
1 | package controller.admin.pages;
2 |
3 | import javafx.collections.FXCollections;
4 | import javafx.collections.ObservableList;
5 | import javafx.concurrent.Task;
6 | import javafx.event.ActionEvent;
7 | import javafx.fxml.FXML;
8 | import javafx.scene.control.*;
9 | import model.Order;
10 | import model.Datasource;
11 |
12 | /**
13 | * This class handles the admin orders page.
14 | * @author Sajmir Doko
15 | */
16 | public class OrdersController {
17 |
18 | @FXML
19 | private TableView tableOrdersPage;
20 |
21 | /**
22 | * This method lists all the orders to the view table.
23 | * It starts a new Task, gets all the products from the database then bind the results to the view.
24 | * @since 1.0.0
25 | */
26 | @FXML
27 | public void listOrders() {
28 | Task> getAllOrdersTask = new Task>() {
29 | @Override
30 | protected ObservableList call() {
31 | return FXCollections.observableArrayList(Datasource.getInstance().getAllOrders(Datasource.ORDER_BY_NONE));
32 | }
33 | };
34 | tableOrdersPage.itemsProperty().bind(getAllOrdersTask.valueProperty());
35 | new Thread(getAllOrdersTask).start();
36 | }
37 |
38 | public void btnOrdersSearchOnAction(ActionEvent actionEvent) {
39 | // TODO
40 | // Add orders search functionality.
41 | System.out.println("TODO: Add orders search functionality.");
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/controller/admin/pages/SettingsController.java:
--------------------------------------------------------------------------------
1 | package controller.admin.pages;
2 |
3 | public class SettingsController {
4 | // TODO
5 | // Options Page
6 | }
7 |
--------------------------------------------------------------------------------
/src/controller/admin/pages/products/AddProductController.java:
--------------------------------------------------------------------------------
1 | package controller.admin.pages.products;
2 |
3 | import javafx.collections.FXCollections;
4 | import javafx.concurrent.Task;
5 | import javafx.fxml.FXML;
6 | import javafx.scene.control.*;
7 | import javafx.scene.text.Text;
8 | import model.Categories;
9 | import model.Datasource;
10 |
11 | /**
12 | * {@inheritDoc}
13 | */
14 | public class AddProductController extends ProductsController {
15 |
16 | @FXML
17 | public ComboBox fieldAddProductCategoryId;
18 | public TextField fieldAddProductName;
19 | public TextField fieldAddProductPrice;
20 | public TextField fieldAddProductQuantity;
21 | public TextArea fieldAddProductDescription;
22 | public Text viewProductResponse;
23 |
24 |
25 | @FXML
26 | private void initialize() {
27 | fieldAddProductCategoryId.setItems(FXCollections.observableArrayList(Datasource.getInstance().getProductCategories(Datasource.ORDER_BY_ASC)));
28 |
29 | TextFormatter textFormatterDouble = formatDoubleField();
30 | TextFormatter textFormatterInt = formatIntField();
31 | fieldAddProductPrice.setTextFormatter(textFormatterDouble);
32 | fieldAddProductQuantity.setTextFormatter(textFormatterInt);
33 | }
34 |
35 | /**
36 | * This private method handles the add product button functionality.
37 | * It validates user input fields and adds the values to the database.
38 | * @since 1.0.0
39 | */
40 | @FXML
41 | private void btnAddProductOnAction() {
42 | Categories category = fieldAddProductCategoryId.getSelectionModel().getSelectedItem();
43 | int cat_id = 0;
44 | if (category != null) {
45 | cat_id = category.getId();
46 | }
47 |
48 | assert category != null;
49 | if (areProductInputsValid(fieldAddProductName.getText(), fieldAddProductDescription.getText(), fieldAddProductPrice.getText(), fieldAddProductQuantity.getText(), cat_id)) {
50 |
51 | String productName = fieldAddProductName.getText();
52 | String productDescription = fieldAddProductDescription.getText();
53 | double productPrice = Double.parseDouble(fieldAddProductPrice.getText());
54 | int productQuantity = Integer.parseInt(fieldAddProductQuantity.getText());
55 | int productCategoryId = category.getId();
56 |
57 | Task addProductTask = new Task() {
58 | @Override
59 | protected Boolean call() {
60 | return Datasource.getInstance().insertNewProduct(productName, productDescription, productPrice, productQuantity, productCategoryId);
61 | }
62 | };
63 |
64 | addProductTask.setOnSucceeded(e -> {
65 | if (addProductTask.valueProperty().get()) {
66 | viewProductResponse.setVisible(true);
67 | System.out.println("Product added!");
68 | }
69 | });
70 |
71 | new Thread(addProductTask).start();
72 | }
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/src/controller/admin/pages/products/ViewProductController.java:
--------------------------------------------------------------------------------
1 | package controller.admin.pages.products;
2 |
3 | import javafx.collections.FXCollections;
4 | import javafx.collections.ObservableList;
5 | import javafx.concurrent.Task;
6 | import javafx.fxml.FXML;
7 | import javafx.scene.control.ComboBox;
8 | import javafx.scene.control.TextArea;
9 | import javafx.scene.control.TextField;
10 | import javafx.scene.text.Text;
11 | import model.Categories;
12 | import model.Datasource;
13 | import model.Product;
14 |
15 | /**
16 | * {@inheritDoc}
17 | */
18 | public class ViewProductController extends ProductsController {
19 |
20 | @FXML
21 | public TextField fieldViewProductName;
22 | public TextField fieldViewProductPrice;
23 | public TextField fieldViewProductQuantity;
24 | public ComboBox fieldViewProductCategoryId;
25 | public TextArea fieldViewProductDescription;
26 | public Text viewProductName;
27 |
28 | @FXML
29 | private void initialize() {
30 | fieldViewProductCategoryId.setItems(FXCollections.observableArrayList(Datasource.getInstance().getProductCategories(Datasource.ORDER_BY_ASC)));
31 | }
32 |
33 | /**
34 | * This method gets the data for one product from the database and binds the values to viewing fields.
35 | * @param product_id Product id.
36 | * @since 1.0.0
37 | */
38 | public void fillViewingProductFields(int product_id) {
39 | Task> fillProductTask = new Task>() {
40 | @Override
41 | protected ObservableList call() {
42 | return FXCollections.observableArrayList(
43 | Datasource.getInstance().getOneProduct(product_id));
44 | }
45 | };
46 | fillProductTask.setOnSucceeded(e -> {
47 | viewProductName.setText("Viewing: " + fillProductTask.valueProperty().getValue().get(0).getName());
48 | fieldViewProductName.setText(fillProductTask.valueProperty().getValue().get(0).getName());
49 | fieldViewProductPrice.setText(String.valueOf(fillProductTask.valueProperty().getValue().get(0).getPrice()));
50 | fieldViewProductQuantity.setText(String.valueOf(fillProductTask.valueProperty().getValue().get(0).getQuantity()));
51 | fieldViewProductDescription.setText(fillProductTask.valueProperty().getValue().get(0).getDescription());
52 |
53 | Categories category = new Categories();
54 | category.setId(fillProductTask.valueProperty().getValue().get(0).getCategory_id());
55 | category.setName(fillProductTask.valueProperty().getValue().get(0).getCategory_name());
56 | fieldViewProductCategoryId.getSelectionModel().select(category);
57 | });
58 |
59 | new Thread(fillProductTask).start();
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/controller/user/pages/UserHomeController.java:
--------------------------------------------------------------------------------
1 | package controller.user.pages;
2 |
3 | import controller.UserSessionController;
4 | import javafx.concurrent.Task;
5 | import javafx.scene.control.Label;
6 | import model.Datasource;
7 |
8 | /**
9 | * This class handles the users home page.
10 | * @author Sajmir Doko
11 | */
12 | public class UserHomeController {
13 |
14 | public Label productsCount;
15 | public Label ordersCount;
16 |
17 | /**
18 | * This method gets the products count for the user dashboard and sets it to the productsCount label.
19 | * @since 1.0.0
20 | */
21 | public void getDashboardProdCount() {
22 | Task getDashProdCount = new Task() {
23 | @Override
24 | protected Integer call() {
25 | return Datasource.getInstance().countAllProducts();
26 | }
27 | };
28 |
29 | getDashProdCount.setOnSucceeded(e -> {
30 | productsCount.setText(String.valueOf(getDashProdCount.valueProperty().getValue()));
31 | });
32 |
33 | new Thread(getDashProdCount).start();
34 | }
35 |
36 | /**
37 | * This method gets the orders count for the user dashboard and sets it to the ordersCount label.
38 | * @since 1.0.0
39 | */
40 | public void getDashboardOrdersCount() {
41 | Task getDashOrderCount = new Task() {
42 | @Override
43 | protected Integer call() {
44 | return Datasource.getInstance().countUserOrders(UserSessionController.getUserId());
45 | }
46 | };
47 |
48 | getDashOrderCount.setOnSucceeded(e -> {
49 | ordersCount.setText(String.valueOf(getDashOrderCount.valueProperty().getValue()));
50 | });
51 |
52 | new Thread(getDashOrderCount).start();
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/src/controller/user/pages/UserOrdersController.java:
--------------------------------------------------------------------------------
1 | package controller.user.pages;
2 |
3 | import controller.UserSessionController;
4 | import javafx.collections.FXCollections;
5 | import javafx.collections.ObservableList;
6 | import javafx.concurrent.Task;
7 | import javafx.event.ActionEvent;
8 | import javafx.fxml.FXML;
9 | import javafx.scene.control.TableView;
10 | import model.Datasource;
11 | import model.Order;
12 |
13 | /**
14 | * This class handles the users orders page.
15 | * @author Sajmir Doko
16 | */
17 | public class UserOrdersController {
18 | public TableView tableOrdersPage;
19 |
20 | /**
21 | * This method lists all the orders to the view table.
22 | * It starts a new Task, gets all the products from the database then bind the results to the view.
23 | * @since 1.0.0
24 | */
25 | @FXML
26 | public void listOrders() {
27 |
28 | Task> getAllOrdersTask = new Task>() {
29 | @Override
30 | protected ObservableList call() {
31 | return FXCollections.observableArrayList(Datasource.getInstance().getAllUserOrders(Datasource.ORDER_BY_NONE, UserSessionController.getUserId()));
32 | }
33 | };
34 |
35 | tableOrdersPage.itemsProperty().bind(getAllOrdersTask.valueProperty());
36 | new Thread(getAllOrdersTask).start();
37 |
38 | }
39 |
40 | public void btnOrdersSearchOnAction(ActionEvent actionEvent) {
41 | // TODO
42 | // Add orders search functionality.
43 | System.out.println("TODO: Add orders search functionality.");
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/model/Categories.java:
--------------------------------------------------------------------------------
1 | package model;
2 |
3 | public class Categories {
4 | private int id;
5 | private String name;
6 | private String description;
7 |
8 | public int getId() {
9 | return id;
10 | }
11 |
12 | public void setId(int id) {
13 | this.id = id;
14 | }
15 |
16 | public String getName() {
17 | return name;
18 | }
19 |
20 | public void setName(String name) {
21 | this.name = name;
22 | }
23 |
24 | public String getDescription() {
25 | return description;
26 | }
27 |
28 | public void setDescription(String description) {
29 | this.description = description;
30 | }
31 |
32 | @Override
33 | public String toString() {
34 | return this.getName();
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/model/Customer.java:
--------------------------------------------------------------------------------
1 | package model;
2 |
3 | public class Customer {
4 |
5 | private int id;
6 | private String fullname;
7 | private String email;
8 | private String username;
9 | private int orders;
10 | private String status;
11 |
12 | public int getId() {
13 | return id;
14 | }
15 |
16 | public void setId(int id) {
17 | this.id = id;
18 | }
19 |
20 | public String getFullname() {
21 | return fullname;
22 | }
23 |
24 | public void setFullname(String fullname) {
25 | this.fullname = fullname;
26 | }
27 |
28 | public String getEmail() {
29 | return email;
30 | }
31 |
32 | public void setEmail(String email) {
33 | this.email = email;
34 | }
35 |
36 | public String getUsername() {
37 | return username;
38 | }
39 |
40 | public void setUsername(String username) {
41 | this.username = username;
42 | }
43 |
44 | public int getOrders() {
45 | return orders;
46 | }
47 |
48 | public void setOrders(int orders) {
49 | this.orders = orders;
50 | }
51 |
52 | public String getStatus() {
53 | return status;
54 | }
55 |
56 | public void setStatus(String status) {
57 | this.status = status;
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/src/model/Order.java:
--------------------------------------------------------------------------------
1 | package model;
2 |
3 |
4 | public class Order {
5 |
6 | private int id;
7 | private int product_id;
8 | private String product_name;
9 | private int user_id;
10 | private String user_full_name;
11 | private String shipping_address;
12 | private String order_email;
13 | private String order_date;
14 | private String order_status;
15 | private double order_price;
16 |
17 | public int getId() {
18 | return id;
19 | }
20 |
21 | public void setId(int id) {
22 | this.id = id;
23 | }
24 |
25 | public int getProduct_id() {
26 | return product_id;
27 | }
28 |
29 | public void setProduct_id(int product_id) {
30 | this.product_id = product_id;
31 | }
32 |
33 | public String getProduct_name() {
34 | return product_name;
35 | }
36 |
37 | public void setProduct_name(String product_name) {
38 | this.product_name = product_name;
39 | }
40 |
41 | public int getUser_id() {
42 | return user_id;
43 | }
44 |
45 | public void setUser_id(int user_id) {
46 | this.user_id = user_id;
47 | }
48 |
49 | public String getUser_full_name() {
50 | return user_full_name;
51 | }
52 |
53 | public void setUser_full_name(String user_full_name) {
54 | this.user_full_name = user_full_name;
55 | }
56 |
57 | public String getShipping_address() {
58 | return shipping_address;
59 | }
60 |
61 | public void setShipping_address(String shipping_address) {
62 | this.shipping_address = shipping_address;
63 | }
64 |
65 | public String getOrder_email() {
66 | return order_email;
67 | }
68 |
69 | public void setOrder_email(String order_email) {
70 | this.order_email = order_email;
71 | }
72 |
73 | public String getOrder_date() {
74 | return order_date;
75 | }
76 |
77 | public void setOrder_date(String order_date) {
78 | this.order_date = order_date;
79 | }
80 |
81 | public String getOrder_status() {
82 | return order_status;
83 | }
84 |
85 | public void setOrder_status(String order_status) {
86 | this.order_status = order_status;
87 | }
88 |
89 | public double getOrder_price() {
90 | return order_price;
91 | }
92 |
93 | public void setOrder_price(double order_price) {
94 | this.order_price = order_price;
95 | }
96 | }
97 |
--------------------------------------------------------------------------------
/src/model/Product.java:
--------------------------------------------------------------------------------
1 | package model;
2 |
3 | public class Product {
4 |
5 | private int id;
6 | private String name;
7 | private String description;
8 | private double price;
9 | private int quantity;
10 | private int category_id;
11 | private String category_name;
12 | private int nr_sales;
13 |
14 | public int getId() {
15 | return id;
16 | }
17 |
18 | public void setId(int id) {
19 | this.id = id;
20 | }
21 |
22 | public String getName() {
23 | return name;
24 | }
25 |
26 | public void setName(String name) {
27 | this.name = name;
28 | }
29 |
30 | public String getDescription() {
31 | return description;
32 | }
33 |
34 | public void setDescription(String description) {
35 | this.description = description;
36 | }
37 |
38 | public double getPrice() {
39 | return price;
40 | }
41 |
42 | public void setPrice(double price) {
43 | this.price = price;
44 | }
45 |
46 | public int getQuantity() {
47 | return quantity;
48 | }
49 |
50 | public void setQuantity(int quantity) {
51 | this.quantity = quantity;
52 | }
53 |
54 | public int getCategory_id() {
55 | return category_id;
56 | }
57 |
58 | public void setCategory_id(int category_id) {
59 | this.category_id = category_id;
60 | }
61 |
62 | public String getCategory_name() {
63 | return category_name;
64 | }
65 |
66 | public void setCategory_name(String category_name) {
67 | this.category_name = category_name;
68 | }
69 |
70 | public int getNr_sales() {
71 | return nr_sales;
72 | }
73 |
74 | public void setNr_sales(int nr_sales) {
75 | this.nr_sales = nr_sales;
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/src/model/User.java:
--------------------------------------------------------------------------------
1 | package model;
2 |
3 | public class User {
4 |
5 | private int id;
6 | private String fullname;
7 | private String username;
8 | private String email;
9 | private String password;
10 | private String salt;
11 |
12 | public String getFullname() {
13 | return fullname;
14 | }
15 |
16 | public void setFullname(String fullname) {
17 | this.fullname = fullname;
18 | }
19 |
20 | public String getSalt() {
21 | return salt;
22 | }
23 |
24 | public void setSalt(String salt) {
25 | this.salt = salt;
26 | }
27 |
28 | private int admin;
29 | private String status;
30 |
31 | public int getId() {
32 | return id;
33 | }
34 |
35 | public void setId(int id) {
36 | this.id = id;
37 | }
38 |
39 | public String getName() {
40 | return fullname;
41 | }
42 |
43 | public void setName(String fullname) {
44 | this.fullname = fullname;
45 | }
46 |
47 | public String getUsername() {
48 | return username;
49 | }
50 |
51 | public void setUsername(String username) {
52 | this.username = username;
53 | }
54 |
55 | public String getEmail() {
56 | return email;
57 | }
58 |
59 | public void setEmail(String email) {
60 | this.email = email;
61 | }
62 |
63 | public String getPassword() {
64 | return password;
65 | }
66 |
67 | public void setPassword(String password) {
68 | this.password = password;
69 | }
70 |
71 | public int getAdmin() {
72 | return admin;
73 | }
74 |
75 | public void setAdmin(int admin) {
76 | this.admin = admin;
77 | }
78 |
79 | public String getStatus() {
80 | return status;
81 | }
82 |
83 | public void setStatus(String status) {
84 | this.status = status;
85 | }
86 |
87 | }
88 |
--------------------------------------------------------------------------------
/src/view/admin/pages/customers/add-customer.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/view/admin/pages/customers/customers.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
30 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/src/view/admin/pages/customers/edit-customer.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/view/admin/pages/customers/view-customer.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/view/admin/pages/home/home.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
28 |
36 |
37 |
38 |
39 |
40 |
45 |
53 |
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/src/view/admin/pages/orders/orders.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
--------------------------------------------------------------------------------
/src/view/admin/pages/products/add-product.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/src/view/admin/pages/products/edit-product.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
32 |
33 |
34 |
35 |
37 |
38 |
41 |
43 |
44 |
45 |
46 |
47 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/src/view/admin/pages/products/products.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/src/view/admin/pages/products/view-product.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/src/view/admin/pages/settings/settings.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/view/login.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
33 |
34 |
35 |
36 |
37 |
38 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/src/view/register.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
34 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/src/view/resources/css/dashboard.css:
--------------------------------------------------------------------------------
1 | @import "bootstrap3.css";
2 |
3 | .menuButton{
4 | -fx-border-width: 0px 0px 0px 5px;
5 | -fx-border-radius: 0px;
6 | -fx-background-radius: 0px;
7 | -fx-text-fill: #4E4F52;
8 | -fx-background-color: #e5e5e5;
9 | -fx-min-height: 90;
10 | }
11 |
12 | .menuButton:hover{
13 | -fx-background-color: #f3f3f3;
14 | /*-fx-text-fill: white;*/
15 | }
16 |
17 | #dashHead{
18 | -fx-background-color: #e5e5e5;
19 | }
20 | #acDashBord{
21 | -fx-background-color:#e5e5e5;
22 | }
23 |
24 | .table-view {
25 | -fx-focus-color: #cecece;
26 | -fx-effect: null;
27 | -fx-outer-border : #cecece;
28 | }
--------------------------------------------------------------------------------
/src/view/resources/css/login.css:
--------------------------------------------------------------------------------
1 | @import "bootstrap3.css";
2 |
3 | .root {
4 | -fx-background-image: url("../img/brand/loginBg.jpg");
5 | -fx-background-size: cover;
6 | -fx-background-position: bottom;
7 | -fx-background-repeat: no-repeat;
8 | }
--------------------------------------------------------------------------------
/src/view/resources/img/brand/fav.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/src/view/resources/img/brand/fav.png
--------------------------------------------------------------------------------
/src/view/resources/img/brand/loginBg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/src/view/resources/img/brand/loginBg.jpg
--------------------------------------------------------------------------------
/src/view/resources/img/brand/sm-logo-admin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/src/view/resources/img/brand/sm-logo-admin.png
--------------------------------------------------------------------------------
/src/view/resources/img/brand/sm-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/src/view/resources/img/brand/sm-logo.png
--------------------------------------------------------------------------------
/src/view/resources/img/brand/sm-logo.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/src/view/resources/img/brand/sm-logo.psd
--------------------------------------------------------------------------------
/src/view/resources/img/brand/store-manager-logo.ai:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sajdoko/StoreManagementSystem/b602fbd92c958ecd46358af8aad665e27388f7bd/src/view/resources/img/brand/store-manager-logo.ai
--------------------------------------------------------------------------------
/src/view/user/pages/home/home.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
26 |
34 |
35 |
36 |
41 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/src/view/user/pages/orders/orders.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
--------------------------------------------------------------------------------
/src/view/user/pages/products/products.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/src/view/user/pages/products/view-product.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------