/Users/johnr/Desktop/IA pdf Downloads/Criteria__P__-_Coding_Project_Upload_all_2022-05-03/IdanIA/src/idania/MainGUI.java |
1
2 nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt
3 nbfs://nbhost/SystemFileSystem/Templates/GUIForms/Application.java
4
5 package idania;
6
7 import java.io.BufferedInputStream;
8 import java.io.BufferedReader;
9 import java.io.File;
10 import java.io.FileInputStream;
11 import java.io.FileReader;
12 import java.util.ArrayList;
13 import javax.swing.JOptionPane;
14 import javax.swing.ListSelectionModel;
15 import javax.swing.table.DefaultTableModel;
16 import javax.swing.JFileChooser;
17 import javax.swing.table.TableModel;
18 import java.util.HashMap;
19 import java.util.Calendar;
20 import javazoom.jl.player.Player;
21
22
23
24 @author
25
26 public class MainGUI extends javax.swing.JFrame {
27
28 ArrayList<Client> clientList = new ArrayList<>();
29
30
31
32
33
34
35 public MainGUI() {
36 initComponents();
37 runSetup();
38 }
39
40 private void playSound() {
41 try {
42
43
44
45
46 String seperator = Character.toString(File.separatorChar);
47 String cwd = System.getProperty("user.dir");
48 String mp3Path = cwd.concat("*src*idania*wav*mixkit-air-woosh-1489_1.mp3".replace("*", seperator));
49 BufferedInputStream buffer = new BufferedInputStream(new FileInputStream(mp3Path));
50 Player player = new Player(buffer);
51 player.play();
52 player.close();
53
54 } catch (Exception ex) {
55 System.out.println("Error while playing sound.");
56 ex.printStackTrace();
57 }
58 }
59
60 private void runSetup() {
61
62 clientList = new DatabaseManager().getClients();
63
64
65 HashMap<Integer, ArrayList<Object>> payments = new DatabaseManager().getPayments();
66 HashMap<Integer, Integer> sessions = new DatabaseManager().getSessions();
67
68 DefaultTableModel dtm = (DefaultTableModel) clientTable.getModel();
69 dtm.setRowCount(0);
70 for (int i = 0; i < clientList.size(); i++) {
71 dtm.addRow(clientList.get(i).getAsRow());
72 }
73
74 dtm = (DefaultTableModel) emailTable.getModel();
75 dtm.setRowCount(0);
76 for (int i = 0; i < clientList.size(); i++) {
77
78 String type = (clientList.get(i).isStudent) ? "student" : (clientList.get(i).isTeacher) ? "teacher" : "neither";
79
80 Object[] objectRow = {false, clientList.get(i).firstName + " " + clientList.get(i).lastName, clientList.get(i).emailAddress, type, false};
81 dtm.addRow(objectRow);
82 }
83 emailTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
84
85 dtm = (DefaultTableModel) paymentTable.getModel();
86 dtm.setRowCount(0);
87 for (int i = 0; i < clientList.size(); i++) {
88 String lastPaymentDate = "NA";
89 String paymentStatus = "NA";
90
91 if (payments.get(clientList.get(i).clientID) != null) {
92 lastPaymentDate = payments.get(clientList.get(i).clientID).get(0).toString();
93 paymentStatus = (boolean) payments.get(clientList.get(i).clientID).get(1) ? "PAID" : "UNPAID";
94 }
95 Object[] objectRow = {false, clientList.get(i).clientID, clientList.get(i).fullName() , lastPaymentDate, paymentStatus};
96 dtm.addRow(objectRow);
97 }
98
99 dtm = (DefaultTableModel) sessionsTable.getModel();
100 dtm.setRowCount(0);
101
102 for (int i = 0; i < clientList.size(); i++) {
103 String lastPaymentDate = "NA";
104 if (payments.get(clientList.get(i).clientID) != null) {
105 lastPaymentDate = payments.get(clientList.get(i).clientID).get(0).toString();
106 }
107
108 int clientSessions = sessions.get(clientList.get(i).clientID) != null ? sessions.get(clientList.get(i).clientID) : 0;
109
110 Object[] objectRow = {false, clientList.get(i).clientID, clientList.get(i).fullName(), lastPaymentDate, clientSessions};
111 dtm.addRow(objectRow);
112 }
113 }
114
115
116
117 This method is called from within the constructor to initialize the form.
118
119
120
121 @SuppressWarnings("unchecked")
122 // <editor-fold defaultstate="collapsed" desc="Generated Code">
123 private void initComponents() {
124
125 jTabbedPane1 = new javax.swing.JTabbedPane();
126 jPanel3 = new javax.swing.JPanel();
127 jLabel5 = new javax.swing.JLabel();
128 jLabel6 = new javax.swing.JLabel();
129 jLabel7 = new javax.swing.JLabel();
130 jLabel8 = new javax.swing.JLabel();
131 jLabel9 = new javax.swing.JLabel();
132 jLabel10 = new javax.swing.JLabel();
133 jLabel11 = new javax.swing.JLabel();
134 firstNameInput = new javax.swing.JTextField();
135 lastNameInput = new javax.swing.JTextField();
136 emailAddressInput = new javax.swing.JTextField();
137 addClientButton = new javax.swing.JButton();
138 isTeacherInput = new javax.swing.JCheckBox();
139 isStudentInput = new javax.swing.JCheckBox();
140 jScrollPane2 = new javax.swing.JScrollPane();
141 clientTable = new javax.swing.JTable();
142 removeClientButton = new javax.swing.JButton();
143 dateJoinedPicker = new org.jdesktop.swingx.JXDatePicker();
144 ageInput = new javax.swing.JSpinner();
145 jPanel5 = new javax.swing.JPanel();
146 jLabel3 = new javax.swing.JLabel();
147 jScrollPane5 = new javax.swing.JScrollPane();
148 sessionsTable = new javax.swing.JTable();
149 searchClientSessions = new javax.swing.JTextField();
150 packageSelection = new javax.swing.JComboBox<>();
151 jLabel4 = new javax.swing.JLabel();
152 jButton1 = new javax.swing.JButton();
153 jLabel12 = new javax.swing.JLabel();
154 sessionsToRemove = new javax.swing.JSpinner();
155 removeSessionButton = new javax.swing.JButton();
156 jPanel4 = new javax.swing.JPanel();
157 paymentStatusSelection = new javax.swing.JComboBox<>();
158 jLabel2 = new javax.swing.JLabel();
159 searchClient = new javax.swing.JTextField();
160 jScrollPane4 = new javax.swing.JScrollPane();
161 paymentTable = new javax.swing.JTable();
162 updatePaymentStatusButton = new javax.swing.JButton();
163 jPanel1 = new javax.swing.JPanel();
164 jScrollPane3 = new javax.swing.JScrollPane();
165 emailTable = new javax.swing.JTable();
166 emailTableSelection = new javax.swing.JComboBox<>();
167 sendEmail = new javax.swing.JButton();
168 jLabel1 = new javax.swing.JLabel();
169 emailSubject = new javax.swing.JTextField();
170 jScrollPane1 = new javax.swing.JScrollPane();
171 emailBody = new javax.swing.JTextArea();
172 uploadFileButton = new javax.swing.JButton();
173
174 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
175
176 jLabel5.setText("First Name");
177
178 jLabel6.setText("Last Name");
179
180 jLabel7.setText("Teacher");
181
182 jLabel8.setText("Student");
183
184 jLabel9.setText("Age");
185
186 jLabel10.setText("Email Address");
187
188 jLabel11.setText("Date Joined");
189
190 firstNameInput.addActionListener(new java.awt.event.ActionListener() {
191 public void actionPerformed(java.awt.event.ActionEvent evt) {
192 firstNameInputActionPerformed(evt);
193 }
194 });
195
196 addClientButton.setForeground(new java.awt.Color(102, 153, 255));
197 addClientButton.setText("Add Client");
198 addClientButton.addMouseListener(new java.awt.event.MouseAdapter() {
199 public void mouseClicked(java.awt.event.MouseEvent evt) {
200 addClientButtonMouseClicked(evt);
201 }
202 });
203 addClientButton.addActionListener(new java.awt.event.ActionListener() {
204 public void actionPerformed(java.awt.event.ActionEvent evt) {
205 addClientButtonActionPerformed(evt);
206 }
207 });
208
209 isStudentInput.addActionListener(new java.awt.event.ActionListener() {
210 public void actionPerformed(java.awt.event.ActionEvent evt) {
211 isStudentInputActionPerformed(evt);
212 }
213 });
214
215 clientTable.setModel(new javax.swing.table.DefaultTableModel(
216 new Object [][] {
217
218 },
219 new String [] {
220 "ID", "Full Name", "Age", "Email Address", "Student/ Teacher", "Date Joined"
221 }
222 ) {
223 Class[] types = new Class [] {
224 java.lang.Integer.class, java.lang.String.class, java.lang.Integer.class, java.lang.Object.class, java.lang.String.class, java.lang.String.class
225 };
226 boolean[] canEdit = new boolean [] {
227 false, false, false, false, false, false
228 };
229
230 public Class getColumnClass(int columnIndex) {
231 return types [columnIndex];
232 }
233
234 public boolean isCellEditable(int rowIndex, int columnIndex) {
235 return canEdit [columnIndex];
236 }
237 });
238 clientTable.getTableHeader().setReorderingAllowed(false);
239 clientTable.addFocusListener(new java.awt.event.FocusAdapter() {
240 public void focusGained(java.awt.event.FocusEvent evt) {
241 clientTableFocusGained(evt);
242 }
243 });
244 jScrollPane2.setViewportView(clientTable);
245 if (clientTable.getColumnModel().getColumnCount() > 0) {
246 clientTable.getColumnModel().getColumn(0).setResizable(false);
247 }
248
249 removeClientButton.setForeground(new java.awt.Color(255, 0, 0));
250 removeClientButton.setText("Remove Client");
251 removeClientButton.setEnabled(false);
252 removeClientButton.addMouseListener(new java.awt.event.MouseAdapter() {
253 public void mouseClicked(java.awt.event.MouseEvent evt) {
254 removeClientButtonMouseClicked(evt);
255 }
256 });
257 removeClientButton.addActionListener(new java.awt.event.ActionListener() {
258 public void actionPerformed(java.awt.event.ActionEvent evt) {
259 removeClientButtonActionPerformed(evt);
260 }
261 });
262
263 javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
264 jPanel3.setLayout(jPanel3Layout);
265 jPanel3Layout.setHorizontalGroup(
266 jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
267 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
268 .addContainerGap()
269 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
270 .addGroup(jPanel3Layout.createSequentialGroup()
271 .addComponent(jLabel9)
272 .addGap(18, 18, 18)
273 .addComponent(ageInput, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE))
274 .addGroup(jPanel3Layout.createSequentialGroup()
275 .addComponent(jLabel10)
276 .addGap(18, 18, 18)
277 .addComponent(emailAddressInput, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE))
278 .addGroup(jPanel3Layout.createSequentialGroup()
279 .addComponent(jLabel11)
280 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
281 .addComponent(dateJoinedPicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
282 .addGroup(jPanel3Layout.createSequentialGroup()
283 .addComponent(jLabel6)
284 .addGap(18, 18, 18)
285 .addComponent(lastNameInput, javax.swing.GroupLayout.PREFERRED_SIZE, 122, javax.swing.GroupLayout.PREFERRED_SIZE))
286 .addGroup(jPanel3Layout.createSequentialGroup()
287 .addComponent(jLabel5)
288 .addGap(18, 18, 18)
289 .addComponent(firstNameInput))
290 .addGroup(jPanel3Layout.createSequentialGroup()
291 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
292 .addGroup(jPanel3Layout.createSequentialGroup()
293 .addGap(10, 10, 10)
294 .addComponent(isTeacherInput))
295 .addComponent(jLabel7))
296 .addGap(50, 50, 50)
297 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
298 .addComponent(jLabel8)
299 .addGroup(jPanel3Layout.createSequentialGroup()
300 .addGap(10, 10, 10)
301 .addComponent(isStudentInput, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE))))
302 .addGroup(jPanel3Layout.createSequentialGroup()
303 .addGap(53, 53, 53)
304 .addComponent(addClientButton)))
305 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 316, Short.MAX_VALUE)
306 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
307 .addComponent(removeClientButton)
308 .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 549, javax.swing.GroupLayout.PREFERRED_SIZE))
309 .addGap(68, 68, 68))
310 );
311 jPanel3Layout.setVerticalGroup(
312 jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
313 .addGroup(jPanel3Layout.createSequentialGroup()
314 .addContainerGap()
315 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
316 .addComponent(jLabel5)
317 .addComponent(firstNameInput, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
318 .addGap(18, 18, 18)
319 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
320 .addComponent(jLabel6)
321 .addComponent(lastNameInput, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
322 .addGap(20, 20, 20)
323 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
324 .addComponent(jLabel11)
325 .addComponent(dateJoinedPicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
326 .addGap(18, 18, 18)
327 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
328 .addGroup(jPanel3Layout.createSequentialGroup()
329 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
330 .addComponent(jLabel7)
331 .addComponent(jLabel8))
332 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
333 .addComponent(isTeacherInput))
334 .addComponent(isStudentInput, javax.swing.GroupLayout.Alignment.TRAILING))
335 .addGap(18, 18, 18)
336 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
337 .addComponent(jLabel9)
338 .addComponent(ageInput, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
339 .addGap(18, 18, 18)
340 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
341 .addComponent(jLabel10)
342 .addComponent(emailAddressInput, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
343 .addGap(18, 18, 18)
344 .addComponent(addClientButton)
345 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
346 .addGroup(jPanel3Layout.createSequentialGroup()
347 .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
348 .addGap(18, 18, 18)
349 .addComponent(removeClientButton)
350 .addGap(0, 98, Short.MAX_VALUE))
351 );
352
353 jTabbedPane1.addTab("Add Clients", jPanel3);
354
355 jLabel3.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
356 jLabel3.setText("Add/Remove Sessions");
357
358 sessionsTable.setModel(new javax.swing.table.DefaultTableModel(
359 new Object [][] {
360
361 },
362 new String [] {
363 "Select", "Client ID", "Full Name", "Last Payment Made", "Current Sessions"
364 }
365 ) {
366 Class[] types = new Class [] {
367 java.lang.Boolean.class, java.lang.Integer.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class
368 };
369
370 public Class getColumnClass(int columnIndex) {
371 return types [columnIndex];
372 }
373 });
374 jScrollPane5.setViewportView(sessionsTable);
375
376 searchClientSessions.setText("Search Client");
377 searchClientSessions.addMouseListener(new java.awt.event.MouseAdapter() {
378 public void mouseClicked(java.awt.event.MouseEvent evt) {
379 searchClientSessionsMouseClicked(evt);
380 }
381 });
382 searchClientSessions.addActionListener(new java.awt.event.ActionListener() {
383 public void actionPerformed(java.awt.event.ActionEvent evt) {
384 searchClientSessionsActionPerformed(evt);
385 }
386 });
387 searchClientSessions.addKeyListener(new java.awt.event.KeyAdapter() {
388 public void keyReleased(java.awt.event.KeyEvent evt) {
389 searchClientSessionsKeyReleased(evt);
390 }
391 });
392
393 packageSelection.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "10 Sessions Package", "30 Sessions Package", "45 Sessions Package", "60 Sessions Package" }));
394
395 jLabel4.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
396 jLabel4.setText("Select Amount Of Sessions To Add");
397
398 jButton1.setText("Add Sessions");
399 jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
400 public void mouseClicked(java.awt.event.MouseEvent evt) {
401 jButton1MouseClicked(evt);
402 }
403 });
404
405 jLabel12.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
406 jLabel12.setText("Select Amount Of Sessions To Remove");
407
408 removeSessionButton.setText("Remove Session");
409 removeSessionButton.addMouseListener(new java.awt.event.MouseAdapter() {
410 public void mouseClicked(java.awt.event.MouseEvent evt) {
411 removeSessionButtonMouseClicked(evt);
412 }
413 });
414
415 javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
416 jPanel5.setLayout(jPanel5Layout);
417 jPanel5Layout.setHorizontalGroup(
418 jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
419 .addGroup(jPanel5Layout.createSequentialGroup()
420 .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
421 .addGroup(jPanel5Layout.createSequentialGroup()
422 .addGap(501, 501, 501)
423 .addComponent(searchClientSessions, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE))
424 .addGroup(jPanel5Layout.createSequentialGroup()
425 .addGap(340, 340, 340)
426 .addComponent(jScrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
427 .addGroup(jPanel5Layout.createSequentialGroup()
428 .addGap(387, 387, 387)
429 .addComponent(jLabel3))
430 .addGroup(jPanel5Layout.createSequentialGroup()
431 .addGap(235, 235, 235)
432 .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
433 .addGroup(jPanel5Layout.createSequentialGroup()
434 .addComponent(jLabel4)
435 .addGap(88, 88, 88)
436 .addComponent(jLabel12))
437 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup()
438 .addComponent(packageSelection, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
439 .addGap(278, 278, 278)
440 .addComponent(sessionsToRemove, javax.swing.GroupLayout.PREFERRED_SIZE, 76, javax.swing.GroupLayout.PREFERRED_SIZE)
441 .addGap(120, 120, 120))))
442 .addGroup(jPanel5Layout.createSequentialGroup()
443 .addGap(326, 326, 326)
444 .addComponent(jButton1)
445 .addGap(279, 279, 279)
446 .addComponent(removeSessionButton)))
447 .addContainerGap(228, Short.MAX_VALUE))
448 );
449 jPanel5Layout.setVerticalGroup(
450 jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
451 .addGroup(jPanel5Layout.createSequentialGroup()
452 .addContainerGap()
453 .addComponent(jLabel3)
454 .addGap(18, 18, 18)
455 .addComponent(searchClientSessions, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
456 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
457 .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
458 .addGroup(jPanel5Layout.createSequentialGroup()
459 .addComponent(jScrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, 158, javax.swing.GroupLayout.PREFERRED_SIZE)
460 .addGap(18, 18, 18)
461 .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
462 .addComponent(jLabel4)
463 .addComponent(jLabel12))
464 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
465 .addComponent(sessionsToRemove, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE))
466 .addComponent(packageSelection, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
467 .addGap(35, 35, 35)
468 .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
469 .addComponent(jButton1)
470 .addComponent(removeSessionButton))
471 .addContainerGap(161, Short.MAX_VALUE))
472 );
473
474 jTabbedPane1.addTab("Sessions Status", jPanel5);
475
476 paymentStatusSelection.setFont(new java.awt.Font("Tahoma", 0, 20)); // NOI18N
477 paymentStatusSelection.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Update Client Payment Status...", "Paid", "Unpaid" }));
478
479 jLabel2.setFont(new java.awt.Font("Tahoma", 0, 30)); // NOI18N
480 jLabel2.setText("Client Payment Status");
481
482 searchClient.setHorizontalAlignment(javax.swing.JTextField.CENTER);
483 searchClient.setText("Search Client");
484 searchClient.addMouseListener(new java.awt.event.MouseAdapter() {
485 public void mouseClicked(java.awt.event.MouseEvent evt) {
486 searchClientMouseClicked(evt);
487 }
488 });
489 searchClient.addActionListener(new java.awt.event.ActionListener() {
490 public void actionPerformed(java.awt.event.ActionEvent evt) {
491 searchClientActionPerformed(evt);
492 }
493 });
494 searchClient.addKeyListener(new java.awt.event.KeyAdapter() {
495 public void keyReleased(java.awt.event.KeyEvent evt) {
496 searchClientKeyReleased(evt);
497 }
498 });
499
500 paymentTable.setModel(new javax.swing.table.DefaultTableModel(
501 new Object [][] {
502
503 },
504 new String [] {
505 "Select", "Client ID", "Full Name", "Last Payment Made", "Payment Status"
506 }
507 ) {
508 Class[] types = new Class [] {
509 java.lang.Boolean.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class
510 };
511 boolean[] canEdit = new boolean [] {
512 true, true, false, false, true
513 };
514
515 public Class getColumnClass(int columnIndex) {
516 return types [columnIndex];
517 }
518
519 public boolean isCellEditable(int rowIndex, int columnIndex) {
520 return canEdit [columnIndex];
521 }
522 });
523 jScrollPane4.setViewportView(paymentTable);
524
525 updatePaymentStatusButton.setFont(new java.awt.Font("Tahoma", 0, 20)); // NOI18N
526 updatePaymentStatusButton.setText("Update Status");
527 updatePaymentStatusButton.addMouseListener(new java.awt.event.MouseAdapter() {
528 public void mouseClicked(java.awt.event.MouseEvent evt) {
529 updatePaymentStatusButtonMouseClicked(evt);
530 }
531 });
532
533 javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
534 jPanel4.setLayout(jPanel4Layout);
535 jPanel4Layout.setHorizontalGroup(
536 jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
537 .addGroup(jPanel4Layout.createSequentialGroup()
538 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
539 .addGroup(jPanel4Layout.createSequentialGroup()
540 .addGap(281, 281, 281)
541 .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
542 .addGroup(jPanel4Layout.createSequentialGroup()
543 .addGap(429, 429, 429)
544 .addComponent(searchClient, javax.swing.GroupLayout.PREFERRED_SIZE, 153, javax.swing.GroupLayout.PREFERRED_SIZE))
545 .addGroup(jPanel4Layout.createSequentialGroup()
546 .addGap(363, 363, 363)
547 .addComponent(jLabel2))
548 .addGroup(jPanel4Layout.createSequentialGroup()
549 .addGap(347, 347, 347)
550 .addComponent(paymentStatusSelection, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
551 .addGroup(jPanel4Layout.createSequentialGroup()
552 .addGap(425, 425, 425)
553 .addComponent(updatePaymentStatusButton)))
554 .addContainerGap(402, Short.MAX_VALUE))
555 );
556 jPanel4Layout.setVerticalGroup(
557 jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
558 .addGroup(jPanel4Layout.createSequentialGroup()
559 .addContainerGap()
560 .addComponent(jLabel2)
561 .addGap(49, 49, 49)
562 .addComponent(searchClient, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
563 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
564 .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 235, javax.swing.GroupLayout.PREFERRED_SIZE)
565 .addGap(32, 32, 32)
566 .addComponent(paymentStatusSelection, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
567 .addGap(43, 43, 43)
568 .addComponent(updatePaymentStatusButton)
569 .addContainerGap(66, Short.MAX_VALUE))
570 );
571
572 jTabbedPane1.addTab("Payment Status", jPanel4);
573
574 emailTable.setModel(new javax.swing.table.DefaultTableModel(
575 new Object [][] {
576
577 },
578 new String [] {
579 "Selected", "Full Name", "Email", "Teacher/ Student", "Payment Status"
580 }
581 ) {
582 Class[] types = new Class [] {
583 java.lang.Boolean.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
584 };
585 boolean[] canEdit = new boolean [] {
586 true, false, false, false, false
587 };
588
589 public Class getColumnClass(int columnIndex) {
590 return types [columnIndex];
591 }
592
593 public boolean isCellEditable(int rowIndex, int columnIndex) {
594 return canEdit [columnIndex];
595 }
596 });
597 emailTable.getTableHeader().setReorderingAllowed(false);
598 jScrollPane3.setViewportView(emailTable);
599 if (emailTable.getColumnModel().getColumnCount() > 0) {
600 emailTable.getColumnModel().getColumn(0).setResizable(false);
601 }
602
603 emailTableSelection.setFont(new java.awt.Font("Tahoma", 0, 13)); // NOI18N
604 emailTableSelection.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Select...", "All", "All Students", "All Teachers", "All Paid", "All Unpaid" }));
605 emailTableSelection.addItemListener(new java.awt.event.ItemListener() {
606 public void itemStateChanged(java.awt.event.ItemEvent evt) {
607 emailTableSelectionItemStateChanged(evt);
608 }
609 });
610 emailTableSelection.addMouseListener(new java.awt.event.MouseAdapter() {
611 public void mouseClicked(java.awt.event.MouseEvent evt) {
612 emailTableSelectionMouseClicked(evt);
613 }
614 });
615 emailTableSelection.addActionListener(new java.awt.event.ActionListener() {
616 public void actionPerformed(java.awt.event.ActionEvent evt) {
617 emailTableSelectionActionPerformed(evt);
618 }
619 });
620
621 sendEmail.setFont(new java.awt.Font("Tahoma", 0, 13)); // NOI18N
622 sendEmail.setText("Send Email");
623 sendEmail.addMouseListener(new java.awt.event.MouseAdapter() {
624 public void mouseClicked(java.awt.event.MouseEvent evt) {
625 sendEmailMouseClicked(evt);
626 }
627 });
628
629 jLabel1.setFont(new java.awt.Font("Tahoma", 0, 15)); // NOI18N
630 jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
631 jLabel1.setText("Select Recipient/s:");
632
633 emailSubject.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
634 emailSubject.setText("Subject");
635 emailSubject.setForeground(new java.awt.Color(204, 204, 204));
636 emailSubject.addMouseListener(new java.awt.event.MouseAdapter() {
637 public void mouseClicked(java.awt.event.MouseEvent evt) {
638 emailSubjectMouseClicked(evt);
639 }
640 });
641 emailSubject.addActionListener(new java.awt.event.ActionListener() {
642 public void actionPerformed(java.awt.event.ActionEvent evt) {
643 emailSubjectActionPerformed(evt);
644 }
645 });
646
647 emailBody.setColumns(20);
648 emailBody.setRows(5);
649 jScrollPane1.setViewportView(emailBody);
650
651 uploadFileButton.setText("Upload Text File");
652 uploadFileButton.addActionListener(new java.awt.event.ActionListener() {
653 public void actionPerformed(java.awt.event.ActionEvent evt) {
654 uploadFileButtonActionPerformed(evt);
655 }
656 });
657
658 javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
659 jPanel1.setLayout(jPanel1Layout);
660 jPanel1Layout.setHorizontalGroup(
661 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
662 .addGroup(jPanel1Layout.createSequentialGroup()
663 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
664 .addGroup(jPanel1Layout.createSequentialGroup()
665 .addGap(178, 178, 178)
666 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
667 .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 587, javax.swing.GroupLayout.PREFERRED_SIZE)
668 .addGroup(jPanel1Layout.createSequentialGroup()
669 .addGap(166, 166, 166)
670 .addComponent(emailSubject, javax.swing.GroupLayout.PREFERRED_SIZE, 235, javax.swing.GroupLayout.PREFERRED_SIZE))))
671 .addGroup(jPanel1Layout.createSequentialGroup()
672 .addGap(351, 351, 351)
673 .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 234, javax.swing.GroupLayout.PREFERRED_SIZE)))
674 .addGap(0, 370, Short.MAX_VALUE))
675 .addGroup(jPanel1Layout.createSequentialGroup()
676 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
677 .addGroup(jPanel1Layout.createSequentialGroup()
678 .addGap(410, 410, 410)
679 .addComponent(emailTableSelection, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
680 .addGroup(jPanel1Layout.createSequentialGroup()
681 .addGap(399, 399, 399)
682 .addComponent(sendEmail))
683 .addGroup(jPanel1Layout.createSequentialGroup()
684 .addGap(274, 274, 274)
685 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
686 .addComponent(uploadFileButton)
687 .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 378, javax.swing.GroupLayout.PREFERRED_SIZE))))
688 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
689 );
690 jPanel1Layout.setVerticalGroup(
691 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
692 .addGroup(jPanel1Layout.createSequentialGroup()
693 .addContainerGap()
694 .addComponent(jLabel1)
695 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
696 .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 108, javax.swing.GroupLayout.PREFERRED_SIZE)
697 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
698 .addComponent(emailTableSelection, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
699 .addGap(18, 18, 18)
700 .addComponent(emailSubject, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
701 .addGap(18, 18, 18)
702 .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 145, javax.swing.GroupLayout.PREFERRED_SIZE)
703 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
704 .addComponent(uploadFileButton)
705 .addGap(20, 20, 20)
706 .addComponent(sendEmail)
707 .addContainerGap(107, Short.MAX_VALUE))
708 );
709
710 emailSubject.getAccessibleContext().setAccessibleDescription("");
711
712 jTabbedPane1.addTab("Email", jPanel1);
713
714 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
715 getContentPane().setLayout(layout);
716 layout.setHorizontalGroup(
717 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
718 .addComponent(jTabbedPane1)
719 );
720 layout.setVerticalGroup(
721 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
722 .addComponent(jTabbedPane1)
723 );
724
725 pack();
726 }// </editor-fold>
727
728 private void uploadFileButtonActionPerformed(java.awt.event.ActionEvent evt) {
729 JFileChooser chooser = new JFileChooser();
730 chooser.showOpenDialog(null);
731 File f = chooser.getSelectedFile();
732 String filename = f.getAbsolutePath();
733 try {
734 FileReader reader = new FileReader(filename);
735 BufferedReader br = new BufferedReader(reader);
736 emailBody.read(br, null);
737 br.close();
738 emailBody.requestFocus();
739 } catch (Exception e) {
740 JOptionPane.showMessageDialog(null, e);
741 }
742 }
743
744 private void emailSubjectActionPerformed(java.awt.event.ActionEvent evt) {
745
746 }
747
748 private void emailSubjectMouseClicked(java.awt.event.MouseEvent evt) {
749 emailSubject.setText("");
750 }
751
752 private void sendEmailMouseClicked(java.awt.event.MouseEvent evt) {
753 ArrayList<String> recipients = new ArrayList<String>();
754
755 TableModel model = emailTable.getModel();
756
757
758 for(int i = 0; i < emailTable.getRowCount(); i++) {
759 boolean isSelected = (boolean) model.getValueAt(i, 0);
760 if (isSelected) recipients.add(model.getValueAt(i, 2).toString());
761 }
762
763 String [] recipientsAsArray = new String[recipients.size()];
764 recipientsAsArray = recipients.toArray(recipientsAsArray);
765
766
767 String subject = emailSubject.getText();
768 String body = emailBody.getText();
769 Email email = new Email(recipientsAsArray, subject, body);
770 email.sendEmail();
771
772
773 playSound();
774
775 JOptionPane.showMessageDialog(this, "Email Sent Successfully");
776 }
777
778 private void emailTableSelectionActionPerformed(java.awt.event.ActionEvent evt) {
779
780 }
781
782
783 private void emailTableSelectionMouseClicked(java.awt.event.MouseEvent evt) {
784 for (int i = 0; i < emailTable.getRowCount(); i++) {
785 emailTable.getModel().setValueAt(false, i, 0);
786 }
787 }
788
789 private void emailTableSelectionItemStateChanged(java.awt.event.ItemEvent evt) {
790 int selectedIndex = emailTableSelection.getSelectedIndex();
791 if (selectedIndex == 1) {
792
793 for (int i = 0; i < emailTable.getRowCount(); i++) {
794 emailTable.getModel().setValueAt(true, i, 0);
795 }
796 } else if (selectedIndex == 2) {
797
798 for (int i = 0; i < emailTable.getRowCount(); i++) {
799 String type = (String) emailTable.getModel().getValueAt(i, 3);
800 if (type.equalsIgnoreCase("student")) {
801
802 emailTable.getModel().setValueAt(true, i, 0);
803
804 }
805 }
806 } else if (selectedIndex == 3) {
807 for (int i = 0; i < emailTable.getRowCount(); i++) {
808 String type = (String) emailTable.getModel().getValueAt(i, 3);
809 if (type.equalsIgnoreCase("teacher")) {
810
811 emailTable.getModel().setValueAt(true, i, 0);
812
813 }
814 }
815 } else if (selectedIndex == 4) {
816 for (int i = 0; i < emailTable.getRowCount(); i++) {
817 boolean paid = (boolean) emailTable.getModel().getValueAt(i, 4);
818 if (paid) {
819
820 emailTable.getModel().setValueAt(true, i, 0);
821 }
822
823 }
824 } else if (selectedIndex == 5) {
825 for (int i = 0; i < emailTable.getRowCount(); i++) {
826 boolean paid = (boolean) emailTable.getModel().getValueAt(i, 4);
827 if (!paid) {
828
829 emailTable.getModel().setValueAt(true, i, 0);
830 }
831
832 }
833 } else if (selectedIndex == 0) {
834 for (int i = 0; i < emailTable.getRowCount(); i++) {
835 emailTable.getModel().setValueAt(false, i, 0);
836 }
837 }
838 }
839
840 private void updatePaymentStatusButtonMouseClicked(java.awt.event.MouseEvent evt) {
841
842 ArrayList<Integer> clientIDs = new ArrayList<Integer>();
843
844
845 TableModel model = paymentTable.getModel();
846
847
848 for(int i = 0; i < paymentTable.getRowCount(); i++) {
849 boolean isSelected = (boolean) model.getValueAt(i, 0);
850
851 if(isSelected) {
852 int clientID = (int) model.getValueAt(i, 1);
853 String date = model.getValueAt(i, 3).toString();
854
855 updatePayment(clientID, date);
856 }
857 }
858
859 runSetup();
860 JOptionPane.showMessageDialog(null, "Clients payment status successfully updated!");
861 }
862
863 private void searchClientKeyReleased(java.awt.event.KeyEvent evt) {
864 String searchInput = searchClient.getText();
865
866 ArrayList<Client> results = new ArrayList<>();
867
868
869 for(Client client : clientList) {
870 if (client.fullName().toLowerCase().contains(searchInput.toLowerCase())) {
871 results.add(client);
872 }
873 }
874
875
876 ((DefaultTableModel) paymentTable.getModel()).setRowCount(0);
877
878 HashMap<Integer, ArrayList<Object>> payments = new DatabaseManager().getPayments();
879
880 for(Client client : results) {
881 String lastPaymentDate = "NA";
882 String paymentStatus = "NA";
883
884 if (payments.get(client.clientID) != null) {
885 lastPaymentDate = payments.get(client.clientID).get(0).toString();
886 paymentStatus = (boolean) payments.get(client.clientID).get(1) ? "PAID" : "UNPAID";
887 }
888
889 Object[] objectRow = {false, client.clientID, client.fullName(), lastPaymentDate, paymentStatus};
890 ((DefaultTableModel) paymentTable.getModel()).addRow(objectRow);
891 }
892 }
893
894 private void searchClientActionPerformed(java.awt.event.ActionEvent evt) {
895
896 }
897
898 private void searchClientMouseClicked(java.awt.event.MouseEvent evt) {
899 searchClient.setText("");
900 }
901
902 private void removeSessionButtonMouseClicked(java.awt.event.MouseEvent evt) {
903 ArrayList<Integer> clientIDs = new ArrayList<Integer>();
904
905 TableModel model = sessionsTable.getModel();
906
907
908 for(int i = 0; i < sessionsTable.getRowCount(); i++) {
909 boolean isSelected = (boolean) model.getValueAt(i, 0);
910 if (isSelected) clientIDs.add((int)model.getValueAt(i, 1));
911 }
912
913
914 int toRemove = (int) sessionsToRemove.getValue();
915
916 DatabaseManager dm = new DatabaseManager();
917
918 HashMap<Integer, Integer> sessions = dm.getSessions();
919
920
921 for(int id : clientIDs) {
922 int currentSessions = sessions.get(id) == null ? 0 : sessions.get(id);
923 String query = dm.getSessionsUpdateQuery(id, currentSessions - toRemove);
924 dm.writeToDB(query);
925 }
926
927
928 runSetup();
929 }
930
931 private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
932
933 ArrayList<Integer> clientIDs = new ArrayList<Integer>();
934
935 TableModel model = sessionsTable.getModel();
936
937
938 for(int i = 0; i < sessionsTable.getRowCount(); i++) {
939 boolean isSelected = (boolean) model.getValueAt(i, 0);
940 if (isSelected) clientIDs.add((int)model.getValueAt(i, 1));
941 }
942
943
944 int selectedPackage = 0;
945
946 switch(packageSelection.getSelectedIndex()) {
947 case 0:
948 selectedPackage = 10;
949 break;
950 case 1:
951 selectedPackage = 30;
952 break;
953 case 2:
954 selectedPackage = 45;
955 break;
956 case 3:
957 selectedPackage = 60;
958 break;
959 }
960
961 DatabaseManager dm = new DatabaseManager();
962
963 HashMap<Integer, Integer> sessions = dm.getSessions();
964
965
966 for(int id : clientIDs) {
967 int currentSessions = sessions.get(id) == null ? 0 : sessions.get(id);
968 String query = dm.getSessionsUpdateQuery(id, currentSessions + selectedPackage);
969 dm.writeToDB(query);
970 }
971
972
973 runSetup();
974 }
975
976 private void searchClientSessionsActionPerformed(java.awt.event.ActionEvent evt) {
977
978 }
979
980 private void removeClientButtonActionPerformed(java.awt.event.ActionEvent evt) {
981
982 }
983
984 private void removeClientButtonMouseClicked(java.awt.event.MouseEvent evt) {
985 DefaultTableModel dtm = (DefaultTableModel) clientTable.getModel();
986 DatabaseManager dm = new DatabaseManager();
987 int[] rowsSelected = clientTable.getSelectedRows();
988 for (int i = rowsSelected.length - 1; i >= 0; i--) {
989 int clientID = (int) clientTable.getModel().getValueAt(rowsSelected[i], 0);
990 dm.writeToDB(dm.getDeleteClientQuery(clientID));
991 dtm.removeRow(i);
992 }
993
994 JOptionPane.showMessageDialog(this, "Removed Client Successfully");
995 removeClientButton.setEnabled(false);
996
997 runSetup();
998 }
999
1000 private void clientTableFocusGained(java.awt.event.FocusEvent evt) {
1001
1002 removeClientButton.setEnabled(true);
1003 }
1004
1005 private void isStudentInputActionPerformed(java.awt.event.ActionEvent evt) {
1006
1007 }
1008
1009 private void addClientButtonActionPerformed(java.awt.event.ActionEvent evt) {
1010
1011 }
1012
1013 private void addClientButtonMouseClicked(java.awt.event.MouseEvent evt) {
1014
1015
1016 if (firstNameInput.getText().isEmpty()) {
1017 JOptionPane.showMessageDialog(this, "First Name Is Empty");
1018 return;
1019 }
1020 if (lastNameInput.getText().isEmpty()) {
1021 JOptionPane.showMessageDialog(this, "Last Name Is Empty");
1022 return;
1023 }
1024 if (emailAddressInput.getText().isEmpty()){
1025 JOptionPane.showMessageDialog(this, "Email Address Is Empty");
1026 return;
1027 }
1028 if (dateJoinedPicker.getEditor().getText().isEmpty()){
1029 JOptionPane.showMessageDialog(this, "Date Joined Is Empty");
1030 return;
1031 }
1032 try {
1033 int testAge = (int) ageInput.getValue();
1034 } catch(Exception ignore) {
1035 JOptionPane.showMessageDialog(this, "Invalid Age Input");
1036 return;
1037
1038 }
1039
1040 String firstName = firstNameInput.getText();
1041 String lastName = lastNameInput.getText();
1042 boolean isTeacher = isTeacherInput.isSelected();
1043 boolean isStudent = isStudentInput.isSelected();
1044 int age = (int) ageInput.getValue();
1045 String emailAddress = emailAddressInput.getText();
1046
1047
1048 if (age < 10){
1049 JOptionPane.showMessageDialog(this, "Invalid Age (Below 10)");
1050 return;
1051 }
1052
1053 if (!emailAddressInput.getText().contains("@")){
1054 JOptionPane.showMessageDialog(this, "Invalid Email Address");
1055 return;
1056 }
1057
1058
1059 Calendar dateSelection = Calendar.getInstance();
1060 dateSelection.setTime(dateJoinedPicker.getDate());
1061
1062 String dateJoined = dateSelection.get(Calendar.YEAR) + "/" + dateSelection.get(Calendar.DATE) + "/" + (dateSelection.get(Calendar.MONTH) + 1);
1063
1064 Client client = new Client(firstName, lastName, isTeacher, isStudent, age, emailAddress, dateJoined);
1065
1066 DatabaseManager dm = new DatabaseManager();
1067
1068 dm.writeToDB(dm.getInsertClientQuery(client));
1069
1070
1071 firstNameInput.setText("");
1072 lastNameInput.setText("");
1073 isTeacherInput.setSelected(false);
1074 isStudentInput.setSelected(false);
1075 ageInput.setValue(0);
1076 emailAddressInput.setText("");
1077 dateJoinedPicker.getEditor().setText("");
1078
1079 runSetup();
1080
1081 JOptionPane.showMessageDialog(this, "Added Client Successfully");
1082 }
1083
1084 private void firstNameInputActionPerformed(java.awt.event.ActionEvent evt) {
1085
1086 }
1087
1088 private void searchClientSessionsMouseClicked(java.awt.event.MouseEvent evt) {
1089 searchClientSessions.setText("");
1090 }
1091
1092 private void searchClientSessionsKeyReleased(java.awt.event.KeyEvent evt) {
1093 String searchInput = searchClientSessions.getText();
1094
1095 ArrayList<Client> results = new ArrayList<>();
1096
1097
1098 for(Client client : clientList) {
1099 if (client.fullName().toLowerCase().contains(searchInput.toLowerCase())) {
1100 results.add(client);
1101 }
1102 }
1103
1104
1105 ((DefaultTableModel) sessionsTable.getModel()).setRowCount(0);
1106
1107 HashMap<Integer, ArrayList<Object>> payments = new DatabaseManager().getPayments();
1108 HashMap<Integer, Integer> sessions = new DatabaseManager().getSessions();
1109
1110
1111 for(Client client : results) {
1112 String lastPaymentDate = "NA";
1113
1114 if (payments.get(client.clientID) != null) {
1115 lastPaymentDate = payments.get(client.clientID).get(0).toString();
1116 }
1117
1118 int clientSessions = sessions.get(client.clientID) != null ? sessions.get(client.clientID) : 0;
1119
1120
1121 Object[] objectRow = {false, client.clientID, client.fullName(), lastPaymentDate, clientSessions};
1122 ((DefaultTableModel) sessionsTable.getModel()).addRow(objectRow);
1123 }
1124 }
1125
1126 private void updatePayment(int clientID, String date) {
1127 DatabaseManager dm = new DatabaseManager();
1128
1129
1130 String query = "";
1131
1132 switch (paymentStatusSelection.getSelectedIndex()) {
1133 case 1:
1134 query = dm.getUpdatePaymentQuery(clientID, date, true);
1135 break;
1136 case 2:
1137 date = java.time.LocalDate.now().toString();
1138 query = dm.getAddPaymentQuery(clientID, date);
1139 break;
1140 }
1141
1142 dm.writeToDB(query);
1143 }
1144
1145
1146
1147 @param args
1148
1149 public static void main(String args[]) {
1150
1151
1152
1153
1154 http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
1155
1156 try {
1157 for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
1158 if ("Nimbus".equals(info.getName())) {
1159 javax.swing.UIManager.setLookAndFeel(info.getClassName());
1160 break;
1161 }
1162 }
1163 } catch (ClassNotFoundException ex) {
1164 java.util.logging.Logger.getLogger(MainGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1165 } catch (InstantiationException ex) {
1166 java.util.logging.Logger.getLogger(MainGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1167 } catch (IllegalAccessException ex) {
1168 java.util.logging.Logger.getLogger(MainGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1169 } catch (javax.swing.UnsupportedLookAndFeelException ex) {
1170 java.util.logging.Logger.getLogger(MainGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1171 }
1172
1173
1174
1175 java.awt.EventQueue.invokeLater(new Runnable() {
1176 public void run() {
1177 new MainGUI().setVisible(true);
1178 }
1179 });
1180 }
1181
1182 // Variables declaration - do not modify
1183 private org.jdesktop.swingx.JXDatePicker dateJoinedPicker;
1184 private javax.swing.JButton addClientButton;
1185 private javax.swing.JSpinner ageInput;
1186 private javax.swing.JTable clientTable;
1187 private javax.swing.JTextField emailAddressInput;
1188 private javax.swing.JTextArea emailBody;
1189 private javax.swing.JTextField emailSubject;
1190 private javax.swing.JTable emailTable;
1191 private javax.swing.JComboBox<String> emailTableSelection;
1192 private javax.swing.JTextField firstNameInput;
1193 private javax.swing.JCheckBox isStudentInput;
1194 private javax.swing.JCheckBox isTeacherInput;
1195 private javax.swing.JButton jButton1;
1196 private javax.swing.JLabel jLabel1;
1197 private javax.swing.JLabel jLabel10;
1198 private javax.swing.JLabel jLabel11;
1199 private javax.swing.JLabel jLabel12;
1200 private javax.swing.JLabel jLabel2;
1201 private javax.swing.JLabel jLabel3;
1202 private javax.swing.JLabel jLabel4;
1203 private javax.swing.JLabel jLabel5;
1204 private javax.swing.JLabel jLabel6;
1205 private javax.swing.JLabel jLabel7;
1206 private javax.swing.JLabel jLabel8;
1207 private javax.swing.JLabel jLabel9;
1208 private javax.swing.JPanel jPanel1;
1209 private javax.swing.JPanel jPanel3;
1210 private javax.swing.JPanel jPanel4;
1211 private javax.swing.JPanel jPanel5;
1212 private javax.swing.JScrollPane jScrollPane1;
1213 private javax.swing.JScrollPane jScrollPane2;
1214 private javax.swing.JScrollPane jScrollPane3;
1215 private javax.swing.JScrollPane jScrollPane4;
1216 private javax.swing.JScrollPane jScrollPane5;
1217 private javax.swing.JTabbedPane jTabbedPane1;
1218 private javax.swing.JTextField lastNameInput;
1219 private javax.swing.JComboBox<String> packageSelection;
1220 private javax.swing.JComboBox<String> paymentStatusSelection;
1221 private javax.swing.JTable paymentTable;
1222 private javax.swing.JButton removeClientButton;
1223 private javax.swing.JButton removeSessionButton;
1224 private javax.swing.JTextField searchClient;
1225 private javax.swing.JTextField searchClientSessions;
1226 private javax.swing.JButton sendEmail;
1227 private javax.swing.JTable sessionsTable;
1228 private javax.swing.JSpinner sessionsToRemove;
1229 private javax.swing.JButton updatePaymentStatusButton;
1230 private javax.swing.JButton uploadFileButton;
1231 // End of variables declaration
1232
1233 }