diff --git a/.vscode/settings.json b/.vscode/settings.json
index c5f3f6b9c754225a4c577122bc2f9c0b49713e3c..0153b3183adf22bb54b94634a9aa9291c5bc3f66 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,3 +1,4 @@
 {
-    "java.configuration.updateBuildConfiguration": "interactive"
+    "java.configuration.updateBuildConfiguration": "interactive",
+    "java.compile.nullAnalysis.mode": "disabled"
 }
\ No newline at end of file
diff --git a/DISPticketing/front/extraInformation.html b/DISPticketing/front/extraInformation.html
index c74e9b1f8031728cc81429b2e97b8785bf1a309a..d5441d4ad45caa70c9d637f1b414633431e91b25 100644
--- a/DISPticketing/front/extraInformation.html
+++ b/DISPticketing/front/extraInformation.html
@@ -12,9 +12,16 @@
   </style>
 </head>
 
-<body>
-  <div id="form"></div>
-
+<body style="background-color: lightblue;">
+  <div
+    style="display: flex; flex-direction: column; justify-content: center; align-items: center; margin: 0; background-color: lightblue;">
+    <h1>Extra Information Form</h1>
+    <div
+      style="padding: 20px; border: 2px solid black; border-radius: 10px; background-color: white; max-width: 800px; height: 450px;">
+      <div id="form">
+      </div>
+    </div>
+  </div>
   <!--
         add your form schema to this script tag
         alternatively, load it asynchronously from anywhere
@@ -52,7 +59,7 @@
                 "id": "Textarea_4",
                 "label": "Detailed Description of the Issue",
                 "validate": {
-                  "minLength": 10,
+                  "minLength": 2,
                   "maxLength": 500,
                   "required": true
                 },
@@ -94,47 +101,45 @@
     })
     form.importSchema(schema)
 
-
-
-
-
-
-
     form.on('submit', (event) => {
-      event.preventDefault(); // Prevent the default form submission
-
-      let formData = event.data; // Accessing the data object from the event
-      formData.emailType = "ExtraEmailReplied";
-      console.log(formData);
-      formData = JSON.stringify(formData);
-
-      fetch('http://localhost:8080/submission', {
-        method: 'POST',
-        headers: {
-          'Content-Type': 'application/json'
-        },
-        body: formData
-      })
-        .then(response => {
-          if (!response.ok) {
-            throw new Error('Network response was not ok');
-          }
-          return response.json();
+      const errors = form.validate();
+      if (Object.keys(errors).length) {
+        console.error("Form has errors", errors);
+      } else {
+        event.preventDefault(); // Prevent the default form submission
+
+        let formData = event.data; // Accessing the data object from the event
+        formData.emailType = "ExtraEmailReplied";
+        console.log(formData);
+        formData = JSON.stringify(formData);
+
+        fetch('http://localhost:8080/submission', {
+          method: 'POST',
+          headers: {
+            'Content-Type': 'application/json'
+          },
+          body: formData
         })
-        .then(data => {
-          if (data) {
-            console.log('Form submitted successfully', data);
-          } else {
-            console.log('Form submitted successfully');
-          }
-        })
-        .catch(error => {
-          console.error('There was a problem submitting the form', error);
-        });
+          .then(response => {
+            if (!response.ok) {
+              throw new Error('Network response was not ok');
+            }
+            return response.json();
+          })
+          .then(data => {
+            if (data) {
+              console.log('Form submitted successfully', data);
+            } else {
+              console.log('Form submitted successfully');
+            }
+          })
+          .catch(error => {
+            console.error('There was a problem submitting the form', error);
+          });
+        form.reset();
+      }
     });
 
-
-
   </script>
 </body>
 
diff --git a/DISPticketing/front/index.html b/DISPticketing/front/index.html
deleted file mode 100644
index 0adc85c4c8ddc8fc6748ae81f7fca1ead36ef8b6..0000000000000000000000000000000000000000
--- a/DISPticketing/front/index.html
+++ /dev/null
@@ -1,276 +0,0 @@
-<html>
-
-<head>
-  <!--
-        required viewer styles
-      -->
-  <link rel="stylesheet" href="https://unpkg.com/@bpmn-io/form-js@1.7.3/dist/assets/form-js.css">
-  <style>
-    #form {
-      max-width: 800px;
-    }
-  </style>
-</head>
-
-<body>
-  <div id="form"></div>
-
-  <!--
-        add your form schema to this script tag
-        alternatively, load it asynchronously from anywhere
-      -->
-  <script type="application/form-schema">
-        {
-          "executionPlatform": "Camunda Cloud",
-          "executionPlatformVersion": "8.5.0",
-          "exporter": {
-            "name": "Camunda Web Modeler",
-            "version": "8c03b57"
-          },
-          "schemaVersion": 16,
-          "id": "complete-issue-form-0x1n9i1",
-          "components": [
-            {
-              "text": "### Report an Issue",
-              "type": "text",
-              "id": "Heading_0",
-              "layout": {
-                "columns": 16,
-                "row": "Row_0c7idvx"
-              }
-            },
-            {
-              "text": "##### Your Details ",
-              "type": "text",
-              "id": "Subheading_1",
-              "layout": {
-                "row": "row_0",
-                "columns": null
-              }
-            },
-            {
-              "type": "textfield",
-              "id": "Textfield_2",
-              "label": "User Name",
-              "validate": {
-                "minLength": 2,
-                "required": true
-              },
-              "key": "fieldName",
-              "layout": {
-                "row": "row_1",
-                "columns": null
-              }
-            },
-            {
-              "type": "textfield",
-              "id": "Textfield_3",
-              "label": "Contact Number",
-              "validate": {
-                "minLength": 8,
-                "maxLength": 15,
-                "required": true
-              },
-              "key": "fieldContactNumber",
-              "layout": {
-                "row": "row_1",
-                "columns": null
-              }
-            },
-            {
-              "values": [
-                {
-                  "value": "IT",
-                  "label": "IT"
-                },
-                {
-                  "value": "HR",
-                  "label": "HR"
-                },
-                {
-                  "value": "Finance",
-                  "label": "Finance"
-                },
-                {
-                  "value": "Operations",
-                  "label": "Operations"
-                }
-              ],
-              "type": "select",
-              "id": "Select_4",
-              "label": "Department",
-              "validate": {
-                "required": true
-              },
-              "key": "fieldDepartment",
-              "layout": {
-                "row": "row_2",
-                "columns": 16
-              }
-            },
-            {
-              "text": "##### What is the Issue?",
-              "type": "text",
-              "id": "Subheading_5",
-              "layout": {
-                "row": "row_3",
-                "columns": null
-              }
-            },
-            {
-              "type": "textfield",
-              "id": "Textfield_6",
-              "label": "Issue Title",
-              "validate": {
-                "minLength": 5,
-                "maxLength": 50,
-                "required": true
-              },
-              "key": "fieldTitle",
-              "layout": {
-                "row": "row_4",
-                "columns": null
-              }
-            },
-            {
-              "type": "textarea",
-              "id": "Textarea_7",
-              "label": "Issue Description",
-              "validate": {
-                "minLength": 10,
-                "maxLength": 300,
-                "required": true
-              },
-              "key": "fieldDescription",
-              "layout": {
-                "row": "Row_0vwv1n8",
-                "columns": null
-              }
-            },
-            {
-              "values": [
-                {
-                  "label": "Non-Urgent, Low Priority",
-                  "value": "Non-Urgent, Low Priority"
-                },
-                {
-                  "label": "Medium Urgency, Low Priority",
-                  "value": "Medium Urgency, Low Priority"
-                },
-                {
-                  "label": "High Urgency, Low Priority",
-                  "value": "High Urgency, Low Priority"
-                },
-                {
-                  "label": "Non-Urgent, Medium Priority",
-                  "value": "Non-Urgent, Medium Priority"
-                },
-                {
-                  "label": "Non-Urgent, High Priority",
-                  "value": "Non-Urgent, High Priority"
-                },
-                {
-                  "label": "Medium Urgency, Medium Priority",
-                  "value": "Medium Urgency, Medium Priority"
-                },
-                {
-                  "label": "Medium Urgency, High Priority",
-                  "value": "Medium Urgency, High Priority"
-                },
-                {
-                  "label": "High Urgency, Medium Priority",
-                  "value": "High Urgency, Medium Priority"
-                },
-                {
-                  "label": "High Urgency, High Priority",
-                  "value": "High Urgency, High Priority"
-                }
-              ],
-              "label": "Severity of Issue",
-              "type": "select",
-              "layout": {
-                "row": "Row_0bzl8je",
-                "columns": null
-              },
-              "id": "Field_0rbo5w8",
-              "key": "fieldSLA",
-              "validate": {
-                "required": true
-              }
-            },
-            {
-              "values": [
-                {
-                  "label": "IT",
-                  "value": "IT"
-                },
-                {
-                  "label": "Development",
-                  "value": "Development"
-                }
-              ],
-              "label": "Issue Department",
-              "type": "select",
-              "layout": {
-                "row": "Row_0bzl8je",
-                "columns": null
-              },
-              "id": "Field_16wtr7u",
-              "key": "assignedDepartment",
-              "validate": {
-                "required": true
-              }
-            },
-            {
-              "action": "submit",
-              "label": "Submit",
-              "type": "button",
-              "layout": {
-                "row": "Row_0fs2y8h",
-                "columns": null
-              },
-              "id": "Field_1dolsqn"
-            }
-          ],
-          "generated": true,
-          "type": "default"
-        }
-      </script>
-
-
-  <!--
-        required viewer script
-      -->
-  <script src="https://unpkg.com/@bpmn-io/form-js@1.7.3/dist/form-viewer.umd.js"></script>
-  <script>
-    const schema = JSON.parse(
-      document.querySelector('[type="application/form-schema"]').textContent
-    );
-    const container = document.querySelector('#form');
-
-    const form = new FormViewer.Form({
-      container
-    })
-    form.importSchema(schema)
-
-
-
-    
-
-  
-
-    // add event listeners
-    form.on('submit', (event) => {
-      const errors = form.validate();
-      if (Object.keys(errors).length) {
-        
-        console.error("Form has errors", errors);
-      }else
-        console.log('Form <submit>', event);
-      });
-
-
-  </script>
-</body>
-
-</html>
\ No newline at end of file
diff --git a/DISPticketing/front/issueFormPortal.html b/DISPticketing/front/issueFormPortal.html
new file mode 100644
index 0000000000000000000000000000000000000000..fad8b152ae0137ed58503784879b5269373dab60
--- /dev/null
+++ b/DISPticketing/front/issueFormPortal.html
@@ -0,0 +1,317 @@
+<html>
+
+<head>
+  <!--
+        required viewer styles
+      -->
+  <link rel="stylesheet" href="https://unpkg.com/@bpmn-io/form-js@1.7.3/dist/assets/form-js.css">
+  <style>
+    #form {
+      max-width: 800px;
+    }
+  </style>
+</head>
+
+<body style="background-color: lightblue;">
+  <div
+    style="display: flex; flex-direction: column; justify-content: center; align-items: center; margin: 0; background-color: lightblue;">
+    <h1>Employee Web Portal</h1>
+    <div
+      style="padding: 20px; border: 2px solid black; border-radius: 10px; background-color: white; max-width: 800px; height: 810px;">
+      <div id="form">
+      </div>
+    </div>
+  </div>
+  <!--
+        add your form schema to this script tag
+        alternatively, load it asynchronously from anywhere
+      -->
+  <script type="application/form-schema">
+    {
+      "executionPlatform": "Camunda Cloud",
+      "executionPlatformVersion": "8.5.0",
+      "exporter": {
+        "name": "Camunda Web Modeler",
+        "version": "8c4dae7"
+      },
+      "schemaVersion": 16,
+      "id": "complete-issue-form-0x1n9i1",
+      "components": [
+        {
+          "text": "### Raise an Issue",
+          "type": "text",
+          "id": "Heading_0",
+          "layout": {
+            "columns": 16,
+            "row": "Row_0c7idvx"
+          }
+        },
+        {
+          "text": "##### Your Employee Details ",
+          "type": "text",
+          "id": "Subheading_1",
+          "layout": {
+            "row": "row_0",
+            "columns": null
+          }
+        },
+        {
+          "type": "textfield",
+          "id": "Textfield_2",
+          "label": "Username",
+          "validate": {
+            "minLength": 2,
+            "required": true,
+            "maxLength": 20
+          },
+          "key": "fieldName",
+          "layout": {
+            "row": "row_1",
+            "columns": 7
+          }
+        },
+        {
+          "label": "Employee Email Address",
+          "type": "textfield",
+          "layout": {
+            "row": "row_1",
+            "columns": 8
+          },
+          "id": "Field_1kct5bo",
+          "key": "fieldEmail",
+          "validate": {
+            "required": true,
+            "validationType": "email"
+          }
+        },
+        {
+          "type": "textfield",
+          "id": "Textfield_3",
+          "label": "Contact Number",
+          "validate": {
+            "required": true,
+            "validationType": "phone"
+          },
+          "key": "fieldContactNumber",
+          "layout": {
+            "row": "Row_0sh0red",
+            "columns": 7
+          }
+        },
+        {
+          "values": [
+            {
+              "value": "IT",
+              "label": "IT"
+            },
+            {
+              "value": "HR",
+              "label": "HR"
+            },
+            {
+              "value": "Finance",
+              "label": "Finance"
+            },
+            {
+              "value": "Operations",
+              "label": "Operations"
+            }
+          ],
+          "type": "select",
+          "id": "Select_4",
+          "label": "Department",
+          "validate": {
+            "required": true
+          },
+          "key": "fieldDepartment",
+          "layout": {
+            "row": "Row_0sh0red",
+            "columns": 8
+          }
+        },
+        {
+          "text": "##### What is Your Issue?",
+          "type": "text",
+          "id": "Subheading_5",
+          "layout": {
+            "row": "row_3",
+            "columns": 15
+          }
+        },
+        {
+          "type": "textfield",
+          "id": "Textfield_6",
+          "label": "Issue Title",
+          "validate": {
+            "minLength": 2,
+            "maxLength": 50,
+            "required": true
+          },
+          "key": "fieldTitle",
+          "layout": {
+            "row": "row_4",
+            "columns": 15
+          }
+        },
+        {
+          "type": "textarea",
+          "id": "Textarea_7",
+          "label": "Issue Description",
+          "validate": {
+            "maxLength": 300,
+            "required": true,
+            "minLength": 10
+          },
+          "key": "fieldDescription",
+          "layout": {
+            "row": "Row_0vwv1n8",
+            "columns": 15
+          }
+        },
+        {
+          "values": [
+            {
+              "label": "Non-Urgent, Low Priority",
+              "value": "Non-Urgent, Low Priority"
+            },
+            {
+              "label": "Medium Urgency, Low Priority",
+              "value": "Medium Urgency, Low Priority"
+            },
+            {
+              "label": "High Urgency, Low Priority",
+              "value": "High Urgency, Low Priority"
+            },
+            {
+              "label": "Non-Urgent, Medium Priority",
+              "value": "Non-Urgent, Medium Priority"
+            },
+            {
+              "label": "Non-Urgent, High Priority",
+              "value": "Non-Urgent, High Priority"
+            },
+            {
+              "label": "Medium Urgency, Medium Priority",
+              "value": "Medium Urgency, Medium Priority"
+            },
+            {
+              "label": "Medium Urgency, High Priority",
+              "value": "Medium Urgency, High Priority"
+            },
+            {
+              "label": "High Urgency, Medium Priority",
+              "value": "High Urgency, Medium Priority"
+            },
+            {
+              "label": "High Urgency, High Priority",
+              "value": "High Urgency, High Priority"
+            }
+          ],
+          "label": "Severity of Issue",
+          "type": "select",
+          "layout": {
+            "row": "Row_0bzl8je",
+            "columns": 7
+          },
+          "id": "Field_0rbo5w8",
+          "key": "fieldSLA",
+          "validate": {
+            "required": true
+          }
+        },
+        {
+          "values": [
+            {
+              "label": "IT",
+              "value": "IT"
+            },
+            {
+              "label": "Development",
+              "value": "Development"
+            }
+          ],
+          "label": "Type of Ticket?",
+          "type": "select",
+          "layout": {
+            "row": "Row_0bzl8je",
+            "columns": 8
+          },
+          "id": "Field_16wtr7u",
+          "key": "assignedDepartment",
+          "validate": {
+            "required": true
+          }
+        },
+        {
+          "action": "submit",
+          "label": "Submit",
+          "type": "button",
+          "layout": {
+            "row": "Row_0fs2y8h",
+            "columns": null
+          },
+          "id": "Field_1dolsqn"
+        }
+      ],
+      "generated": true,
+      "type": "default"
+    }
+        
+    </script>
+
+  <!--
+        required viewer script
+      -->
+  <script src="https://unpkg.com/@bpmn-io/form-js@1.7.3/dist/form-viewer.umd.js"></script>
+  <script>
+    const schema = JSON.parse(
+      document.querySelector('[type="application/form-schema"]').textContent
+    );
+    const container = document.querySelector('#form');
+
+    const form = new FormViewer.Form({
+      container
+    })
+    form.importSchema(schema)
+
+    form.on('submit', (event) => {
+      const errors = form.validate();
+      if (Object.keys(errors).length) {
+        console.error("Form has errors", errors);
+      } else {
+        event.preventDefault(); // Prevent the default form submission
+
+        let formData = event.data; // Accessing the data object from the event
+        console.log(formData);
+        formData = JSON.stringify(formData);
+
+        fetch('http://localhost:8080/issueSubmission', {
+          method: 'POST',
+          headers: {
+            'Content-Type': 'application/json'
+          },
+          body: formData
+        })
+          .then(response => {
+            if (!response.ok) {
+              throw new Error('Network response was not ok');
+            }
+            return response.json();
+          })
+          .then(data => {
+            if (data) {
+              console.log('Form submitted successfully', data);
+            } else {
+              console.log('Form submitted successfully');
+            }
+          })
+          .catch(error => {
+            console.error('There was a problem submitting the form', error);
+          });
+        form.reset();
+      }
+    });
+  </script>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/DISPticketing/front/reviewInformation.html b/DISPticketing/front/reviewInformation.html
index c615a95afd63aafa91a55e27ba98fc5bff36bd86..f91c39662e5e42e748090cfe3530a3f2975d3651 100644
--- a/DISPticketing/front/reviewInformation.html
+++ b/DISPticketing/front/reviewInformation.html
@@ -1,25 +1,32 @@
 <html>
 
 <head>
-    <!--
+  <!--
         required viewer styles
       -->
-    <link rel="stylesheet" href="https://unpkg.com/@bpmn-io/form-js@1.7.3/dist/assets/form-js.css">
-    <style>
-        #form {
-            max-width: 800px;
-        }
-    </style>
+  <link rel="stylesheet" href="https://unpkg.com/@bpmn-io/form-js@1.7.3/dist/assets/form-js.css">
+  <style>
+    #form {
+      max-width: 800px;
+    }
+  </style>
 </head>
 
-<body>
-    <div id="form"></div>
-
-    <!--
+<body style="background-color: lightblue;">
+  <div
+    style="display: flex; flex-direction: column; justify-content: center; align-items: center; margin: 0; background-color: lightblue;">
+    <h1>Review Completion Form</h1>
+    <div
+      style="padding: 20px; border: 2px solid black; border-radius: 10px; background-color: white; max-width: 800px; height: 550px;">
+      <div id="form">
+      </div>
+    </div>
+  </div>
+  <!--
         add your form schema to this script tag
         alternatively, load it asynchronously from anywhere
       -->
-    <script type="application/form-schema">
+  <script type="application/form-schema">
         {
             "executionPlatform": "Camunda Cloud",
             "executionPlatformVersion": "8.5.0",
@@ -71,7 +78,7 @@
                   "row": "row_7",
                   "columns": null
                 },
-                "defaultValue": "yes"
+                "defaultValue": ""
               },
               {
                 "type": "textarea",
@@ -108,63 +115,60 @@
           }
     </script>
 
-    <!--
+  <!--
         required viewer script
       -->
-    <script src="https://unpkg.com/@bpmn-io/form-js@1.7.3/dist/form-viewer.umd.js"></script>
-    <script>
-        const schema = JSON.parse(
-            document.querySelector('[type="application/form-schema"]').textContent
-        );
-        const container = document.querySelector('#form');
-
-        const form = new FormViewer.Form({
-            container
-        })
-        form.importSchema(schema)
-
+  <script src="https://unpkg.com/@bpmn-io/form-js@1.7.3/dist/form-viewer.umd.js"></script>
+  <script>
+    const schema = JSON.parse(
+      document.querySelector('[type="application/form-schema"]').textContent
+    );
+    const container = document.querySelector('#form');
 
+    const form = new FormViewer.Form({
+      container
+    })
+    form.importSchema(schema)
 
+    form.on('submit', (event) => {
+      const errors = form.validate();
+      if (Object.keys(errors).length) {
+        console.error("Form has errors", errors);
+      } else {
+        event.preventDefault(); // Prevent the default form submission
 
+        let formData = event.data; // Accessing the data object from the event
+        formData.emailType = "ReviewEmailReplied"
+        console.log(formData);
+        formData = JSON.stringify(formData);
 
-
-
-        form.on('submit', (event) => {
-          event.preventDefault(); // Prevent the default form submission
-    
-          let formData = event.data; // Accessing the data object from the event
-          formData.emailType = "ReviewEmailReplied";
-          console.log(formData);
-          formData = JSON.stringify(formData);
-    
-          fetch('http://localhost:8080/submission', {
-            method: 'POST',
-            headers: {
-              'Content-Type': 'application/json'
-            },
-            body: formData
+        fetch('http://localhost:8080/submission', {
+          method: 'POST',
+          headers: {
+            'Content-Type': 'application/json'
+          },
+          body: formData
+        })
+          .then(response => {
+            if (!response.ok) {
+              throw new Error('Network response was not ok');
+            }
+            return response.json();
           })
-            .then(response => {
-              if (!response.ok) {
-                throw new Error('Network response was not ok');
-              }
-              return response.json();
-            })
-            .then(data => {
-              if (data) {
-                console.log('Form submitted successfully', data);
-              } else {
-                console.log('Form submitted successfully');
-              }
-            })
-            .catch(error => {
-              console.error('There was a problem submitting the form', error);
-            });
-        });
-    
-
-
-    </script>
+          .then(data => {
+            if (data) {
+              console.log('Form submitted successfully', data);
+            } else {
+              console.log('Form submitted successfully');
+            }
+          })
+          .catch(error => {
+            console.error('There was a problem submitting the form', error);
+          });
+        form.reset();
+      }
+    });
+  </script>
 </body>
 
 </html>
\ No newline at end of file
diff --git a/DISPticketing/front/surveyInformation.html b/DISPticketing/front/surveyInformation.html
index e6d79a5a3cfc56d416dc46b56a21a84647191655..6b75e86289c8824824f80ed5db3f358e3cf8adb0 100644
--- a/DISPticketing/front/surveyInformation.html
+++ b/DISPticketing/front/surveyInformation.html
@@ -1,25 +1,33 @@
 <html>
 
 <head>
-    <!--
+  <!--
         required viewer styles
       -->
-    <link rel="stylesheet" href="https://unpkg.com/@bpmn-io/form-js@1.7.3/dist/assets/form-js.css">
-    <style>
-        #form {
-            max-width: 800px;
-        }
-    </style>
+  <link rel="stylesheet" href="https://unpkg.com/@bpmn-io/form-js@1.7.3/dist/assets/form-js.css">
+  <style>
+    #form {
+      max-width: 800px;
+    }
+  </style>
 </head>
 
-<body>
-    <div id="form"></div>
+<body style="background-color: lightblue;">
+  <div
+    style="display: flex; flex-direction: column; justify-content: center; align-items: center; margin: 0; background-color: lightblue;">
+    <h1>Completion Survey</h1>
+    <div
+      style="padding: 20px; border: 2px solid black; border-radius: 10px; background-color: white; max-width: 800px; height: 500px;">
+      <div id="form">
+      </div>
+    </div>
+  </div>
 
-    <!--
+  <!--
         add your form schema to this script tag
         alternatively, load it asynchronously from anywhere
       -->
-    <script type="application/form-schema">
+  <script type="application/form-schema">
         {
             "executionPlatform": "Camunda Cloud",
             "executionPlatformVersion": "8.5.0",
@@ -113,62 +121,61 @@
             "type": "default"
           }
     </script>
-
-    <!--
+  <!--
         required viewer script
       -->
-    <script src="https://unpkg.com/@bpmn-io/form-js@1.7.3/dist/form-viewer.umd.js"></script>
-    <script>
-        const schema = JSON.parse(
-            document.querySelector('[type="application/form-schema"]').textContent
-        );
-        const container = document.querySelector('#form');
-
-        const form = new FormViewer.Form({
-            container
-        })
-        form.importSchema(schema)
-
-
-
+  <script src="https://unpkg.com/@bpmn-io/form-js@1.7.3/dist/form-viewer.umd.js"></script>
+  <script>
+    const schema = JSON.parse(
+      document.querySelector('[type="application/form-schema"]').textContent
+    );
+    const container = document.querySelector('#form');
 
+    const form = new FormViewer.Form({
+      container
+    })
+    form.importSchema(schema)
 
+    form.on('submit', (event) => {
+      const errors = form.validate();
+      if (Object.keys(errors).length) {
+        console.error("Form has errors", errors);
+      } else {
+        event.preventDefault(); // Prevent the default form submission
 
+        let formData = event.data; // Accessing the data object from the event
+        formData.emailType = "SurveyEmailReplied"
+        console.log(formData);
+        formData = JSON.stringify(formData);
 
-        form.on('submit', (event) => {
-          event.preventDefault(); // Prevent the default form submission
-    
-          let formData = event.data; // Accessing the data object from the event
-          formData.emailType = "SurveyEmailReplied";
-          console.log(formData);
-          formData = JSON.stringify(formData);
-    
-          fetch('http://localhost:8080/submission', {
-            method: 'POST',
-            headers: {
-              'Content-Type': 'application/json'
-            },
-            body: formData
+        fetch('http://localhost:8080/submission', {
+          method: 'POST',
+          headers: {
+            'Content-Type': 'application/json'
+          },
+          body: formData
+        })
+          .then(response => {
+            if (!response.ok) {
+              throw new Error('Network response was not ok');
+            }
+            return response.json();
           })
-            .then(response => {
-              if (!response.ok) {
-                throw new Error('Network response was not ok');
-              }
-              return response.json();
-            })
-            .then(data => {
-              if (data) {
-                console.log('Form submitted successfully', data);
-              } else {
-                console.log('Form submitted successfully');
-              }
-            })
-            .catch(error => {
-              console.error('There was a problem submitting the form', error);
-            });
-        });
+          .then(data => {
+            if (data) {
+              console.log('Form submitted successfully', data);
+            } else {
+              console.log('Form submitted successfully');
+            }
+          })
+          .catch(error => {
+            console.error('There was a problem submitting the form', error);
+          });
+        form.reset();
+      }
+    });
 
-    </script>
+  </script>
 </body>
 
 </html>
\ No newline at end of file
diff --git a/DISPticketing/pom.xml b/DISPticketing/pom.xml
index bf7648763db259fa2f0f302314b9c809b594d968..94f5e7e37d5c39b44dee2272569d7f856c53052b 100644
--- a/DISPticketing/pom.xml
+++ b/DISPticketing/pom.xml
@@ -69,31 +69,6 @@
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-mail</artifactId>
 		</dependency>
-
-		<dependency>
-			<groupId>com.sun.mail</groupId>
-			<artifactId>javax.mail</artifactId>
-			<version>1.6.2</version>
-		</dependency>
-		
-		<dependency>
-			<groupId>com.sun.activation</groupId>
-			<artifactId>javax.activation</artifactId>
-			<version>1.2.0</version>
-		</dependency>
-		
-		<dependency>
-			<groupId>org.eclipse.angus</groupId>
-			<artifactId>jakarta.mail</artifactId>
-			<version>2.0.3</version>
-			<exclusions>
-				<exclusion>
-					<groupId>org.eclipse.angus</groupId>
-					<artifactId>angus-activation</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-
 	</dependencies>
 
 	<build>
diff --git a/DISPticketing/src/main/java/com/disp/Worker.java b/DISPticketing/src/main/java/com/disp/Worker.java
index 609bdec054db248abd8c2eb379418af907324deb..f5baa70a4523fb490a358233ed75dd9fa8506142 100644
--- a/DISPticketing/src/main/java/com/disp/Worker.java
+++ b/DISPticketing/src/main/java/com/disp/Worker.java
@@ -2,14 +2,12 @@ package com.disp;
 
 import java.util.HashMap;
 import java.util.Map;
-
 import com.disp.email.EmailRequest;
 import com.disp.email.EmailService;
 import com.disp.forms.FormData;
 import com.disp.ticket.Ticket;
 import com.disp.ticket.TicketCamundaManager;
 import com.disp.ticket.TicketDBManager;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -17,10 +15,8 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
-
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.client.RestTemplate;
-
 import io.camunda.zeebe.client.ZeebeClient;
 import io.camunda.zeebe.client.api.response.ActivatedJob;
 import io.camunda.zeebe.client.api.worker.JobClient;
@@ -46,6 +42,7 @@ public class Worker {
         return new RestTemplate();
     }
 
+    // creates a ticket and stores within the database
     @JobWorker(type = "createTicket", autoComplete = false)
     public void createTicket(final JobClient client, final ActivatedJob job) {
         // get the process instance variables and creates a ticket object
@@ -57,7 +54,18 @@ public class Worker {
         TicketDBManager ticketCRUD = new TicketDBManager();
         ticketCRUD.createTicket(ticket);
         variableMap.put("ticketID", ticket.getId());
-        variableMap.put("ticketStatus", "active");
+        variableMap.put("creationDate", ticket.getCreationDate());
+        variableMap.put("loggedTime", ticket.getLoggedTime());
+        variableMap.put("ticketStatus", "Open");
+
+        // send email notifying that the ticket has been closed
+        String sender = "joewilko17@gmail.com";
+        String subject = "Ticket Open!";
+        String body = "Hello " + ticket.getName()
+                + ", Your ticket is now open and being worked on! Kind Regards, Your Company";
+        String recipient = ticket.getEmail();
+        emailService.sendEmail(subject, body, sender, recipient);
+
         System.out.println(variableMap);
 
         // complete task and return all variables
@@ -66,6 +74,7 @@ public class Worker {
                 .send();
     }
 
+    // updates a ticket with variables taken from the process engine
     @JobWorker(type = "updateTicket", autoComplete = false)
     public void updateTicket(final JobClient client, final ActivatedJob job) {
         // get the process instance variables and creates a ticket object
@@ -75,11 +84,25 @@ public class Worker {
 
         // make changes to the database
         TicketDBManager ticketDBManager = new TicketDBManager();
-        ticketDBManager.updateTicket(ticket.getId(), ticket);
+        // Check if the ticket needs to be moved from Email_Tickets to the appropriate
+        // department table
+        if (ticket.getAssignedDepartment() != null) {
+            if (ticketDBManager.ticketExistsInEmailTickets(ticket.getId())) {
+                ticketDBManager.moveTicketToDepartment(ticket.getId(), ticket);
+            } else {
+                ticketDBManager.updateTicket(ticket.getId(), ticket);
+            }
+        } else {
+            ticketDBManager.updateTicket(ticket.getId(), ticket);
+        }
 
         // complete the task updating the variables in the camunda process instance
         variableMap.put("fieldManagerReviewDescription",
                 ticketDBManager.getGeneratedDescription(ticket.getId(), ticket));
+        // update the logged time as new value calculated when getTicketFromEngine()
+        // called
+        variableMap.put("ticketID", ticket.getId());
+        variableMap.put("loggedTime", ticket.getLoggedTime());
 
         // complete task and return all variables
         client.newCompleteCommand(job.getKey())
@@ -87,6 +110,7 @@ public class Worker {
                 .send();
     }
 
+    // sets the status of a ticket to closed
     @JobWorker(type = "closeTicket", autoComplete = false)
     public void closeTicket(final JobClient client, final ActivatedJob job) {
         // get the ticket from camunda process variables, using getTicketFromEngine()
@@ -95,7 +119,7 @@ public class Worker {
         Ticket ticket = ticketCamundaManager.getTicketFromEngine(variableMap);
 
         // set the ticket status to closed
-        ticket.setStatus("closed");
+        ticket.setStatus("Closed");
 
         // make changes to the database
         TicketDBManager ticketDBManager = new TicketDBManager();
@@ -104,12 +128,22 @@ public class Worker {
         // complete the task updating the variables in the camunda process instance
         variableMap.put("ticketStatus", ticket.getStatus());
 
+        // send email notifying that the ticket has been closed
+        String sender = "joewilko17@gmail.com";
+        String subject = "Ticket Closed: Inactive 2 Weeks";
+        String body = "Hello " + ticket.getName()
+                + ", Your ticket has been inactive for two weeks and has been closed! Kind Regards, Your Company";
+        String recipient = ticket.getEmail();
+        emailService.sendEmail(subject, body, sender, recipient);
+        System.out.println("Ticket Closed");
+
         // complete task
         client.newCompleteCommand(job.getKey())
                 .variables(variableMap)
                 .send();
     }
 
+    // sets the status of a ticket to complete
     @JobWorker(type = "completeTicket", autoComplete = false)
     public void completeTicket(final JobClient client, final ActivatedJob job) {
         // get the ticket from camunda process variables, using getTicketFromEngine()
@@ -118,7 +152,7 @@ public class Worker {
         Ticket ticket = ticketCamundaManager.getTicketFromEngine(variableMap);
 
         // set the ticket status to complete
-        ticket.setStatus("completed");
+        ticket.setStatus("Completed");
 
         TicketDBManager ticketDBManager = new TicketDBManager();
         ticketDBManager.updateTicket(ticket.getId(), ticket);
@@ -126,12 +160,23 @@ public class Worker {
         // complete the task updating the variables in the camunda process instance
         variableMap.put("ticketStatus", ticket.getStatus());
 
+        // send email notifying that the ticket has been closed
+        String sender = "joewilko17@gmail.com";
+        String subject = "Ticket Complete!";
+        String body = "Hello " + ticket.getName()
+                + ", Your ticket has been successfuly solved and has been completed! Kind Regards, Your Company";
+        String recipient = ticket.getEmail();
+        emailService.sendEmail(subject, body, sender, recipient);
+
+        System.out.println("Ticket Completed");
         // complete task
         client.newCompleteCommand(job.getKey())
                 .variables(variableMap)
                 .send();
     }
 
+    // method which sends an email to the end user based on the type of email
+    // needing to be sent using switch/case statements
     @JobWorker(type = "sendEmail", autoComplete = false)
     public void sendEmail(final JobClient client, final ActivatedJob job) {
         // get the email details to send from the header type
@@ -143,10 +188,9 @@ public class Worker {
         String sender = "joewilko17@gmail.com";
         String subject = "";
         String body = "";
-        // change to ticket.getEmail();
-        String recipient = ticket.getName();
+        String recipient = ticket.getEmail();
 
-        // Determine recipient based on the emailType header
+        // determine recipient based on the emailType header
         switch (emailType) {
             case "Survey":
                 // survey email contents
@@ -161,7 +205,7 @@ public class Worker {
             case "ExtraInfo":
                 // extra information email contents
                 subject = "We Require More Info!";
-                body = "Please fill out the form:  <a href=\'http://localhost:8000/extraInformation.html'>This link will take you to the form!</a>";
+                body = ticket.getMoreDescription() + ". Please fill out the form:  <a href=\'http://localhost:8000/extraInformation.html'>This link will take you to the form!</a>";
                 break;
             default:
                 break;
@@ -169,6 +213,7 @@ public class Worker {
 
         // send email
         emailService.sendEmail(subject, body, sender, recipient);
+        System.out.println("Sending Email of Type: " + emailType);
 
         // complete the task
         client.newCompleteCommand(job.getKey())
@@ -176,42 +221,20 @@ public class Worker {
                 .join();
     }
 
-    // defunct remove in a bit
-    @JobWorker(type = "saveSurvey", autoComplete = false)
-    public void saveSurvey(final JobClient client, final ActivatedJob job) {
-        // get the ticket from camunda process variables, using getTicketFromEngine()
-        Map<String, Object> variableMap = job.getVariablesAsMap();
-        TicketCamundaManager ticketCamundaManager = new TicketCamundaManager();
-        Ticket ticket = ticketCamundaManager.getTicketFromEngine(variableMap);
-
-        TicketDBManager ticketDBManager = new TicketDBManager();
-        ticketDBManager.updateTicket(ticket.getId(), ticket);
-
-        // complete the task updating the variables in the camunda process instance
-        variableMap.put("fieldSatisfactionLevel", ticket.getSatisfactionLevel());
-        variableMap.put("fieldComments", ticket.getComments());
-
-        // complete task
-        client.newCompleteCommand(job.getKey())
-                .variables(variableMap)
-                .send();
-    }
-
+    // method by which email can be recieved from a sender for submitting an issue
     @PostMapping("/email")
     public void receiveEmail(@RequestBody EmailRequest emailRequest) {
         // gets the values from the email and stores to variable
-        System.out.println("Email received:");
-        System.out.println("Sender: " + emailRequest.getSender());
-        System.out.println("Subject: " + emailRequest.getSubject());
-        System.out.println("Body: " + emailRequest.getBody());
+        System.out.println("Email received: Sending to Database and Process Engine");
 
         String sender = emailRequest.getSender();
-        String contactDetails = "N/A";
-        String department = "N/A";
+        String contactDetails = emailRequest.getContactDetails();
+        String department = emailRequest.getDepartment();
         String serviceLevelAgreement = emailRequest.getServiceLevelAgreement();
         String assignedDepartment = emailRequest.getAssignedDepartment();
         String subject = emailRequest.getSubject();
         String body = emailRequest.getBody();
+        String email = emailRequest.getEmail();
 
         // loads a variable map with the content from the email
         Map<String, Object> emailContents = new HashMap<>();
@@ -222,6 +245,14 @@ public class Worker {
         emailContents.put("assignedDepartment", assignedDepartment);
         emailContents.put("fieldTitle", subject);
         emailContents.put("fieldDescription", body);
+        emailContents.put("fieldEmail", email);
+        emailContents.put("ticketStatus", "Open");
+
+        // // save the email into a ticket, to send to database
+        // TicketCamundaManager TicketCamundaManager = new TicketCamundaManager();
+        // Ticket ticket = TicketCamundaManager.getTicketFromEmail(emailContents);
+        // TicketDBManager ticketCRUD = new TicketDBManager();
+        // ticketCRUD.createTicket(ticket);
 
         // triggers the email recieved boundary event
         zClient.newPublishMessageCommand()
@@ -231,6 +262,39 @@ public class Worker {
                 .send();
     }
 
+    @PostMapping("/issueSubmission")
+    public ResponseEntity<String> recieveIssueForm(@RequestBody FormData formData) {
+
+        String fieldName = formData.getFieldName();
+        String fieldEmail = formData.getFieldEmail();
+        String fieldContactNumber = formData.getFieldContactNumber();
+        String fieldDepartment = formData.getFieldDepartment();
+        String fieldTitle = formData.getFieldTitle();
+        String fieldDescription = formData.getFieldDescription();
+        String fieldSLA = formData.getFieldSLA();
+        String assignedDepartment = formData.getAssignedDepartment();
+
+        Map<String, Object> formContents = new HashMap<>();
+        formContents.put("fieldName", fieldName);
+        formContents.put("fieldEmail", fieldEmail);
+        formContents.put("fieldContactNumber", fieldContactNumber);
+        formContents.put("fieldDepartment", fieldDepartment);
+        formContents.put("fieldTitle", fieldTitle);
+        formContents.put("fieldDescription", fieldDescription);
+        formContents.put("fieldSLA", fieldSLA);
+        formContents.put("assignedDepartment", assignedDepartment);
+
+        System.out.println("Issue form data has been retrieved");
+
+        zClient.newPublishMessageCommand()
+                .messageName("issueFormRecieved")
+                .correlationKey("Recieved")
+                .variables(formContents)
+                .send();
+        return ResponseEntity.ok("{\"message\": \"Form submitted successfully\"}");
+    }
+
+    // method to retrieve external form data sent by email to the end user
     @PostMapping("/submission")
     public ResponseEntity<String> receiveFormData(@RequestBody FormData formData) {
         // find out which email type this is recieving data from
@@ -261,8 +325,8 @@ public class Worker {
             formContents.put("fieldComments", comments);
         }
 
-        // finish any recieve tasks waiting on an email based on which header was
-        // requested
+        System.out.println("Form Data Recieved from " + emailType);
+
         zClient.newPublishMessageCommand()
                 .messageName(emailType)
                 .correlationKey("Reply")
diff --git a/DISPticketing/src/main/java/com/disp/email/EmailConfig.java b/DISPticketing/src/main/java/com/disp/email/EmailConfig.java
index 3e3391f33f4eb40b9d7cdc0b5ee75599b5146636..8e142f39360d3559d8708cf3882f912b7cdc9da1 100644
--- a/DISPticketing/src/main/java/com/disp/email/EmailConfig.java
+++ b/DISPticketing/src/main/java/com/disp/email/EmailConfig.java
@@ -10,11 +10,6 @@ import org.springframework.mail.javamail.JavaMailSenderImpl;
 
 @Configuration
 public class EmailConfig {
-
-    private String userName = "joewilko17@gmail.com";
-
-    private String password = "hqwkhcbqztnlcfhd";
-
     @Bean
     public JavaMailSender mailSender() {
         
@@ -22,21 +17,15 @@ public class EmailConfig {
 
         mailSender.setHost("smtp.gmail.com");
         mailSender.setPort(587);
-        mailSender.setUsername(userName);
-        mailSender.setPassword(password); 
+        mailSender.setUsername("joewilko17@gmail.com");
+        mailSender.setPassword("hqwkhcbqztnlcfhd"); 
 
         Properties javaMailProperties = new Properties();
-        javaMailProperties.put("mail.smtp.auth", "true"); // Change to string value
-        javaMailProperties.put("mail.smtp.starttls.enable", "true"); // Change to string value
+        javaMailProperties.put("mail.smtp.auth", "true");
+        javaMailProperties.put("mail.smtp.starttls.enable", "true"); 
 
         mailSender.setJavaMailProperties(javaMailProperties);
 
         return mailSender;
     }
-
-    //only one getter so that emails can be sent from the correct address in Worker.java
-    public String getUserName() {
-        return userName;
-    }
-
 }
diff --git a/DISPticketing/src/main/java/com/disp/email/EmailListener.java b/DISPticketing/src/main/java/com/disp/email/EmailListener.java
index 0561531b17dd0f42dbb8a793f2750685be536822..6595b484d049f5bfdeb2bfae1cee9c74b1f4ddc3 100644
--- a/DISPticketing/src/main/java/com/disp/email/EmailListener.java
+++ b/DISPticketing/src/main/java/com/disp/email/EmailListener.java
@@ -1,24 +1,19 @@
 package com.disp.email;
 
-import javax.mail.*;
-import javax.mail.event.*;
-import javax.mail.internet.MimeMultipart;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
-
 import jakarta.annotation.PostConstruct;
-
+import jakarta.mail.*;
+import jakarta.mail.event.*;
+import jakarta.mail.internet.MimeMultipart;
 import java.io.IOException;
 import java.util.Properties;
 import java.util.Timer;
 import java.util.TimerTask;
 
-
 @Service
 public class EmailListener {
 
@@ -62,6 +57,9 @@ public class EmailListener {
                     for (Message message : messages) {
                         try {
                             String sender = message.getFrom()[0].toString();
+                            String[] senderParts = parseSender(sender);
+                            String name = senderParts[0];
+                            String email = senderParts[1];
                             String subject = message.getSubject();
                             Object content = message.getContent();
                             String body = "";
@@ -75,7 +73,8 @@ public class EmailListener {
                             System.out.println(subject);
                             System.out.println(body);
                             // Send email data to the API endpoint
-                            EmailRequest emailRequest = new EmailRequest(sender, null, null, null, null, subject, body);
+                            EmailRequest emailRequest = new EmailRequest(name, null, null, null, null, subject, body,
+                                    email);
                             restTemplate.postForObject(EMAIL_RECEIVE_ENDPOINT, emailRequest, Void.class);
                         } catch (Exception ex) {
                             ex.printStackTrace();
@@ -85,22 +84,20 @@ public class EmailListener {
 
                 @Override
                 public void messagesRemoved(MessageCountEvent e) {
-                    // Not used in this example
                 }
             });
 
-            // Check for new messages every 10 seconds
             Timer timer = new Timer();
             timer.scheduleAtFixedRate(new TimerTask() {
                 @Override
                 public void run() {
                     try {
-                        inbox.getMessageCount(); // Triggers MessageCountListener
+                        inbox.getMessageCount(); 
                     } catch (MessagingException e) {
                         e.printStackTrace();
                     }
                 }
-            }, 0, 10000); // Check every 10 seconds
+            }, 0, 1000); 
 
         } catch (Exception e) {
             e.printStackTrace();
@@ -114,13 +111,27 @@ public class EmailListener {
         for (int i = 0; i < count; i++) {
             BodyPart bodyPart = multipart.getBodyPart(i);
             if (bodyPart.getContent() instanceof MimeMultipart) {
-                // Recursively process nested multiparts
                 textContent.append(getTextFromMimeMultipart((MimeMultipart) bodyPart.getContent()));
-            } else if (bodyPart.isMimeType("text/*")) {
-                // If the body part is text, append it to the text content
-                textContent.append(bodyPart.getContent().toString());
+            } else if (bodyPart.isMimeType("text/plain")) {
+                String text = bodyPart.getContent().toString()
+                        .replaceAll("\\r\\n|\\r|\\n|\\t|\\f|\\b", " ");
+                textContent.append(text);
             }
         }
         return textContent.toString();
     }
+
+    // Method to parse sender name and email address
+    private static String[] parseSender(String sender) {
+        String name = "";
+        String email = "";
+        String[] parts = sender.split("<");
+        if (parts.length > 1) {
+            name = parts[0].trim();
+            email = parts[1].replaceAll(">", "").trim();
+        } else {
+            email = sender.trim();
+        }
+        return new String[] { name, email };
+    }
 }
diff --git a/DISPticketing/src/main/java/com/disp/email/EmailRequest.java b/DISPticketing/src/main/java/com/disp/email/EmailRequest.java
index c189ddbd3a41bb1b3fae60136f7a670d567ac45c..c99858a9a4e6a05b79a4b0975824a0cb04a2aad3 100644
--- a/DISPticketing/src/main/java/com/disp/email/EmailRequest.java
+++ b/DISPticketing/src/main/java/com/disp/email/EmailRequest.java
@@ -9,11 +9,11 @@ public class EmailRequest {
     private String assignedDepartment;
     private String subject;
     private String body;
-
+    private String email;
     
 
     public EmailRequest(String sender, String contactDetails, String department, String serviceLevelAgreement,
-            String assignedDepartment, String subject, String body) {
+            String assignedDepartment, String subject, String body, String email) {
         this.sender = sender;
         this.contactDetails = contactDetails;
         this.department = department;
@@ -21,6 +21,7 @@ public class EmailRequest {
         this.assignedDepartment = assignedDepartment;
         this.subject = subject;
         this.body = body;
+        this.email = email;
     }
     // getters and setters
     public String getSender() {
@@ -65,6 +66,11 @@ public class EmailRequest {
     public void setBody(String body) {
         this.body = body;
     }
+    public String getEmail() {
+        return email;
+    }
+    public void setEmail(String email) {
+        this.email = email;
+    }
 
-    
 }
diff --git a/DISPticketing/src/main/java/com/disp/email/EmailService.java b/DISPticketing/src/main/java/com/disp/email/EmailService.java
index cc192d4ad87cd2792d5cedbad08bc2af3edbd875..23eb8fe37764737cb329e7e77bc81b224987acc4 100644
--- a/DISPticketing/src/main/java/com/disp/email/EmailService.java
+++ b/DISPticketing/src/main/java/com/disp/email/EmailService.java
@@ -13,15 +13,14 @@ public class EmailService {
     private JavaMailSender mailSender;
 
     public void sendEmail(String subject, String messageBody, String from, String to) {
-        // Define your email details
     
-        // Create a MimeMessagePreparator using a lambda expression
+        // Create a MimeMessagePreparator 
         MimeMessagePreparator messagePreparator = mimeMessage -> {
             MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
             messageHelper.setTo(to);
             messageHelper.setFrom(from);
             messageHelper.setSubject(subject);
-            messageHelper.setText(messageBody, true); // Set to true if using HTML content
+            messageHelper.setText(messageBody, true); 
         };
 
         // Send the email
diff --git a/DISPticketing/src/main/java/com/disp/forms/FormData.java b/DISPticketing/src/main/java/com/disp/forms/FormData.java
index 43060654eef6ee355360fe757b96123bad66af04..fc1a6f1cf34e92a3d630e9299578d22d34a9d4d6 100644
--- a/DISPticketing/src/main/java/com/disp/forms/FormData.java
+++ b/DISPticketing/src/main/java/com/disp/forms/FormData.java
@@ -2,36 +2,108 @@ package com.disp.forms;
 
 public class FormData {
    
+    // form data variables
     private String emailType;
-
+    private String fieldName;
+    private String fieldEmail;
+    private String fieldContactNumber;
+    private String fieldDepartment;
+    private String fieldTitle;
+    private String fieldDescription;
+    private String fieldSLA;
+    private String assignedDepartment;
     private String fieldDetailedDescription;
     private String issueResolved;
     private String fieldUnresolvedReason;
     private String fieldSatisfactionLevel;
     private String fieldComments;
 
+    // getter and setters
     public String getEmailType() {
         return emailType;
     }
-
+    public void setEmailType(String emailType) {
+        this.emailType = emailType;
+    }
+    public String getFieldName() {
+        return fieldName;
+    }
+    public void setFieldName(String fieldName) {
+        this.fieldName = fieldName;
+    }
+    public String getFieldEmail() {
+        return fieldEmail;
+    }
+    public void setFieldEmail(String fieldEmail) {
+        this.fieldEmail = fieldEmail;
+    }
+    public String getFieldContactNumber() {
+        return fieldContactNumber;
+    }
+    public void setFieldContactNumber(String fieldContactNumber) {
+        this.fieldContactNumber = fieldContactNumber;
+    }
+    public String getFieldDepartment() {
+        return fieldDepartment;
+    }
+    public void setFieldDepartment(String fieldDepartment) {
+        this.fieldDepartment = fieldDepartment;
+    }
+    public String getFieldTitle() {
+        return fieldTitle;
+    }
+    public void setFieldTitle(String fieldTitle) {
+        this.fieldTitle = fieldTitle;
+    }
+    public String getFieldDescription() {
+        return fieldDescription;
+    }
+    public void setFieldDescription(String fieldDescription) {
+        this.fieldDescription = fieldDescription;
+    }
+    public String getFieldSLA() {
+        return fieldSLA;
+    }
+    public void setFieldSLA(String fieldSLA) {
+        this.fieldSLA = fieldSLA;
+    }
+    public String getAssignedDepartment() {
+        return assignedDepartment;
+    }
+    public void setAssignedDepartment(String assignedDepartment) {
+        this.assignedDepartment = assignedDepartment;
+    }
     public String getFieldDetailedDescription() {
         return fieldDetailedDescription;
     }
-
+    public void setFieldDetailedDescription(String fieldDetailedDescription) {
+        this.fieldDetailedDescription = fieldDetailedDescription;
+    }
     public String getIssueResolved() {
         return issueResolved;
     }
-
+    public void setIssueResolved(String issueResolved) {
+        this.issueResolved = issueResolved;
+    }
     public String getFieldUnresolvedReason() {
         return fieldUnresolvedReason;
     }
-
+    public void setFieldUnresolvedReason(String fieldUnresolvedReason) {
+        this.fieldUnresolvedReason = fieldUnresolvedReason;
+    }
     public String getFieldSatisfactionLevel() {
         return fieldSatisfactionLevel;
     }
-
+    public void setFieldSatisfactionLevel(String fieldSatisfactionLevel) {
+        this.fieldSatisfactionLevel = fieldSatisfactionLevel;
+    }
     public String getFieldComments() {
         return fieldComments;
     }
+    public void setFieldComments(String fieldComments) {
+        this.fieldComments = fieldComments;
+    }
+
+
 
 }
diff --git a/DISPticketing/src/main/java/com/disp/ticket/Ticket.java b/DISPticketing/src/main/java/com/disp/ticket/Ticket.java
index 30b1b3fd3f08c00055581a2f9b5ec9ea359eeb74..a45fe28488a2dd55d7a8c9bbbfa18c323234e8ea 100644
--- a/DISPticketing/src/main/java/com/disp/ticket/Ticket.java
+++ b/DISPticketing/src/main/java/com/disp/ticket/Ticket.java
@@ -2,12 +2,13 @@ package com.disp.ticket;
 
 public class Ticket {
     private String name;
+    private String email;
     private String contactNumber;
     private String department;
     private String ticketTitle;
     private String ticketDescription;
     private String serviceLevelAgreement;
-    private String assignedDepartment; 
+    private String assignedDepartment;
     private Integer id;
     private String status;
     private String assignedEmployee;
@@ -16,10 +17,13 @@ public class Ticket {
     private String unresolvedReason;
     private String satisfactionLevel;
     private String comments;
+    private String creationDate;
+    private String loggedTime;
 
     // default constructor
-    public Ticket(){
+    public Ticket() {
         this.name = null;
+        this.email = null;
         this.contactNumber = null;
         this.department = null;
         this.ticketTitle = null;
@@ -34,13 +38,20 @@ public class Ticket {
         this.unresolvedReason = null;
         this.satisfactionLevel = null;
         this.comments = null;
+        this.creationDate = null;
+        this.loggedTime = null;
+
     }
 
     // constructor for ticket creation
-    public Ticket(String name, String contactNumber, String department, String ticketTitle, String ticketDescription, 
-    String serviceLevelAgreement, String assignedDepartment, Integer id, String status, String assignedEmployee,String moreDescription, 
-    String detailedDescription,String unresolvedReason,String satisfactionLevel, String comments) {
+    public Ticket(String name, String email, String contactNumber, String department, String ticketTitle,
+            String ticketDescription,
+            String serviceLevelAgreement, String assignedDepartment, Integer id, String status, String assignedEmployee,
+            String moreDescription,
+            String detailedDescription, String unresolvedReason, String satisfactionLevel, String comments,
+            String creationDate, String loggedTime) {
         this.name = name;
+        this.email = email;
         this.contactNumber = contactNumber;
         this.department = department;
         this.ticketTitle = ticketTitle;
@@ -48,13 +59,16 @@ public class Ticket {
         this.serviceLevelAgreement = serviceLevelAgreement;
         this.assignedDepartment = assignedDepartment;
         this.id = id;
-        this.status = status;        
+        this.status = status;
         this.assignedEmployee = assignedEmployee;
         this.moreDescription = moreDescription;
         this.detailedDescription = detailedDescription;
         this.unresolvedReason = unresolvedReason;
         this.satisfactionLevel = satisfactionLevel;
         this.comments = comments;
+        this.creationDate = creationDate;
+        this.loggedTime = loggedTime;
+
     }
 
     // function to return a singular ticket description for camunda process instance
@@ -85,7 +99,7 @@ public class Ticket {
         }
     }
 
-     // getter & setter methods
+    // getter & setter methods
     public String getName() {
         return name;
     }
@@ -94,6 +108,14 @@ public class Ticket {
         this.name = name;
     }
 
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
     public String getContactNumber() {
         return contactNumber;
     }
@@ -205,4 +227,21 @@ public class Ticket {
     public void setComments(String comments) {
         this.comments = comments;
     }
+
+    public String getCreationDate() {
+        return creationDate;
+    }
+
+    public void setCreationDate(String creationDate) {
+        this.creationDate = creationDate;
+    }
+
+    public String getLoggedTime() {
+        return loggedTime;
+    }
+
+    public void setLoggedTime(String loggedTime) {
+        this.loggedTime = loggedTime;
+    }
+
 }
diff --git a/DISPticketing/src/main/java/com/disp/ticket/TicketCamundaManager.java b/DISPticketing/src/main/java/com/disp/ticket/TicketCamundaManager.java
index 21f76dfcb84b3b62c1e4d5a48d0d00869e1725e2..0b2427a4e1cae55fe220fa03bd81b5b27753dccf 100644
--- a/DISPticketing/src/main/java/com/disp/ticket/TicketCamundaManager.java
+++ b/DISPticketing/src/main/java/com/disp/ticket/TicketCamundaManager.java
@@ -1,5 +1,8 @@
 package com.disp.ticket;
 
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.Map;
 
 public class TicketCamundaManager {
@@ -8,6 +11,7 @@ public class TicketCamundaManager {
         // variableMap)
         int ticketID = variableMap.containsKey("ticketID") ? (int) variableMap.get("ticketID") : 0;
         String name = (String) variableMap.get("fieldName");
+        String email = (String) variableMap.get("fieldEmail");
         String contactNumber = (String) variableMap.get("fieldContactNumber");
         String department = (String) variableMap.get("fieldDepartment");
         String ticketTitle = (String) variableMap.get("fieldTitle");
@@ -21,10 +25,45 @@ public class TicketCamundaManager {
         String unresolvedReason = (String) variableMap.get("fieldUnresolvedReason");
         String satisfactionLevel = (String) variableMap.get("fieldSatisfactionLevel");
         String comments = (String) variableMap.get("fieldComments");
+        String creationDate = (String) variableMap.get("creationDate");
+        String loggedTime = (String) variableMap.get("loggedTime");
+
+        if (creationDate == null) {
+            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Date date = new Date();
+            creationDate = formatter.format(date);
+        }
+        loggedTime = calculateTimeDifference(creationDate);
 
         // create and return a new ticket object with these values
-        return new Ticket(name, contactNumber, department, ticketTitle, ticketDescription, sla,
+        return new Ticket(name, email, contactNumber, department, ticketTitle, ticketDescription, sla,
                 assignedDepartment, ticketID, status,
-                assignedEmployee, moreDescription, detailedDescription, unresolvedReason, satisfactionLevel, comments);
+                assignedEmployee, moreDescription, detailedDescription, unresolvedReason, satisfactionLevel, comments,
+                creationDate, loggedTime);
+    }
+
+    private static String calculateTimeDifference(String creationDate) {
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date currentDate = new Date();
+        String loggedTime = "";
+
+        try {
+            // Parse creationDate
+            Date dateCreationDate = formatter.parse(creationDate);
+
+            // Calculate the difference between currentDate and dateCreationDate
+            long difference = currentDate.getTime() - dateCreationDate.getTime();
+            long seconds = difference / 1000 % 60;
+            long minutes = difference / (60 * 1000) % 60;
+            long hours = difference / (60 * 60 * 1000);
+
+            // Format the difference into HH:mm:ss format
+            loggedTime = String.format("%02d:%02d:%02d", hours, minutes, seconds);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+
+        return loggedTime;
     }
+
 }
diff --git a/DISPticketing/src/main/java/com/disp/ticket/TicketDBManager.java b/DISPticketing/src/main/java/com/disp/ticket/TicketDBManager.java
index 2f9c811c8af052ccd484e9cda32bed2a1ad30535..d7ab79c561233e5327fc7cebb0f3b8c1246f38f8 100644
--- a/DISPticketing/src/main/java/com/disp/ticket/TicketDBManager.java
+++ b/DISPticketing/src/main/java/com/disp/ticket/TicketDBManager.java
@@ -10,10 +10,10 @@ public class TicketDBManager {
     public void createTicket(Ticket ticket) {
         // first create the ticketStorage database if it doesnt already exist
         // then add the ticket to that database
-        
+
         // get the correct table to add ticket
         String tableName;
-        if(ticket.getAssignedDepartment() != null){
+        if (ticket.getAssignedDepartment() != null) {
             if (ticket.getAssignedDepartment().equals("Development")) {
                 tableName = "Development_Tickets";
             } else if (ticket.getAssignedDepartment().equals("IT")) {
@@ -22,35 +22,36 @@ public class TicketDBManager {
                 System.err.println("Invalid department: " + ticket.getAssignedDepartment());
                 return;
             }
-        }
-        else{
+        } else {
             tableName = "Email_Tickets";
         }
-       
 
-        String createTicket = "INSERT INTO "+ tableName + " (name, contactNumber, department, ticketTitle, ticketDescription, serviceLevelAgreement, status) "
-                + "VALUES (?, ?, ?, ?, ?, ?,?)";
+        String createTicket = "INSERT INTO " + tableName
+                + " (name, email, contactNumber, department, ticketTitle, ticketDescription, serviceLevelAgreement, status, creationDate, loggedTime) "
+                + "VALUES (?, ?, ?, ?, ?, ?, ?,?,?,?)";
         try (Connection connection = SQLiteConnection.connect();
                 PreparedStatement statement = connection.prepareStatement(createTicket,
                         Statement.RETURN_GENERATED_KEYS)) {
 
             // set the parameters of the INSERT statement
             statement.setString(1, ticket.getName());
-            statement.setString(2, ticket.getContactNumber());
-            statement.setString(3, ticket.getDepartment());
-            statement.setString(4, ticket.getTicketTitle());
-            statement.setString(5, ticket.getTicketDescription());
-            statement.setString(6, ticket.getServiceLevelAgreement());
-            statement.setString(7, "active");
-
-            // execute the INSERT statement
+            statement.setString(2, ticket.getEmail());
+            statement.setString(3, ticket.getContactNumber());
+            statement.setString(4, ticket.getDepartment());
+            statement.setString(5, ticket.getTicketTitle());
+            statement.setString(6, ticket.getTicketDescription());
+            statement.setString(7, ticket.getServiceLevelAgreement());
+            statement.setString(8, "Open");
+            statement.setString(9, ticket.getCreationDate());
+            statement.setString(10, ticket.getLoggedTime());
+
+
             statement.executeUpdate();
 
             // get the ticketId generated by the database and assign it to this ticket
-            // object
             ResultSet generatedKeys = statement.getGeneratedKeys();
             if (generatedKeys.next()) {
-                ticket.setId(generatedKeys.getInt(1)); // Assuming the ID is of type long
+                ticket.setId(generatedKeys.getInt(1)); 
                 System.out.println("Generated Ticket ID: " + ticket.getId());
             } else {
                 System.out.println("Failed to retrieve generated Ticket ID.");
@@ -64,6 +65,95 @@ public class TicketDBManager {
 
     }
 
+    public void moveTicketToDepartment(int ticketID, Ticket ticket) {
+        // move the ticket from Email_Tickets to the appropriate department table
+        String sourceTableName = "Email_Tickets";
+        String destinationTableName;
+
+        if (ticket.getAssignedDepartment().equals("Development")) {
+            destinationTableName = "Development_Tickets";
+        } else if (ticket.getAssignedDepartment().equals("IT")) {
+            destinationTableName = "IT_Tickets";
+        } else {
+            System.err.println("Invalid department: " + ticket.getAssignedDepartment());
+            return;
+        }
+
+        String selectSql = "SELECT * FROM " + sourceTableName + " WHERE ticketID = ?";
+        String insertSql = "INSERT INTO " + destinationTableName
+                + " (name, email, contactNumber, department, ticketTitle, ticketDescription, serviceLevelAgreement, status, creationDate, loggedTime) "
+                + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+        String deleteSql = "DELETE FROM " + sourceTableName + " WHERE ticketID = ?";
+
+        try (Connection connection = SQLiteConnection.connect();
+                PreparedStatement selectStatement = connection.prepareStatement(selectSql);
+                PreparedStatement insertStatement = connection.prepareStatement(insertSql);
+                PreparedStatement deleteStatement = connection.prepareStatement(deleteSql)) {
+
+            // select ticket from Email_Tickets
+            selectStatement.setInt(1, ticketID);
+            ResultSet resultSet = selectStatement.executeQuery();
+
+            // if ticket found in Email_Tickets, move it to the department table
+            if (resultSet.next()) {
+                insertStatement.setString(1, resultSet.getString("name"));
+                insertStatement.setString(2, resultSet.getString("email"));
+                insertStatement.setString(3, resultSet.getString("contactNumber"));
+                insertStatement.setString(4, resultSet.getString("department"));
+                insertStatement.setString(5, resultSet.getString("ticketTitle"));
+                insertStatement.setString(6, resultSet.getString("ticketDescription"));
+                insertStatement.setString(7, resultSet.getString("serviceLevelAgreement"));
+                insertStatement.setString(8, resultSet.getString("status"));
+                insertStatement.setString(9, resultSet.getString("creationDate"));
+                insertStatement.setString(10, resultSet.getString("loggedTime"));
+
+                insertStatement.executeUpdate();
+
+                // delete the ticket from Email_Tickets
+                deleteStatement.setInt(1, ticketID);
+                deleteStatement.executeUpdate();
+
+                // update the ticket ID in the Ticket object
+                ticket.setId(getLastInsertedID(connection));
+
+                System.out.println(
+                        "Ticket moved from Email_Tickets to " + destinationTableName + " with ID: " + ticket.getId());
+            } else {
+                System.err.println("Ticket not found in Email_Tickets.");
+            }
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private int getLastInsertedID(Connection connection) throws SQLException {
+        String sql = "SELECT last_insert_rowid()";
+        try (Statement statement = connection.createStatement();
+                ResultSet resultSet = statement.executeQuery(sql)) {
+            return resultSet.getInt(1);
+        }
+    }
+
+    public boolean ticketExistsInEmailTickets(int ticketID) {
+        String selectSql = "SELECT COUNT(*) AS count FROM Email_Tickets WHERE ticketID = ?";
+        try (Connection connection = SQLiteConnection.connect();
+                PreparedStatement selectStatement = connection.prepareStatement(selectSql)) {
+            // set the parameter of the SELECT statement
+            selectStatement.setInt(1, ticketID);
+
+            // execute the SELECT statement
+            try (ResultSet resultSet = selectStatement.executeQuery()) {
+                // if a result is found, return true
+                if (resultSet.next()) {
+                    return resultSet.getInt("count") > 0;
+                }
+            }
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+
     public void updateTicket(int ticketID, Ticket ticket) {
         // update the ticket in the database relative to the ticketID
         // with the variables from this passed in ticket object
@@ -79,29 +169,30 @@ public class TicketDBManager {
             return;
         }
 
-        // generate the new ticket description
-        String newTicketDescription = getGeneratedDescription(ticketID, ticket);
-
         // SQL query to update the ticket
-        String updateSql = "UPDATE "+ tableName + " SET name = ?, contactNumber = ?, department = ?, ticketTitle = ?, " +
+        String updateSql = "UPDATE " + tableName
+                + " SET name = ?, email = ?, contactNumber = ?, department = ?, ticketTitle = ?, " +
                 "ticketDescription = ?, serviceLevelAgreement = ?, status = ?, assignedEmployee = ?, " +
-                "satisfactionLevel = ?, comments = ? WHERE ticketID = ?";
+                "satisfactionLevel = ?, comments = ?, creationDate = ?, loggedTime = ? WHERE ticketID = ?";
 
         try (Connection connection = SQLiteConnection.connect();
                 PreparedStatement updateStatement = connection.prepareStatement(updateSql)) {
 
             // set the parameters of the UPDATE statement
             updateStatement.setString(1, ticket.getName());
-            updateStatement.setString(2, ticket.getContactNumber());
-            updateStatement.setString(3, ticket.getDepartment());
-            updateStatement.setString(4, ticket.getTicketTitle());
-            updateStatement.setString(5, newTicketDescription);
-            updateStatement.setString(6, ticket.getServiceLevelAgreement());
-            updateStatement.setString(7, ticket.getStatus());
-            updateStatement.setString(8, ticket.getAssignedEmployee());
-            updateStatement.setString(9, ticket.getSatisfactionLevel());
-            updateStatement.setString(10, ticket.getComments());
-            updateStatement.setInt(11, ticketID);
+            updateStatement.setString(2, ticket.getEmail());
+            updateStatement.setString(3, ticket.getContactNumber());
+            updateStatement.setString(4, ticket.getDepartment());
+            updateStatement.setString(5, ticket.getTicketTitle());
+            updateStatement.setString(6, ticket.getTicketDescription());
+            updateStatement.setString(7, ticket.getServiceLevelAgreement());
+            updateStatement.setString(8, ticket.getStatus());
+            updateStatement.setString(9, ticket.getAssignedEmployee());
+            updateStatement.setString(10, ticket.getSatisfactionLevel());
+            updateStatement.setString(11, ticket.getComments());
+            updateStatement.setString(12, ticket.getCreationDate());
+            updateStatement.setString(13, ticket.getLoggedTime());
+            updateStatement.setInt(14, ticketID);
 
             // execute the UPDATE statement
             updateStatement.executeUpdate();
diff --git a/DISPticketing/src/main/resources/application.yaml b/DISPticketing/src/main/resources/application.yaml
index dad1a01024c682403157e835b8aeb49a406aa24f..f8683745a16b17078a33ff4640624a7e124ecb47 100644
--- a/DISPticketing/src/main/resources/application.yaml
+++ b/DISPticketing/src/main/resources/application.yaml
@@ -1,3 +1,14 @@
+spring.h2.console.enabled: true
+spring.mail:
+  host: smtp.gmail.com
+  port: 587
+  username: joewilko17@gmail.com
+  password: hqwkhcbqztnlcfhd
+  protocol: smtp
+  properties.mail.smtp:
+    auth: true
+    starttls.enable: true
+
 zeebe:
   client:
     cloud:
diff --git a/DISPticketing/target/classes/application.yaml b/DISPticketing/target/classes/application.yaml
index dad1a01024c682403157e835b8aeb49a406aa24f..f8683745a16b17078a33ff4640624a7e124ecb47 100644
--- a/DISPticketing/target/classes/application.yaml
+++ b/DISPticketing/target/classes/application.yaml
@@ -1,3 +1,14 @@
+spring.h2.console.enabled: true
+spring.mail:
+  host: smtp.gmail.com
+  port: 587
+  username: joewilko17@gmail.com
+  password: hqwkhcbqztnlcfhd
+  protocol: smtp
+  properties.mail.smtp:
+    auth: true
+    starttls.enable: true
+
 zeebe:
   client:
     cloud:
diff --git a/DISPticketing/target/classes/com/disp/Worker.class b/DISPticketing/target/classes/com/disp/Worker.class
index 6e6dfa5505de7a2f8b317bd66a6739f246ec1226..87b32ade780bd1d38714b12ae2713342270dcb8a 100644
Binary files a/DISPticketing/target/classes/com/disp/Worker.class and b/DISPticketing/target/classes/com/disp/Worker.class differ
diff --git a/DISPticketing/target/classes/com/disp/email/EmailRequest.class b/DISPticketing/target/classes/com/disp/email/EmailRequest.class
index dd5c80e9240d78e6ecfcc0943fc8b8c56c1c4241..d5b9de1929ed23e70c86f9df668195e4adba6197 100644
Binary files a/DISPticketing/target/classes/com/disp/email/EmailRequest.class and b/DISPticketing/target/classes/com/disp/email/EmailRequest.class differ
diff --git a/ticketStorage.db b/ticketStorage.db
index 38fb517547ee9a5f2a3eb3134148cea977a85644..f6f789d9a9c29989ccf4f869f479ed3ea0d5ac2e 100644
Binary files a/ticketStorage.db and b/ticketStorage.db differ