diff --git a/components/EOISection.vue b/components/EOISection.vue
index cea40e9..66047a1 100644
--- a/components/EOISection.vue
+++ b/components/EOISection.vue
@@ -56,7 +56,7 @@
-
+
-
-
+
+
@@ -123,8 +123,8 @@
-
-
+
+
-
-
-
+
+
+
+ Delete EOI
+
+
+
+
+
+
+
+
+
+
+
+ mdi-alert
+ Confirm EOI Deletion
+
+
+
+ Are you sure you want to delete the EOI document? This will:
+
+ - Remove the uploaded EOI document
+ - Reset the Sales Process Level to "Specific Qualified Interest"
+ - Reset the EOI Status to "Awaiting Further Details"
+ - Allow a new EOI to be generated
+
+ This action cannot be undone.
+
+
+
+
+
+ Cancel
+
+
+ Delete EOI
+
+
+
+
@@ -239,6 +291,8 @@ const isGenerating = ref(false);
const showUploadDialog = ref(false);
const isUploading = ref(false);
const selectedFile = ref(null);
+const showDeleteConfirmDialog = ref(false);
+const isDeleting = ref(false);
// Reminder settings
const remindersEnabled = ref(true);
@@ -264,6 +318,10 @@ const hasEOIDocuments = computed(() => {
return eoiDocuments.value.length > 0;
});
+const isEOISigned = computed(() => {
+ return props.interest['EOI Status'] === 'Signed';
+});
+
const generateEOI = async (retryCount = 0) => {
isGenerating.value = true;
@@ -452,4 +510,31 @@ const closeUploadDialog = () => {
showUploadDialog.value = false;
selectedFile.value = null;
};
+
+const deleteEOI = async () => {
+ isDeleting.value = true;
+
+ try {
+ const response = await $fetch<{ success: boolean; message: string }>('/api/eoi/delete-document', {
+ method: 'POST',
+ headers: {
+ 'x-tag': '094ut234'
+ },
+ body: {
+ interestId: props.interest.Id.toString()
+ }
+ });
+
+ if (response.success) {
+ toast.success('EOI deleted successfully');
+ showDeleteConfirmDialog.value = false;
+ emit('update'); // Refresh parent data
+ }
+ } catch (error: any) {
+ console.error('Failed to delete EOI:', error);
+ toast.error(error.data?.statusMessage || 'Failed to delete EOI');
+ } finally {
+ isDeleting.value = false;
+ }
+};
diff --git a/server/api/eoi/delete-document.ts b/server/api/eoi/delete-document.ts
new file mode 100644
index 0000000..a778073
--- /dev/null
+++ b/server/api/eoi/delete-document.ts
@@ -0,0 +1,97 @@
+import { getMinioClient } from '~/server/utils/minio';
+
+export default defineEventHandler(async (event) => {
+ const xTagHeader = getRequestHeader(event, "x-tag");
+
+ console.log('[EOI Delete] Request received with x-tag:', xTagHeader);
+
+ if (!xTagHeader || (xTagHeader !== "094ut234" && xTagHeader !== "pjnvü1230")) {
+ console.error('[EOI Delete] Authentication failed - invalid x-tag');
+ throw createError({ statusCode: 401, statusMessage: "unauthenticated" });
+ }
+
+ try {
+ const body = await readBody(event);
+ const { interestId } = body;
+
+ console.log('[EOI Delete] Interest ID:', interestId);
+
+ if (!interestId) {
+ console.error('[EOI Delete] No interest ID provided');
+ throw createError({
+ statusCode: 400,
+ statusMessage: 'Interest ID is required',
+ });
+ }
+
+ // Get current interest data to find EOI documents
+ const interest = await $fetch(`/api/get-interest-by-id`, {
+ headers: {
+ 'x-tag': xTagHeader,
+ },
+ params: {
+ id: interestId,
+ },
+ });
+
+ const eoiDocuments = interest['EOI Document'] || [];
+ console.log('[EOI Delete] Found EOI documents:', eoiDocuments);
+
+ // Delete all EOI documents from MinIO
+ const client = getMinioClient();
+
+ for (const doc of eoiDocuments) {
+ const filename = (doc as any).filename;
+ if (filename) {
+ try {
+ console.log('[EOI Delete] Deleting file from MinIO:', filename);
+ await client.removeObject('client-portal', filename);
+ console.log('[EOI Delete] Successfully deleted:', filename);
+ } catch (error: any) {
+ console.error('[EOI Delete] Failed to delete file:', filename, error);
+ // Continue with other files even if one fails
+ }
+ }
+ }
+
+ // Reset interest fields
+ const updateData = {
+ 'EOI Status': 'Awaiting Further Details',
+ 'Sales Process Level': 'Specific Qualified Interest',
+ 'EOI Document': null,
+ 'EOI Time Sent': null,
+ 'Signature Link Client': null,
+ 'Signature Link CC': null,
+ 'Signature Link Developer': null,
+ 'Documeso ID': null,
+ 'reminder_enabled': false
+ };
+
+ console.log('[EOI Delete] Resetting interest fields');
+
+ // Update the interest
+ await $fetch('/api/update-interest', {
+ method: 'POST',
+ headers: {
+ 'x-tag': xTagHeader,
+ },
+ body: {
+ id: interestId,
+ data: updateData
+ }
+ });
+
+ console.log('[EOI Delete] Delete completed successfully');
+ return {
+ success: true,
+ message: 'EOI document deleted successfully',
+ };
+ } catch (error: any) {
+ console.error('[EOI Delete] Failed to delete EOI document:', error);
+ console.error('[EOI Delete] Error stack:', error.stack);
+ throw createError({
+ statusCode: 500,
+ statusMessage: error.message || 'Failed to delete EOI document',
+ });
+ }
+});
diff --git a/server/api/eoi/upload-document.ts b/server/api/eoi/upload-document.ts
index 43891b4..153e668 100644
--- a/server/api/eoi/upload-document.ts
+++ b/server/api/eoi/upload-document.ts
@@ -109,18 +109,13 @@ export default defineEventHandler(async (event) => {
console.log('[EOI Upload] Updating interest with EOI document info');
await updateInterestEOIDocument(interestId, documentData);
- // Also update the status fields
+ // Update the status fields for uploaded (signed) EOI
const updateData: any = {
- 'EOI Status': 'Waiting for Signatures',
- 'EOI Time Sent': new Date().toISOString()
+ 'EOI Status': 'Signed',
+ 'EOI Time Sent': new Date().toISOString(),
+ 'Sales Process Level': 'Signed LOI and NDA'
};
- console.log('[EOI Upload] Updating interest status fields');
-
- // Update Sales Process Level if it's below "LOI and NDA Sent"
- const currentLevel = await getCurrentSalesLevel(interestId);
- if (shouldUpdateSalesLevel(currentLevel)) {
- updateData['Sales Process Level'] = 'LOI and NDA Sent';
- }
+ console.log('[EOI Upload] Updating interest status fields for signed EOI');
// Update the interest
await $fetch('/api/update-interest', {