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 @@ -
+
- - + + @@ -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', {