From 913a8d2c1b8dfe5bd1e7f8feb270a333106cecc3 Mon Sep 17 00:00:00 2001 From: laxmanhalaki Date: Mon, 27 Oct 2025 19:02:44 +0530 Subject: [PATCH] i have created octa oth flow with my octa account --- package-lock.json | 50 + package.json | 1 + src/App.tsx | 1777 ++++------------- src/assets/images/royal_enfield_logo.png | Bin 0 -> 133031 bytes src/components/Auth/AuthDebugInfo.tsx | 80 + src/components/common/Loader/Loader.tsx | 24 + src/components/common/Loader/index.ts | 2 + .../layout/PageLayout/PageLayout.tsx | 46 +- .../workNote/WorkNoteChat/WorkNoteChat.tsx | 30 +- src/main.tsx | 27 +- src/pages/Auth/Auth.tsx | 119 ++ src/pages/Auth/AuthCallback.tsx | 44 + src/pages/Auth/AuthenticatedApp.tsx | 114 ++ src/pages/Auth/index.ts | 4 + src/pages/ClosedRequests/ClosedRequests.tsx | 31 +- src/pages/OpenRequests/OpenRequests.tsx | 18 +- vite.config.ts | 1 + 17 files changed, 884 insertions(+), 1484 deletions(-) create mode 100644 src/assets/images/royal_enfield_logo.png create mode 100644 src/components/Auth/AuthDebugInfo.tsx create mode 100644 src/components/common/Loader/Loader.tsx create mode 100644 src/components/common/Loader/index.ts create mode 100644 src/pages/Auth/Auth.tsx create mode 100644 src/pages/Auth/AuthCallback.tsx create mode 100644 src/pages/Auth/AuthenticatedApp.tsx create mode 100644 src/pages/Auth/index.ts diff --git a/package-lock.json b/package-lock.json index 62fbb21..96290ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "royal-enfield-approval-portal", "version": "1.0.0", "dependencies": { + "@auth0/auth0-react": "^2.8.0", "@radix-ui/react-accordion": "^1.2.1", "@radix-ui/react-alert-dialog": "^1.1.2", "@radix-ui/react-aspect-ratio": "^1.1.0", @@ -96,6 +97,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@auth0/auth0-react": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@auth0/auth0-react/-/auth0-react-2.8.0.tgz", + "integrity": "sha512-f3KOkq+TW7AC3T+ZAo9G0hNL339z15C9q00QDVrMGCzZAPyp8lvDHKcAs21d/u+GzhU5zmssvJTQggDR7JqxSA==", + "license": "MIT", + "dependencies": { + "@auth0/auth0-spa-js": "^2.7.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17 || ^18 || ^19", + "react-dom": "^16.11.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/@auth0/auth0-spa-js": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@auth0/auth0-spa-js/-/auth0-spa-js-2.7.0.tgz", + "integrity": "sha512-o29ZDbUUCJcEXeBP5LPuacbP28BkNroHuq3jfKbNjFiiWjmrCe95jwPAYb6+9PGyEbs8Wva4fGkVSNZ2HZFEGA==", + "license": "MIT", + "dependencies": { + "browser-tabs-lock": "^1.2.15", + "dpop": "^2.1.1", + "es-cookie": "~1.3.2" + } + }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -3608,6 +3633,16 @@ "node": ">=8" } }, + "node_modules/browser-tabs-lock": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-tabs-lock/-/browser-tabs-lock-1.3.0.tgz", + "integrity": "sha512-g6nHaobTiT0eMZ7jh16YpD2kcjAp+PInbiVq3M1x6KKaEIVhT4v9oURNIpZLOZ3LQbQ3XYfNhMAb/9hzNLIWrw==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "lodash": ">=4.17.21" + } + }, "node_modules/browserslist": { "version": "4.26.3", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", @@ -4088,6 +4123,15 @@ "csstype": "^3.0.2" } }, + "node_modules/dpop": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dpop/-/dpop-2.1.1.tgz", + "integrity": "sha512-J0Of2JTiM4h5si0tlbPQ/lkqfZ5wAEVkKYBhkwyyANnPJfWH4VsR5uIkZ+T+OSPIwDYUg1fbd5Mmodd25HjY1w==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -4151,6 +4195,12 @@ "dev": true, "license": "MIT" }, + "node_modules/es-cookie": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/es-cookie/-/es-cookie-1.3.2.tgz", + "integrity": "sha512-UTlYYhXGLOy05P/vKVT2Ui7WtC7NiRzGtJyAKKn32g5Gvcjn7KAClLPWlipCtxIus934dFg9o9jXiBL0nP+t9Q==", + "license": "MIT" + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", diff --git a/package.json b/package.json index 708901c..2fb95d3 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "type-check": "tsc --noEmit" }, "dependencies": { + "@auth0/auth0-react": "^2.8.0", "@radix-ui/react-accordion": "^1.2.1", "@radix-ui/react-alert-dialog": "^1.1.2", "@radix-ui/react-aspect-ratio": "^1.1.0", diff --git a/src/App.tsx b/src/App.tsx index 57f716d..9cba27e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,4 +1,5 @@ -import { useState } from 'react'; +import { useState, useEffect } from 'react'; +import { BrowserRouter, Routes, Route, useNavigate } from 'react-router-dom'; import { PageLayout } from '@/components/layout/PageLayout'; import { Dashboard } from '@/pages/Dashboard'; import { OpenRequests } from '@/pages/OpenRequests'; @@ -14,8 +15,6 @@ import { toast } from 'sonner'; import { CUSTOM_REQUEST_DATABASE } from '@/utils/customRequestDatabase'; import { CLAIM_MANAGEMENT_DATABASE } from '@/utils/claimManagementDatabase'; -type Page = 'dashboard' | 'open-requests' | 'closed-requests' | 'my-requests' | 'request-detail' | 'work-notes' | 'new-request' | 'claim-management'; - // Combined Request Database for backward compatibility // This combines both custom and claim management requests export const REQUEST_DATABASE: any = { @@ -23,1183 +22,54 @@ export const REQUEST_DATABASE: any = { ...CLAIM_MANAGEMENT_DATABASE }; -// Legacy database - keeping for reference (will be removed in future) -/* -const LEGACY_REQUEST_DATABASE: any = { - // ========== TEMPLATE-BASED REQUESTS - Claim Management ========== - 'RE-REQ-2024-CM-001': { - id: 'RE-REQ-2024-CM-001', - title: 'Dealer Marketing Activity Claim - Diwali Festival Campaign', - description: 'Claim request for dealer-led Diwali festival marketing campaign including showroom decoration, test ride events, customer engagement activities, and promotional merchandise distribution. Activity conducted at Royal Motors Mumbai dealership.', - category: 'Dealer Operations', - subcategory: 'Claim Management', - status: 'pending', - priority: 'standard', - amount: 'TBD', - slaProgress: 35, - slaRemaining: '4 days 12 hours', - slaEndDate: 'Oct 16, 2024 5:00 PM', - currentStep: 1, - totalSteps: 8, - templateType: 'claim-management', - templateName: 'Claim Management', - initiator: { - name: 'Sneha Patil', - role: 'Regional Marketing Coordinator', - department: 'Marketing - West Zone', - email: 'sneha.patil@royalenfield.com', - phone: '+91 98765 43250', - avatar: 'SP' - }, - department: 'Marketing - West Zone', - createdAt: 'Oct 7, 2024 9:30 AM', - updatedAt: 'Oct 7, 2024 9:30 AM', - dueDate: '2024-10-16T17:00:00Z', - conclusionRemark: '', - claimDetails: { - activityName: 'Diwali Festival Campaign 2024', - activityType: 'Marketing Activity', - activityDate: 'Oct 5, 2024', - location: 'Mumbai, Maharashtra', - dealerCode: 'RE-MH-001', - dealerName: 'Royal Motors Mumbai', - dealerEmail: 'dealer@royalmotorsmumbai.com', - dealerPhone: '+91 98765 12345', - requestDescription: 'Marketing campaign for Diwali festival including showroom decoration, test ride events, customer engagement activities, and promotional merchandise distribution at Royal Motors Mumbai dealership.', - estimatedBudget: '₹2,45,000', - periodStart: 'Oct 1, 2024', - periodEnd: 'Oct 10, 2024' - }, - approvalFlow: [ - { - step: 1, - approver: 'Royal Motors Mumbai (Dealer)', - role: 'Dealer - Document Upload', - status: 'pending', - tatHours: 72, - elapsedHours: 12, - assignedAt: '2024-10-07T09:30:00Z', - comment: null, - timestamp: null, - description: 'Dealer uploads proposal document, cost breakup, timeline for closure, and other supporting documents' - }, - { - step: 2, - approver: 'Sneha Patil (Initiator)', - role: 'Initiator Evaluation', - status: 'waiting', - tatHours: 48, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null, - description: 'Initiator reviews dealer documents and approves or requests modifications' - }, - { - step: 3, - approver: 'System Auto-Process', - role: 'IO Confirmation', - status: 'waiting', - tatHours: 1, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null, - description: 'Automatic IO (Internal Order) confirmation generated upon initiator approval' - }, - { - step: 4, - approver: 'Rajesh Kumar', - role: 'Department Lead Approval', - status: 'waiting', - tatHours: 72, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null, - description: 'Department head approves and blocks budget in IO for this activity' - }, - { - step: 5, - approver: 'Royal Motors Mumbai (Dealer)', - role: 'Dealer - Completion Documents', - status: 'waiting', - tatHours: 120, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null, - description: 'Dealer submits activity completion documents and description' - }, - { - step: 6, - approver: 'Sneha Patil (Initiator)', - role: 'Initiator Verification', - status: 'waiting', - tatHours: 48, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null, - description: 'Initiator verifies completion documents and can modify approved amount' - }, - { - step: 7, - approver: 'System Auto-Process', - role: 'E-Invoice Generation', - status: 'waiting', - tatHours: 1, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null, - description: 'Auto-generate e-invoice based on final approved amount' - }, - { - step: 8, - approver: 'Meera Patel', - role: 'Finance - Credit Note Issuance', - status: 'waiting', - tatHours: 48, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null, - description: 'Finance team issues credit note to dealer' - } - ], - documents: [ - { name: 'Claim_Proposal_Diwali_2024.pdf', size: '1.8 MB', type: 'PDF', uploadedBy: 'Sneha Patil', uploadedAt: 'Oct 7, 2024 9:35 AM' }, - { name: 'Cost_Breakup_Detailed.xlsx', size: '450 KB', type: 'Excel', uploadedBy: 'Sneha Patil', uploadedAt: 'Oct 7, 2024 9:38 AM' }, - { name: 'Activity_Timeline.pdf', size: '320 KB', type: 'PDF', uploadedBy: 'Sneha Patil', uploadedAt: 'Oct 7, 2024 9:40 AM' } - ], - spectators: [ - { name: 'Arjun Menon', role: 'Brand Manager', avatar: 'AM' }, - { name: 'Finance Team', role: 'Budget Monitoring', avatar: 'FT' } - ], - auditTrail: [ - { type: 'created', action: 'Claim Request Created', details: 'Diwali festival campaign claim initiated using Claim Management template', user: 'Sneha Patil', timestamp: 'Oct 7, 2024 9:30 AM' }, - { type: 'assigned', action: 'Assigned to Initiator for Review', details: 'Initiator to review and confirm all claim details', user: 'System', timestamp: 'Oct 7, 2024 9:31 AM' } - ], - tags: ['claim-management', 'dealer-activity', 'marketing', 'diwali-campaign', 'template'] - }, +interface AppProps { + onLogout?: () => void; +} - // ========== OPEN/PENDING REQUESTS - High Priority & Current ========== - 'RE-REQ-2024-001': { - id: 'RE-REQ-2024-001', - title: 'Himalayan 450 Launch Campaign - Digital Media Blitz', - description: 'Comprehensive digital marketing campaign for Himalayan 450 adventure motorcycle launch. Includes social media campaigns, influencer partnerships, performance marketing, content creation, and digital advertising across platforms. Target: Reach 10M adventure enthusiasts across India.', - category: 'Marketing & Campaigns', - subcategory: 'Digital Marketing', - status: 'pending', - priority: 'express', - amount: '₹3,75,00,000', - slaProgress: 65, - slaRemaining: '8 hours 45 minutes', - slaEndDate: 'Oct 9, 2024 5:00 PM', - currentStep: 1, - totalSteps: 3, - initiator: { - name: 'Priya Sharma', - role: 'Senior Digital Marketing Manager', - department: 'Marketing', - email: 'priya.sharma@royalenfield.com', - phone: '+91 98765 43210', - avatar: 'PS' - }, - department: 'Marketing', - createdAt: 'Oct 6, 2024 10:30 AM', - updatedAt: 'Oct 7, 2024 2:15 PM', - dueDate: '2024-10-09T17:00:00Z', - conclusionRemark: '', - approvalFlow: [ - { - step: 1, - approver: 'Rajesh Kumar', - role: 'Marketing Director - India', - status: 'pending', - tatHours: 24, - elapsedHours: 22, - assignedAt: '2024-10-06T10:30:00Z', - comment: null, - timestamp: null, - reminderHistory: [ - { type: 'auto', sentAt: 'Oct 7, 2024 8:30 AM', sentBy: 'System' }, - { type: 'manual', sentAt: 'Oct 7, 2024 2:15 PM', sentBy: 'Priya Sharma' } - ] - }, - { - step: 2, - approver: 'Meera Patel', - role: 'VP Finance & Strategy', - status: 'waiting', - tatHours: 48, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null - }, - { - step: 3, - approver: 'Vinod Dasari', - role: 'Chief Executive Officer', - status: 'waiting', - tatHours: 24, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null - } - ], - documents: [ - { name: 'Digital_Campaign_Strategy_2024.pdf', size: '2.4 MB', type: 'PDF', uploadedBy: 'Priya Sharma', uploadedAt: 'Oct 6, 2024 10:45 AM' }, - { name: 'Budget_Breakdown_Q4.xlsx', size: '850 KB', type: 'Excel', uploadedBy: 'Priya Sharma', uploadedAt: 'Oct 6, 2024 11:00 AM' }, - { name: 'ROI_Projections_H450.pptx', size: '3.2 MB', type: 'PowerPoint', uploadedBy: 'Arjun Menon', uploadedAt: 'Oct 6, 2024 2:30 PM' }, - { name: 'Competitor_Analysis_Report.pdf', size: '1.8 MB', type: 'PDF', uploadedBy: 'Priya Sharma', uploadedAt: 'Oct 7, 2024 9:15 AM' } - ], - spectators: [ - { name: 'Arjun Menon', role: 'Brand Manager', avatar: 'AM' }, - { name: 'Kavya Nair', role: 'Creative Director', avatar: 'KN' } - ], - auditTrail: [ - { type: 'created', action: 'Request Created', details: 'Initial request submitted for Himalayan 450 campaign', user: 'Priya Sharma', timestamp: 'Oct 6, 2024 10:30 AM' }, - { type: 'assigned', action: 'Assigned to Rajesh Kumar', details: 'Request forwarded to Marketing Director for review', user: 'System', timestamp: 'Oct 6, 2024 10:31 AM' }, - { type: 'updated', action: 'Documents Added', details: 'Added competitor analysis report', user: 'Priya Sharma', timestamp: 'Oct 7, 2024 9:15 AM' }, - { type: 'reminder', action: 'Reminder Sent', details: 'Automated reminder sent to current approver', user: 'System', timestamp: 'Oct 7, 2024 2:15 PM' } - ], - tags: ['urgent', 'product-launch', 'budget-approval', 'himalayan-450'] - }, - - 'RE-REQ-2024-002': { - id: 'RE-REQ-2024-002', - title: 'Premium Dealership Expansion - Mumbai Central', - description: 'Establishment of flagship Royal Enfield premium dealership in Mumbai Central business district. Prime 8000 sq ft location with experience center, café, merchandise store, and premium service bay. Expected to serve 500+ customers monthly.', - category: 'Dealer & Sales', - subcategory: 'Premium Store Expansion', - status: 'in-review', - priority: 'urgent', - amount: '₹2,45,00,000', - slaProgress: 78, - slaRemaining: '1 day 6 hours', - slaEndDate: 'Oct 11, 2024 5:00 PM', - currentStep: 2, - totalSteps: 3, - initiator: { - name: 'Amit Rathi', - role: 'Regional Sales Manager - West', - department: 'Sales & Distribution', - email: 'amit.rathi@royalenfield.com', - phone: '+91 98765 43220', - avatar: 'AR' - }, - department: 'Sales & Distribution', - createdAt: 'Oct 4, 2024 2:20 PM', - updatedAt: 'Oct 7, 2024 4:30 PM', - dueDate: '2024-10-11T17:00:00Z', - conclusionRemark: '', - approvalFlow: [ - { - step: 1, - approver: 'Sunita Nair', - role: 'Area Sales Manager - Maharashtra', - status: 'approved', - tatHours: 48, - actualHours: 31, - assignedAt: '2024-10-04T14:20:00Z', - comment: 'Location assessment completed. Excellent footfall potential in premium catchment area. ROI projections look strong.', - timestamp: '2024-10-05T21:20:00Z' - }, - { - step: 2, - approver: 'Vikram Singh', - role: 'National Sales Director', - status: 'pending', - tatHours: 72, - elapsedHours: 58, - assignedAt: '2024-10-05T21:20:00Z', - comment: null, - timestamp: null, - reminderHistory: [ - { type: 'auto', sentAt: 'Oct 6, 2024 9:20 PM', sentBy: 'System' }, - { type: 'manual', sentAt: 'Oct 7, 2024 11:30 AM', sentBy: 'Amit Rathi' } - ] - }, - { - step: 3, - approver: 'B. Govindarajan', - role: 'COO - Sales & Marketing', - status: 'waiting', - tatHours: 48, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null - } - ], - documents: [ - { name: 'Location_Survey_Mumbai.pdf', size: '4.2 MB', type: 'PDF', uploadedBy: 'Amit Rathi', uploadedAt: 'Oct 4, 2024 2:30 PM' }, - { name: 'Market_Analysis_West_Region.xlsx', size: '1.5 MB', type: 'Excel', uploadedBy: 'Market Research Team', uploadedAt: 'Oct 4, 2024 3:45 PM' }, - { name: 'Dealer_Investment_Profile.pdf', size: '900 KB', type: 'PDF', uploadedBy: 'Sunita Nair', uploadedAt: 'Oct 5, 2024 10:15 AM' }, - { name: 'Premium_Store_Layout_Plan.pdf', size: '2.8 MB', type: 'PDF', uploadedBy: 'Design Team', uploadedAt: 'Oct 5, 2024 4:20 PM' } - ], - spectators: [ - { name: 'Ravi Shankar', role: 'Regional Manager - West', avatar: 'RS' }, - { name: 'Deepika Shah', role: 'Brand Experience Manager', avatar: 'DS' } - ], - auditTrail: [ - { type: 'created', action: 'Request Created', details: 'New premium dealership proposal submitted', user: 'Amit Rathi', timestamp: 'Oct 4, 2024 2:20 PM' }, - { type: 'assigned', action: 'Assigned to Sunita Nair', details: 'Forwarded to Area Sales Manager for location assessment', user: 'System', timestamp: 'Oct 4, 2024 2:21 PM' }, - { type: 'approved', action: 'Approved by Sunita Nair', details: 'Location assessment approved with positive recommendation', user: 'Sunita Nair', timestamp: 'Oct 5, 2024 9:20 PM' }, - { type: 'assigned', action: 'Assigned to Vikram Singh', details: 'Forwarded to National Sales Director for strategic review', user: 'System', timestamp: 'Oct 5, 2024 9:21 PM' } - ], - tags: ['dealer-expansion', 'mumbai', 'premium-store', 'flagship'] - }, - - 'RE-REQ-2024-003': { - id: 'RE-REQ-2024-003', - title: 'Critical Production Line Maintenance - Chennai Plant', - description: 'Emergency maintenance approval for Assembly Line 3 hydraulic system failure. Production of Classic 350 and Meteor 350 models affected. Estimated 48-hour downtime without immediate intervention. Critical for meeting Q4 production targets.', - category: 'Operations & Manufacturing', - subcategory: 'Emergency Maintenance', - status: 'pending', - priority: 'express', - amount: '₹28,50,000', - slaProgress: 95, - slaRemaining: '2 hours overdue', - slaEndDate: 'Oct 6, 2024 8:00 AM', - currentStep: 1, - totalSteps: 1, - initiator: { - name: 'Senthil Kumar', - role: 'Plant Manager - Chennai', - department: 'Manufacturing', - email: 'senthil.kumar@royalenfield.com', - phone: '+91 98765 43230', - avatar: 'SK' - }, - department: 'Manufacturing', - createdAt: 'Oct 5, 2024 4:45 PM', - updatedAt: 'Oct 7, 2024 11:30 AM', - dueDate: '2024-10-06T08:00:00Z', - conclusionRemark: '', - approvalFlow: [ - { - step: 1, - approver: 'Manoj Gupta', - role: 'VP Manufacturing & Quality', - status: 'pending', - tatHours: 16, - elapsedHours: 42, - assignedAt: '2024-10-05T16:45:00Z', - comment: null, - timestamp: null, - reminderHistory: [ - { type: 'auto', sentAt: 'Oct 6, 2024 8:45 AM', sentBy: 'System' }, - { type: 'auto', sentAt: 'Oct 6, 2024 12:00 PM', sentBy: 'System' }, - { type: 'manual', sentAt: 'Oct 6, 2024 4:30 PM', sentBy: 'Senthil Kumar' }, - { type: 'auto', sentAt: 'Oct 7, 2024 8:45 AM', sentBy: 'System' }, - { type: 'manual', sentAt: 'Oct 7, 2024 11:30 AM', sentBy: 'Plant Operations Team' } - ] - } - ], - documents: [ - { name: 'Equipment_Failure_Report_Line3.pdf', size: '3.5 MB', type: 'PDF', uploadedBy: 'Senthil Kumar', uploadedAt: 'Oct 5, 2024 5:00 PM' }, - { name: 'Maintenance_Vendor_Quote.pdf', size: '1.2 MB', type: 'PDF', uploadedBy: 'Procurement Team', uploadedAt: 'Oct 5, 2024 6:30 PM' }, - { name: 'Production_Impact_Analysis.xlsx', size: '950 KB', type: 'Excel', uploadedBy: 'Planning Team', uploadedAt: 'Oct 6, 2024 8:15 AM' }, - { name: 'Alternative_Solutions_Report.pdf', size: '1.8 MB', type: 'PDF', uploadedBy: 'Engineering Team', uploadedAt: 'Oct 6, 2024 2:45 PM' } - ], - spectators: [ - { name: 'Rajesh Nair', role: 'Head of Production Planning', avatar: 'RN' }, - { name: 'Kavitha Krishnan', role: 'Quality Assurance Manager', avatar: 'KK' } - ], - auditTrail: [ - { type: 'created', action: 'Emergency Request Created', details: 'Critical maintenance request for production line failure', user: 'Senthil Kumar', timestamp: 'Oct 5, 2024 4:45 PM' }, - { type: 'escalated', action: 'Auto-Escalated', details: 'Request auto-escalated due to emergency priority', user: 'System', timestamp: 'Oct 5, 2024 4:46 PM' }, - { type: 'reminder', action: 'Multiple Reminders Sent', details: 'Urgent reminders sent due to TAT breach', user: 'System', timestamp: 'Oct 6, 2024 12:00 PM' }, - { type: 'updated', action: 'Alternative Solutions Added', details: 'Engineering team provided alternative maintenance approaches', user: 'Engineering Team', timestamp: 'Oct 6, 2024 2:45 PM' } - ], - tags: ['emergency', 'production-critical', 'chennai-plant', 'overdue'] - }, - - 'RE-REQ-2024-004': { - id: 'RE-REQ-2024-004', - title: 'Vendor Partnership - Premium Engine Components', - description: 'Strategic partnership with Mahindra Forging Limited for premium engine components supply. Multi-year contract for pistons, connecting rods, and crankshafts. Negotiated 12% cost reduction with quality improvements and faster delivery cycles.', - category: 'Procurement & Vendors', - subcategory: 'Strategic Partnership', - status: 'pending', - priority: 'standard', - amount: '₹85,50,00,000', - slaProgress: 25, - slaRemaining: '5 days 14 hours', - slaEndDate: 'Oct 18, 2024 5:00 PM', - currentStep: 1, - totalSteps: 4, - initiator: { - name: 'Arjun Reddy', - role: 'Senior Procurement Manager', - department: 'Supply Chain', - email: 'arjun.reddy@royalenfield.com', - phone: '+91 98765 43240', - avatar: 'AR' - }, - department: 'Supply Chain', - createdAt: 'Oct 5, 2024 9:15 AM', - updatedAt: 'Oct 7, 2024 3:45 PM', - dueDate: '2024-10-18T17:00:00Z', - conclusionRemark: '', - approvalFlow: [ - { - step: 1, - approver: 'Kavitha Krishnan', - role: 'Supply Chain Director', - status: 'pending', - tatHours: 72, - elapsedHours: 54, - assignedAt: '2024-10-05T09:15:00Z', - comment: null, - timestamp: null - }, - { - step: 2, - approver: 'Rohit Gupta', - role: 'Chief Operations Officer', - status: 'waiting', - tatHours: 96, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null - }, - { - step: 3, - approver: 'Siddhartha Lal', - role: 'Executive Chairman', - status: 'waiting', - tatHours: 72, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null - }, - { - step: 4, - approver: 'Board Committee', - role: 'Investment Committee', - status: 'waiting', - tatHours: 168, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null - } - ], - documents: [ - { name: 'Strategic_Partnership_Proposal.pdf', size: '5.2 MB', type: 'PDF', uploadedBy: 'Arjun Reddy', uploadedAt: 'Oct 5, 2024 9:30 AM' }, - { name: 'Cost_Benefit_Analysis_5Year.xlsx', size: '2.1 MB', type: 'Excel', uploadedBy: 'Finance Team', uploadedAt: 'Oct 5, 2024 11:45 AM' }, - { name: 'Vendor_Technical_Capability_Assessment.pdf', size: '3.8 MB', type: 'PDF', uploadedBy: 'Technical Team', uploadedAt: 'Oct 5, 2024 2:30 PM' }, - { name: 'Quality_Certification_Documents.pdf', size: '4.5 MB', type: 'PDF', uploadedBy: 'Quality Team', uploadedAt: 'Oct 6, 2024 10:15 AM' } - ], - spectators: [ - { name: 'Ravi Kumar', role: 'Head of Quality', avatar: 'RK' }, - { name: 'Priya Menon', role: 'Legal Counsel', avatar: 'PM' } - ], - auditTrail: [ - { type: 'created', action: 'Request Created', details: 'Strategic vendor partnership proposal submitted', user: 'Arjun Reddy', timestamp: 'Oct 5, 2024 9:15 AM' }, - { type: 'assigned', action: 'Assigned to Kavitha Krishnan', details: 'Forwarded to Supply Chain Director for evaluation', user: 'System', timestamp: 'Oct 5, 2024 9:16 AM' }, - { type: 'updated', action: 'Quality Certifications Added', details: 'Vendor quality certifications and compliance documents added', user: 'Quality Team', timestamp: 'Oct 6, 2024 10:15 AM' } - ], - tags: ['vendor-management', 'strategic-partnership', 'cost-optimization', 'engine-components'] - }, - - // ========== CLOSED/COMPLETED REQUESTS - Approved ========== - 'RE-REQ-2024-005': { - id: 'RE-REQ-2024-005', - title: 'Classic 350 Heritage Edition - Limited Production', - description: 'Limited edition Classic 350 with heritage-inspired design elements, premium finishes, and exclusive colorways. Production run of 7,500 units for festive season. Premium pricing strategy with enhanced margin targets.', - category: 'Product Development', - subcategory: 'Special Editions', - status: 'approved', - priority: 'urgent', - amount: '₹18,75,00,000', - slaProgress: 100, - slaRemaining: 'Completed', - slaEndDate: 'Oct 5, 2024 5:00 PM', - currentStep: 3, - totalSteps: 3, - initiator: { - name: 'Ananya Das', - role: 'Senior Product Manager', - department: 'Product Development', - email: 'ananya.das@royalenfield.com', - phone: '+91 98765 43250', - avatar: 'AD' - }, - department: 'Product Development', - createdAt: 'Sep 28, 2024 11:00 AM', - completedAt: 'Oct 2, 2024 3:30 PM', - updatedAt: 'Oct 2, 2024 3:30 PM', - dueDate: '2024-10-05T17:00:00Z', - conclusionRemark: 'Approved for immediate production planning. Heritage Edition expected to command 15-20% premium over standard Classic 350. Production to commence November 2024 for December market launch.', - approvalFlow: [ - { - step: 1, - approver: 'Karthik Raman', - role: 'Head of Product Development', - status: 'approved', - tatHours: 48, - actualHours: 22, - assignedAt: '2024-09-28T11:00:00Z', - comment: 'Excellent concept aligning with heritage brand positioning. Design elements are distinctive and marketable. Approved for market validation.', - timestamp: '2024-09-29T09:00:00Z' - }, - { - step: 2, - approver: 'Deepika Sharma', - role: 'VP Sales & Marketing', - status: 'approved', - tatHours: 72, - actualHours: 45, - assignedAt: '2024-09-29T09:00:00Z', - comment: 'Market research indicates strong demand in premium segment. Festive timing is optimal. Recommend premium pricing with exclusive dealer network.', - timestamp: '2024-10-01T06:00:00Z' - }, - { - step: 3, - approver: 'Siddhartha Lal', - role: 'Executive Chairman', - status: 'approved', - tatHours: 48, - actualHours: 57, - assignedAt: '2024-10-01T06:00:00Z', - comment: 'Outstanding initiative showcasing our heritage DNA. This will strengthen brand premium positioning. Proceed with production planning immediately.', - timestamp: '2024-10-02T15:30:00Z' - } - ], - documents: [ - { name: 'Heritage_Edition_Concept_Design.pdf', size: '8.5 MB', type: 'PDF', uploadedBy: 'Design Team', uploadedAt: 'Sep 28, 2024 11:15 AM' }, - { name: 'Market_Research_Premium_Segment.pptx', size: '4.2 MB', type: 'PowerPoint', uploadedBy: 'Market Research', uploadedAt: 'Sep 29, 2024 2:30 PM' }, - { name: 'Production_Feasibility_Timeline.xlsx', size: '1.8 MB', type: 'Excel', uploadedBy: 'Manufacturing', uploadedAt: 'Sep 30, 2024 10:45 AM' }, - { name: 'Premium_Pricing_Strategy.pdf', size: '2.1 MB', type: 'PDF', uploadedBy: 'Pricing Team', uploadedAt: 'Oct 1, 2024 9:15 AM' } - ], - spectators: [ - { name: 'Vikram Pawah', role: 'President - Global Markets', avatar: 'VP' }, - { name: 'Mario Ricci', role: 'Head of Design', avatar: 'MR' } - ], - auditTrail: [ - { type: 'created', action: 'Request Created', details: 'Heritage Edition product proposal submitted', user: 'Ananya Das', timestamp: 'Sep 28, 2024 11:00 AM' }, - { type: 'approved', action: 'Approved by Karthik Raman', details: 'Product development approval with design validation', user: 'Karthik Raman', timestamp: 'Sep 29, 2024 9:00 AM' }, - { type: 'approved', action: 'Approved by Deepika Sharma', details: 'Marketing approval with premium positioning strategy', user: 'Deepika Sharma', timestamp: 'Oct 1, 2024 6:00 AM' }, - { type: 'approved', action: 'Final Approval by Siddhartha Lal', details: 'Executive approval for production planning', user: 'Siddhartha Lal', timestamp: 'Oct 2, 2024 3:30 PM' }, - { type: 'completed', action: 'Request Completed', details: 'Heritage Edition approved for production', user: 'System', timestamp: 'Oct 2, 2024 3:30 PM' } - ], - tags: ['special-edition', 'heritage', 'approved', 'premium-positioning'] - }, - - 'RE-REQ-2024-006': { - id: 'RE-REQ-2024-006', - title: 'Advanced Manufacturing Training Initiative', - description: 'Comprehensive skill development program for 350+ manufacturing employees across all plants. Focus on Industry 4.0 practices, lean manufacturing, quality systems, and safety protocols. Partnership with leading technical institutes.', - category: 'Human Resources', - subcategory: 'Training & Development', - status: 'approved', - priority: 'standard', - amount: '₹1,25,00,000', - slaProgress: 100, - slaRemaining: 'Completed', - slaEndDate: 'Oct 8, 2024 5:00 PM', - currentStep: 2, - totalSteps: 2, - initiator: { - name: 'Rekha Joshi', - role: 'Head of Learning & Development', - department: 'Human Resources', - email: 'rekha.joshi@royalenfield.com', - phone: '+91 98765 43260', - avatar: 'RJ' - }, - department: 'Human Resources', - createdAt: 'Sep 25, 2024 1:30 PM', - completedAt: 'Oct 1, 2024 11:15 AM', - updatedAt: 'Oct 1, 2024 11:15 AM', - dueDate: '2024-10-08T17:00:00Z', - conclusionRemark: 'Training program approved with enhanced focus on digital manufacturing skills. Expected to improve productivity by 15% and reduce quality issues by 25%. Implementation to begin November 2024.', - approvalFlow: [ - { - step: 1, - approver: 'Rajesh Nair', - role: 'Chief Human Resources Officer', - status: 'approved', - tatHours: 72, - actualHours: 48, - assignedAt: '2024-09-25T13:30:00Z', - comment: 'Essential investment in workforce capability. Training modules align with manufacturing excellence goals. Budget allocation is justified.', - timestamp: '2024-09-27T13:30:00Z' - }, - { - step: 2, - approver: 'Lalit Malik', - role: 'Chief Operating Officer', - status: 'approved', - tatHours: 96, - actualHours: 94, - assignedAt: '2024-09-27T13:30:00Z', - comment: 'Strategic investment in human capital. This will enhance our manufacturing competitiveness. Approved for immediate implementation.', - timestamp: '2024-10-01T11:15:00Z' - } - ], - documents: [ - { name: 'Training_Curriculum_Detailed.pdf', size: '6.2 MB', type: 'PDF', uploadedBy: 'L&D Team', uploadedAt: 'Sep 25, 2024 1:45 PM' }, - { name: 'Institute_Partnership_Agreements.pdf', size: '3.8 MB', type: 'PDF', uploadedBy: 'Legal Team', uploadedAt: 'Sep 26, 2024 10:30 AM' }, - { name: 'Training_Budget_ROI_Analysis.xlsx', size: '1.5 MB', type: 'Excel', uploadedBy: 'Finance Team', uploadedAt: 'Sep 26, 2024 3:45 PM' }, - { name: 'Implementation_Timeline_2024.pdf', size: '2.1 MB', type: 'PDF', uploadedBy: 'Rekha Joshi', uploadedAt: 'Sep 27, 2024 9:20 AM' } - ], - spectators: [ - { name: 'Manufacturing Heads', role: 'Plant Managers', avatar: 'MH' }, - { name: 'Skills Council', role: 'Industry Partners', avatar: 'SC' } - ], - auditTrail: [ - { type: 'created', action: 'Request Created', details: 'Advanced manufacturing training program proposal', user: 'Rekha Joshi', timestamp: 'Sep 25, 2024 1:30 PM' }, - { type: 'approved', action: 'Approved by Rajesh Nair', details: 'HR approval with budget validation', user: 'Rajesh Nair', timestamp: 'Sep 27, 2024 1:30 PM' }, - { type: 'approved', action: 'Final Approval by Lalit Malik', details: 'COO approval for implementation', user: 'Lalit Malik', timestamp: 'Oct 1, 2024 11:15 AM' }, - { type: 'completed', action: 'Request Completed', details: 'Training program approved for rollout', user: 'System', timestamp: 'Oct 1, 2024 11:15 AM' } - ], - tags: ['hr', 'training', 'manufacturing', 'approved', 'skill-development'] - }, - - 'RE-REQ-2024-007': { - id: 'RE-REQ-2024-007', - title: 'International Market Expansion - Southeast Asia', - description: 'Strategic expansion into Thailand, Vietnam, and Indonesia markets. Includes market entry strategy, local partnerships, distribution network setup, and regulatory compliance. Target: 5,000 units in Year 1.', - category: 'Business Development', - subcategory: 'Market Expansion', - status: 'approved', - priority: 'urgent', - amount: '₹45,80,00,000', - slaProgress: 100, - slaRemaining: 'Completed', - slaEndDate: 'Sep 30, 2024 5:00 PM', - currentStep: 4, - totalSteps: 4, - initiator: { - name: 'Vikram Pawah', - role: 'President - International Business', - department: 'Global Markets', - email: 'vikram.pawah@royalenfield.com', - phone: '+91 98765 43270', - avatar: 'VP' - }, - department: 'Global Markets', - createdAt: 'Sep 10, 2024 10:00 AM', - completedAt: 'Sep 28, 2024 4:45 PM', - updatedAt: 'Sep 28, 2024 4:45 PM', - dueDate: '2024-09-30T17:00:00Z', - conclusionRemark: 'Southeast Asia expansion approved with phased approach. Thailand launch in Q1 2025 followed by Vietnam and Indonesia. Local assembly considerations approved for long-term cost optimization.', - approvalFlow: [ - { - step: 1, - approver: 'Deepika Sharma', - role: 'VP Sales & Marketing', - status: 'approved', - tatHours: 72, - actualHours: 58, - assignedAt: '2024-09-10T10:00:00Z', - comment: 'Market research shows strong potential for Royal Enfield in adventure segment. Brand positioning strategy is well-defined.', - timestamp: '2024-09-12T20:00:00Z' - }, - { - step: 2, - approver: 'Lalit Malik', - role: 'COO - Global Operations', - status: 'approved', - tatHours: 96, - actualHours: 78, - assignedAt: '2024-09-12T20:00:00Z', - comment: 'Supply chain and manufacturing feasibility confirmed. Local partnership strategy is sound.', - timestamp: '2024-09-16T02:00:00Z' - }, - { - step: 3, - approver: 'Vinod Dasari', - role: 'Chief Executive Officer', - status: 'approved', - tatHours: 72, - actualHours: 65, - assignedAt: '2024-09-16T02:00:00Z', - comment: 'Strategic expansion aligns with global growth objectives. Phased approach mitigates risks effectively.', - timestamp: '2024-09-18T19:00:00Z' - }, - { - step: 4, - approver: 'Board of Directors', - role: 'Investment Committee', - status: 'approved', - tatHours: 168, - actualHours: 145, - assignedAt: '2024-09-18T19:00:00Z', - comment: 'Board approves international expansion with quarterly review milestones. Investment committee endorses the initiative.', - timestamp: '2024-09-28T16:45:00Z' - } - ], - documents: [ - { name: 'SEA_Market_Entry_Strategy.pdf', size: '12.5 MB', type: 'PDF', uploadedBy: 'Strategy Team', uploadedAt: 'Sep 10, 2024 10:30 AM' }, - { name: 'Regulatory_Compliance_Analysis.pdf', size: '8.2 MB', type: 'PDF', uploadedBy: 'Legal Team', uploadedAt: 'Sep 11, 2024 2:15 PM' }, - { name: 'Financial_Projections_5Year.xlsx', size: '3.5 MB', type: 'Excel', uploadedBy: 'Finance Team', uploadedAt: 'Sep 12, 2024 11:30 AM' }, - { name: 'Local_Partnership_Agreements.pdf', size: '15.8 MB', type: 'PDF', uploadedBy: 'BD Team', uploadedAt: 'Sep 15, 2024 4:20 PM' } - ], - spectators: [ - { name: 'Regional Teams', role: 'SEA Operations', avatar: 'RT' }, - { name: 'Export Team', role: 'International Sales', avatar: 'ET' } - ], - auditTrail: [ - { type: 'created', action: 'Request Created', details: 'Southeast Asia expansion proposal submitted', user: 'Vikram Pawah', timestamp: 'Sep 10, 2024 10:00 AM' }, - { type: 'approved', action: 'Marketing Approval', details: 'Sales & Marketing validation completed', user: 'Deepika Sharma', timestamp: 'Sep 12, 2024 8:00 PM' }, - { type: 'approved', action: 'Operations Approval', details: 'COO approval with supply chain validation', user: 'Lalit Malik', timestamp: 'Sep 16, 2024 2:00 AM' }, - { type: 'approved', action: 'CEO Approval', details: 'Strategic approval for expansion initiative', user: 'Vinod Dasari', timestamp: 'Sep 18, 2024 7:00 PM' }, - { type: 'approved', action: 'Board Approval', details: 'Investment committee final approval', user: 'Board of Directors', timestamp: 'Sep 28, 2024 4:45 PM' } - ], - tags: ['international-expansion', 'southeast-asia', 'approved', 'strategic-initiative'] - }, - - // ========== REJECTED REQUESTS ========== - 'RE-REQ-2024-008': { - id: 'RE-REQ-2024-008', - title: 'Premium Accessories Line - Luxury Leather Collection', - description: 'Launch of premium leather accessories including custom jackets, riding gloves, boots, and travel bags. Targeting affluent customer segment with hand-crafted Italian leather products. Exclusive Royal Enfield branding and limited edition numbering.', - category: 'Product Development', - subcategory: 'Accessories', - status: 'rejected', - priority: 'standard', - amount: '₹2,15,00,000', - slaProgress: 100, - slaRemaining: 'Completed', - slaEndDate: 'Oct 4, 2024 5:00 PM', - currentStep: 2, - totalSteps: 3, - initiator: { - name: 'Neha Agarwal', - role: 'Accessories Product Manager', - department: 'Product Development', - email: 'neha.agarwal@royalenfield.com', - phone: '+91 98765 43280', - avatar: 'NA' - }, - department: 'Product Development', - createdAt: 'Sep 20, 2024 10:00 AM', - completedAt: 'Sep 26, 2024 2:20 PM', - updatedAt: 'Sep 26, 2024 2:20 PM', - dueDate: '2024-10-04T17:00:00Z', - conclusionRemark: 'Request rejected pending comprehensive market research. Current data insufficient to justify premium positioning. Recommend focus on core motorcycle accessories before luxury segment entry.', - approvalFlow: [ - { - step: 1, - approver: 'Vikash Sharma', - role: 'Head of Accessories', - status: 'approved', - tatHours: 48, - actualHours: 35, - assignedAt: '2024-09-20T10:00:00Z', - comment: 'Concept has merit but requires thorough market validation. Design direction is appealing. Moving forward for strategic review.', - timestamp: '2024-09-21T21:00:00Z' - }, - { - step: 2, - approver: 'Suresh Krishnan', - role: 'VP Product Strategy', - status: 'rejected', - tatHours: 120, - actualHours: 113, - assignedAt: '2024-09-21T21:00:00Z', - comment: 'Market research indicates limited demand in luxury accessories segment. Customer priority is performance-oriented accessories. Recommend resubmission with comprehensive market analysis and customer validation.', - timestamp: '2024-09-26T14:20:00Z' - }, - { - step: 3, - approver: 'Karthik Raman', - role: 'Head of Product Development', - status: 'waiting', - tatHours: 72, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null - } - ], - documents: [ - { name: 'Luxury_Accessories_Concept.pdf', size: '9.2 MB', type: 'PDF', uploadedBy: 'Design Team', uploadedAt: 'Sep 20, 2024 10:15 AM' }, - { name: 'Italian_Leather_Supplier_Proposal.pdf', size: '4.5 MB', type: 'PDF', uploadedBy: 'Sourcing Team', uploadedAt: 'Sep 20, 2024 2:30 PM' }, - { name: 'Premium_Segment_Analysis.xlsx', size: '2.1 MB', type: 'Excel', uploadedBy: 'Market Research', uploadedAt: 'Sep 21, 2024 11:45 AM' }, - { name: 'Competitive_Luxury_Brands_Study.pdf', size: '6.8 MB', type: 'PDF', uploadedBy: 'Strategy Team', uploadedAt: 'Sep 22, 2024 3:15 PM' } - ], - spectators: [ - { name: 'Retail Team', role: 'Merchandising', avatar: 'RT' }, - { name: 'Brand Team', role: 'Brand Strategy', avatar: 'BT' } - ], - auditTrail: [ - { type: 'created', action: 'Request Created', details: 'Premium leather accessories proposal submitted', user: 'Neha Agarwal', timestamp: 'Sep 20, 2024 10:00 AM' }, - { type: 'approved', action: 'Approved by Vikash Sharma', details: 'Head of Accessories conditional approval', user: 'Vikash Sharma', timestamp: 'Sep 21, 2024 9:00 PM' }, - { type: 'rejected', action: 'Rejected by Suresh Krishnan', details: 'VP Strategy rejection due to insufficient market validation', user: 'Suresh Krishnan', timestamp: 'Sep 26, 2024 2:20 PM' }, - { type: 'completed', action: 'Request Rejected', details: 'Final status: Rejected pending market research', user: 'System', timestamp: 'Sep 26, 2024 2:20 PM' } - ], - tags: ['accessories', 'luxury', 'rejected', 'market-research-needed'] - }, - - // ========== MY REQUESTS (Current User's Requests) ========== - 'RE-REQ-2024-009': { - id: 'RE-REQ-2024-009', - title: 'Service Center Network Expansion - Western Region', - description: 'Expansion of service network in Western India with 12 new service centers across Maharashtra, Gujarat, and Rajasthan. Focus on Tier-2 cities with growing Royal Enfield customer base. Enhanced service capabilities including performance tuning.', - category: 'Service & Support', - subcategory: 'Infrastructure Expansion', - status: 'pending', - priority: 'urgent', - amount: '₹3,25,00,000', - slaProgress: 85, - slaRemaining: '12 hours overdue', - slaEndDate: 'Oct 10, 2024 5:00 PM', - currentStep: 1, - totalSteps: 3, - initiator: { - name: 'Current User', - role: 'Regional Service Manager - West', - department: 'After Sales Service', - email: 'current.user@royalenfield.com', - phone: '+91 98765 43290', - avatar: 'CU' - }, - department: 'After Sales Service', - createdAt: 'Oct 3, 2024 8:45 AM', - updatedAt: 'Oct 7, 2024 10:30 AM', - dueDate: '2024-10-10T17:00:00Z', - conclusionRemark: '', - approvalFlow: [ - { - step: 1, - approver: 'Ramesh Kulkarni', - role: 'Head of After Sales Service', - status: 'pending', - tatHours: 72, - elapsedHours: 84, - assignedAt: '2024-10-03T08:45:00Z', - comment: null, - timestamp: null, - reminderHistory: [ - { type: 'auto', sentAt: 'Oct 5, 2024 8:45 AM', sentBy: 'System' }, - { type: 'manual', sentAt: 'Oct 6, 2024 10:30 AM', sentBy: 'Current User' }, - { type: 'auto', sentAt: 'Oct 6, 2024 5:45 PM', sentBy: 'System' }, - { type: 'manual', sentAt: 'Oct 7, 2024 9:15 AM', sentBy: 'Current User' } - ] - }, - { - step: 2, - approver: 'Arun Pandey', - role: 'VP Customer Experience', - status: 'waiting', - tatHours: 96, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null - }, - { - step: 3, - approver: 'Lalit Malik', - role: 'Chief Operating Officer', - status: 'waiting', - tatHours: 48, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null - } - ], - documents: [ - { name: 'Western_Region_Expansion_Plan.pdf', size: '7.5 MB', type: 'PDF', uploadedBy: 'Current User', uploadedAt: 'Oct 3, 2024 9:00 AM' }, - { name: 'Service_Center_Requirements.xlsx', size: '2.8 MB', type: 'Excel', uploadedBy: 'Planning Team', uploadedAt: 'Oct 3, 2024 11:30 AM' }, - { name: 'Customer_Demand_Analysis.pptx', size: '4.2 MB', type: 'PowerPoint', uploadedBy: 'Analytics Team', uploadedAt: 'Oct 4, 2024 2:15 PM' }, - { name: 'ROI_Projections_Service_Network.xlsx', size: '1.9 MB', type: 'Excel', uploadedBy: 'Finance Team', uploadedAt: 'Oct 5, 2024 10:45 AM' } - ], - spectators: [ - { name: 'Regional Managers', role: 'Service Operations', avatar: 'RM' }, - { name: 'Training Team', role: 'Technician Development', avatar: 'TT' } - ], - auditTrail: [ - { type: 'created', action: 'Request Created', details: 'Service center expansion proposal submitted', user: 'Current User', timestamp: 'Oct 3, 2024 8:45 AM' }, - { type: 'assigned', action: 'Assigned to Ramesh Kulkarni', details: 'Forwarded to Head of After Sales Service', user: 'System', timestamp: 'Oct 3, 2024 8:46 AM' }, - { type: 'reminder', action: 'Reminder Sent', details: 'TAT breach reminder sent to approver', user: 'System', timestamp: 'Oct 6, 2024 5:45 PM' }, - { type: 'updated', action: 'Additional Documents', details: 'ROI projections added by finance team', user: 'Finance Team', timestamp: 'Oct 5, 2024 10:45 AM' } - ], - tags: ['service-expansion', 'western-region', 'tier2-cities', 'overdue'] - }, - - 'RE-REQ-2024-010': { - id: 'RE-REQ-2024-010', - title: 'Rider Fest 2024 - Premium Event Sponsorship', - description: 'Title sponsorship for Royal Enfield Rider Fest 2024 - Multi-city motorcycle rally and festival. Expected participation of 25,000+ riders across Mumbai, Delhi, Bangalore, and Chennai. Enhanced brand engagement and community building.', - category: 'Marketing & Campaigns', - subcategory: 'Event Sponsorship', - status: 'approved', - priority: 'urgent', - amount: '₹4,50,00,000', - slaProgress: 100, - slaRemaining: 'Completed', - slaEndDate: 'Sep 29, 2024 5:00 PM', - currentStep: 2, - totalSteps: 2, - initiator: { - name: 'Current User', - role: 'Regional Service Manager - West', - department: 'Marketing', - email: 'current.user@royalenfield.com', - phone: '+91 98765 43290', - avatar: 'CU' - }, - department: 'Marketing', - createdAt: 'Sep 15, 2024 4:20 PM', - completedAt: 'Sep 22, 2024 10:45 AM', - updatedAt: 'Sep 22, 2024 10:45 AM', - dueDate: '2024-09-29T17:00:00Z', - conclusionRemark: 'Event sponsorship approved with enhanced activation budget. Expected to reach 5M+ digital impressions and strengthen rider community engagement. Excellent brand building opportunity.', - approvalFlow: [ - { - step: 1, - approver: 'Nikhil Sharma', - role: 'Events Marketing Manager', - status: 'approved', - tatHours: 48, - actualHours: 28, - assignedAt: '2024-09-15T16:20:00Z', - comment: 'Outstanding brand exposure opportunity with strong community engagement potential. Event format aligns perfectly with brand values.', - timestamp: '2024-09-16T20:20:00Z' - }, - { - step: 2, - approver: 'Deepika Sharma', - role: 'VP Sales & Marketing', - status: 'approved', - tatHours: 120, - actualHours: 86, - assignedAt: '2024-09-16T20:20:00Z', - comment: 'Perfect alignment with brand positioning and community strategy. Multi-city approach maximizes reach. Approved for immediate execution.', - timestamp: '2024-09-22T10:45:00Z' - } - ], - documents: [ - { name: 'Rider_Fest_2024_Proposal.pdf', size: '11.8 MB', type: 'PDF', uploadedBy: 'Current User', uploadedAt: 'Sep 15, 2024 4:35 PM' }, - { name: 'Multi_City_Event_Plan.pdf', size: '8.5 MB', type: 'PDF', uploadedBy: 'Events Team', uploadedAt: 'Sep 16, 2024 9:15 AM' }, - { name: 'Brand_Activation_Strategy.pptx', size: '6.2 MB', type: 'PowerPoint', uploadedBy: 'Brand Team', uploadedAt: 'Sep 16, 2024 3:30 PM' }, - { name: 'Expected_ROI_Analysis.xlsx', size: '2.1 MB', type: 'Excel', uploadedBy: 'Analytics Team', uploadedAt: 'Sep 17, 2024 11:20 AM' } - ], - spectators: [ - { name: 'Community Managers', role: 'Rider Engagement', avatar: 'CM' }, - { name: 'Event Partners', role: 'Logistics Support', avatar: 'EP' } - ], - auditTrail: [ - { type: 'created', action: 'Request Created', details: 'Rider Fest sponsorship proposal submitted', user: 'Current User', timestamp: 'Sep 15, 2024 4:20 PM' }, - { type: 'approved', action: 'Approved by Nikhil Sharma', details: 'Events team approval with strong recommendation', user: 'Nikhil Sharma', timestamp: 'Sep 16, 2024 8:20 PM' }, - { type: 'approved', action: 'Final Approval by Deepika Sharma', details: 'VP Marketing approval for execution', user: 'Deepika Sharma', timestamp: 'Sep 22, 2024 10:45 AM' }, - { type: 'completed', action: 'Request Approved', details: 'Event sponsorship approved for implementation', user: 'System', timestamp: 'Sep 22, 2024 10:45 AM' } - ], - tags: ['event-sponsorship', 'rider-fest', 'approved', 'community-engagement'] - }, - - 'RE-REQ-2024-011': { - id: 'RE-REQ-2024-011', - title: 'Digital Transformation - Customer Service Platform', - description: 'Implementation of AI-powered customer service platform with chatbot integration, CRM enhancement, and mobile app connectivity. Projected 40% improvement in response times and 25% increase in customer satisfaction scores.', - category: 'Information Technology', - subcategory: 'Digital Transformation', - status: 'in-review', - priority: 'standard', - amount: '₹5,75,00,000', - slaProgress: 45, - slaRemaining: '3 days 8 hours', - slaEndDate: 'Oct 18, 2024 5:00 PM', - currentStep: 2, - totalSteps: 3, - initiator: { - name: 'Rahul Mishra', - role: 'IT Director - Customer Systems', - department: 'Information Technology', - email: 'rahul.mishra@royalenfield.com', - phone: '+91 98765 43300', - avatar: 'RM' - }, - department: 'Information Technology', - createdAt: 'Sep 30, 2024 2:00 PM', - updatedAt: 'Oct 7, 2024 11:45 AM', - dueDate: '2024-10-18T17:00:00Z', - conclusionRemark: '', - approvalFlow: [ - { - step: 1, - approver: 'Swati Bansal', - role: 'Chief Information Officer', - status: 'approved', - tatHours: 120, - actualHours: 89, - assignedAt: '2024-09-30T14:00:00Z', - comment: 'Technology architecture is sound and aligns with digital strategy roadmap. Platform selection is appropriate for scalability.', - timestamp: '2024-10-04T11:00:00Z' - }, - { - step: 2, - approver: 'Arun Pandey', - role: 'VP Customer Experience', - status: 'pending', - tatHours: 96, - elapsedHours: 76, - assignedAt: '2024-10-04T11:00:00Z', - comment: null, - timestamp: null - }, - { - step: 3, - approver: 'Vinod Dasari', - role: 'Chief Executive Officer', - status: 'waiting', - tatHours: 72, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null - } - ], - documents: [ - { name: 'Digital_Platform_Technical_Specs.pdf', size: '9.8 MB', type: 'PDF', uploadedBy: 'Technical Team', uploadedAt: 'Sep 30, 2024 2:15 PM' }, - { name: 'Vendor_Evaluation_Comparison.xlsx', size: '3.2 MB', type: 'Excel', uploadedBy: 'Procurement Team', uploadedAt: 'Oct 1, 2024 10:30 AM' }, - { name: 'Implementation_Roadmap_2024-25.pdf', size: '4.5 MB', type: 'PDF', uploadedBy: 'Project Team', uploadedAt: 'Oct 2, 2024 3:45 PM' }, - { name: 'Customer_Experience_Impact.pptx', size: '5.8 MB', type: 'PowerPoint', uploadedBy: 'CX Team', uploadedAt: 'Oct 3, 2024 9:20 AM' } - ], - spectators: [ - { name: 'Service Teams', role: 'End Users', avatar: 'ST' }, - { name: 'Analytics Team', role: 'Data Integration', avatar: 'AT' } - ], - auditTrail: [ - { type: 'created', action: 'Request Created', details: 'Digital customer service platform proposal', user: 'Rahul Mishra', timestamp: 'Sep 30, 2024 2:00 PM' }, - { type: 'assigned', action: 'Assigned to Swati Bansal', details: 'Technical evaluation by CIO', user: 'System', timestamp: 'Sep 30, 2024 2:01 PM' }, - { type: 'approved', action: 'Approved by Swati Bansal', details: 'Technical architecture approval', user: 'Swati Bansal', timestamp: 'Oct 4, 2024 11:00 AM' }, - { type: 'assigned', action: 'Assigned to Arun Pandey', details: 'Customer experience evaluation', user: 'System', timestamp: 'Oct 4, 2024 11:01 AM' } - ], - tags: ['digital-transformation', 'customer-service', 'ai-platform', 'crm-enhancement'] - }, - - 'RE-REQ-2024-012': { - id: 'RE-REQ-2024-012', - title: 'Sustainable Manufacturing Initiative - Green Energy', - description: 'Installation of solar power systems and energy efficiency upgrades across Chennai and Vallam Vadagal plants. Target: 40% renewable energy by 2025. Includes waste reduction programs and carbon footprint optimization.', - category: 'Sustainability', - subcategory: 'Green Energy', - status: 'rejected', - priority: 'standard', - amount: '₹12,50,00,000', - slaProgress: 100, - slaRemaining: 'Completed', - slaEndDate: 'Oct 5, 2024 5:00 PM', - currentStep: 3, - totalSteps: 3, - initiator: { - name: 'Current User', - role: 'Regional Service Manager - West', - department: 'Sustainability', - email: 'current.user@royalenfield.com', - phone: '+91 98765 43290', - avatar: 'CU' - }, - department: 'Sustainability', - createdAt: 'Sep 18, 2024 11:30 AM', - completedAt: 'Oct 3, 2024 3:15 PM', - updatedAt: 'Oct 3, 2024 3:15 PM', - dueDate: '2024-10-05T17:00:00Z', - conclusionRemark: 'Request rejected due to budget constraints in current fiscal year. Approved for inclusion in next fiscal year sustainability budget. ROI timeline needs optimization for board approval.', - approvalFlow: [ - { - step: 1, - approver: 'Environmental Team', - role: 'Sustainability Manager', - status: 'approved', - tatHours: 72, - actualHours: 48, - assignedAt: '2024-09-18T11:30:00Z', - comment: 'Excellent initiative aligning with corporate sustainability goals. Environmental impact assessment is comprehensive.', - timestamp: '2024-09-20T11:30:00Z' - }, - { - step: 2, - approver: 'Lalit Malik', - role: 'Chief Operating Officer', - status: 'approved', - tatHours: 96, - actualHours: 82, - assignedAt: '2024-09-20T11:30:00Z', - comment: 'Operations team supports the initiative. Implementation plan is feasible. Moving to financial evaluation.', - timestamp: '2024-09-23T21:30:00Z' - }, - { - step: 3, - approver: 'Finance Committee', - role: 'CFO & Investment Committee', - status: 'rejected', - tatHours: 168, - actualHours: 152, - assignedAt: '2024-09-23T21:30:00Z', - comment: 'While the initiative is commendable, current fiscal constraints require deferral. Recommend resubmission for FY25 budget with optimized ROI timeline.', - timestamp: '2024-10-03T15:15:00Z' - } - ], - documents: [ - { name: 'Sustainability_Initiative_Master_Plan.pdf', size: '15.2 MB', type: 'PDF', uploadedBy: 'Current User', uploadedAt: 'Sep 18, 2024 11:45 AM' }, - { name: 'Solar_Installation_Technical_Specs.pdf', size: '8.8 MB', type: 'PDF', uploadedBy: 'Engineering Team', uploadedAt: 'Sep 19, 2024 2:30 PM' }, - { name: 'Environmental_Impact_Assessment.pdf', size: '6.5 MB', type: 'PDF', uploadedBy: 'Environmental Team', uploadedAt: 'Sep 20, 2024 9:15 AM' }, - { name: 'ROI_Analysis_Green_Energy.xlsx', size: '2.8 MB', type: 'Excel', uploadedBy: 'Finance Team', uploadedAt: 'Sep 25, 2024 4:45 PM' } - ], - spectators: [ - { name: 'Plant Managers', role: 'Implementation Leads', avatar: 'PM' }, - { name: 'Vendor Partners', role: 'Solar Installation', avatar: 'VP' } - ], - auditTrail: [ - { type: 'created', action: 'Request Created', details: 'Green energy initiative proposal submitted', user: 'Current User', timestamp: 'Sep 18, 2024 11:30 AM' }, - { type: 'approved', action: 'Environmental Approval', details: 'Sustainability team endorsement', user: 'Environmental Team', timestamp: 'Sep 20, 2024 11:30 AM' }, - { type: 'approved', action: 'Operations Approval', details: 'COO approval for implementation feasibility', user: 'Lalit Malik', timestamp: 'Sep 23, 2024 9:30 PM' }, - { type: 'rejected', action: 'Finance Committee Rejection', details: 'Budget constraints - defer to next fiscal year', user: 'Finance Committee', timestamp: 'Oct 3, 2024 3:15 PM' } - ], - tags: ['sustainability', 'green-energy', 'rejected', 'budget-constraints'] - } -}; -*/ - -export default function App() { - const [currentPage, setCurrentPage] = useState('dashboard'); - const [selectedRequestId, setSelectedRequestId] = useState(''); - const [, setActiveModal] = useState(''); +// Main Application Routes Component +function AppRoutes({ onLogout }: AppProps) { + const navigate = useNavigate(); const [approvalAction, setApprovalAction] = useState<'approve' | 'reject' | null>(null); - const [selectedRequestTitle, setSelectedRequestTitle] = useState(''); const [dynamicRequests, setDynamicRequests] = useState([]); + const [selectedRequestId, setSelectedRequestId] = useState(''); + const [selectedRequestTitle, setSelectedRequestTitle] = useState(''); + + // Retrieve dynamic requests from localStorage on mount + useEffect(() => { + const storedRequests = localStorage.getItem('dynamicRequests'); + if (storedRequests) { + try { + const parsed = JSON.parse(storedRequests); + setDynamicRequests(parsed); + } catch (error) { + console.error('Error parsing dynamic requests:', error); + } + } + }, []); + + // Sync dynamic requests to localStorage whenever they change + useEffect(() => { + if (dynamicRequests.length > 0) { + localStorage.setItem('dynamicRequests', JSON.stringify(dynamicRequests)); + } + }, [dynamicRequests]); const handleNavigate = (page: string) => { - setCurrentPage(page as Page); + navigate(`/${page}`); }; const handleViewRequest = (requestId: string, requestTitle?: string) => { setSelectedRequestId(requestId); - - // Determine request type by checking databases and dynamic requests - const isClaimRequest = CLAIM_MANAGEMENT_DATABASE[requestId]; - const isCustomRequest = CUSTOM_REQUEST_DATABASE[requestId]; - const dynamicRequest = dynamicRequests.find((req: any) => req.id === requestId); - - // Get title from appropriate source - const request = isClaimRequest || isCustomRequest || dynamicRequest; - setSelectedRequestTitle(requestTitle || request?.title || 'Unknown Request'); - setCurrentPage('request-detail'); + setSelectedRequestTitle(requestTitle || 'Unknown Request'); + navigate(`/request/${requestId}`); }; const handleBack = () => { - setCurrentPage('dashboard'); + navigate(-1); }; const handleNewRequest = () => { - setCurrentPage('new-request'); + navigate('/new-request'); }; const handleNewRequestSubmit = (requestData: any) => { @@ -1207,7 +77,7 @@ export default function App() { if (requestData.templateType) { // Navigate to the specific template wizard if (requestData.templateType === 'claim-management') { - setCurrentPage('claim-management'); + navigate('/claim-management'); } return; } @@ -1314,7 +184,7 @@ export default function App() { setDynamicRequests([...dynamicRequests, newCustomRequest]); console.log('New custom request created:', newCustomRequest); - setCurrentPage('my-requests'); + navigate('/my-requests'); toast.success('Request Submitted Successfully!', { description: `Your request "${requestData.title}" (${requestId}) has been created and sent for approval.`, duration: 5000, @@ -1348,36 +218,14 @@ export default function App() { }; const handleOpenModal = (modal: string) => { - setActiveModal(modal); switch (modal) { case 'work-note': - setCurrentPage('work-notes'); + navigate(`/work-notes/${selectedRequestId}`); break; case 'internal-chat': - // Simplified access control: Allow access for "My Requests" and for approvers/initiators - if (currentPage === 'my-requests') { - // All requests in "My Requests" are created by current user, so full access - toast.success('Internal Chat Opened', { - description: 'Internal chat opened for your request stakeholders.', - }); - } else { - // For other pages, check if user is initiator or approver - const request = REQUEST_DATABASE[selectedRequestId as keyof typeof REQUEST_DATABASE]; - const isInitiator = request && request.initiator.name === 'Current User'; - const isApprover = request && request.approvalFlow.some((step: any) => - step.approver === 'Current User' || step.status === 'pending' - ); - - if (isInitiator || isApprover) { - toast.success('Internal Chat Opened', { - description: 'Internal chat opened for request stakeholders.', - }); - } else { - toast.error('Access Restricted', { - description: 'Internal chat is only accessible to request initiators and approvers.', - }); - } - } + toast.success('Internal Chat Opened', { + description: 'Internal chat opened for request stakeholders.', + }); break; case 'approval-list': toast.info('Approval List', { @@ -1420,257 +268,295 @@ export default function App() { } }; - const renderCurrentPage = () => { - switch (currentPage) { - case 'dashboard': - return ; - case 'open-requests': - return ; - case 'closed-requests': - return ; - case 'my-requests': - return ; - case 'request-detail': - // Always render RequestDetail for all request types - return ( - - ); - case 'work-notes': - return ( - - ); - case 'new-request': - return ( - - ); - case 'claim-management': - return ( - setCurrentPage('new-request')} - onSubmit={(claimData) => { - // Generate unique ID for the new claim request - const requestId = `RE-REQ-2024-CM-${String(dynamicRequests.length + 2).padStart(3, '0')}`; - - // Create full request object - const newRequest = { - id: requestId, - title: `${claimData.activityName} - Claim Request`, - description: claimData.requestDescription, - category: 'Dealer Operations', - subcategory: 'Claim Management', - status: 'pending', - priority: 'standard', - amount: 'TBD', - slaProgress: 0, - slaRemaining: '7 days', - slaEndDate: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString(), - currentStep: 1, - totalSteps: 8, - templateType: 'claim-management', - templateName: 'Claim Management', - initiator: { - name: 'Current User', - role: 'Regional Marketing Coordinator', - department: 'Marketing', - email: 'current.user@royalenfield.com', - phone: '+91 98765 43290', - avatar: 'CU' - }, - department: 'Marketing', - createdAt: new Date().toLocaleString('en-US', { - month: 'short', - day: 'numeric', - year: 'numeric', - hour: 'numeric', - minute: 'numeric', - hour12: true - }), - updatedAt: new Date().toLocaleString('en-US', { - month: 'short', - day: 'numeric', - year: 'numeric', - hour: 'numeric', - minute: 'numeric', - hour12: true - }), - dueDate: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString(), - conclusionRemark: '', - claimDetails: { - activityName: claimData.activityName, - activityType: claimData.activityType, - activityDate: claimData.activityDate ? new Date(claimData.activityDate).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }) : '', - location: claimData.location, - dealerCode: claimData.dealerCode, - dealerName: claimData.dealerName, - dealerEmail: claimData.dealerEmail || 'N/A', - dealerPhone: claimData.dealerPhone || 'N/A', - dealerAddress: claimData.dealerAddress || 'N/A', - requestDescription: claimData.requestDescription, - estimatedBudget: claimData.estimatedBudget || 'TBD', - periodStart: claimData.periodStartDate ? new Date(claimData.periodStartDate).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }) : '', - periodEnd: claimData.periodEndDate ? new Date(claimData.periodEndDate).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }) : '' - }, - approvalFlow: claimData.workflowSteps || [ - { - step: 1, - approver: `${claimData.dealerName} (Dealer)`, - role: 'Dealer - Document Upload', - status: 'pending', - tatHours: 72, - elapsedHours: 0, - assignedAt: new Date().toISOString(), - comment: null, - timestamp: null, - description: 'Dealer uploads proposal document, cost breakup, timeline for closure, and other supporting documents' - }, - { - step: 2, - approver: 'Current User (Initiator)', - role: 'Initiator Evaluation', - status: 'waiting', - tatHours: 48, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null, - description: 'Initiator reviews dealer documents and approves or requests modifications' - }, - { - step: 3, - approver: 'System Auto-Process', - role: 'IO Confirmation', - status: 'waiting', - tatHours: 1, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null, - description: 'Automatic IO (Internal Order) confirmation generated upon initiator approval' - }, - { - step: 4, - approver: 'Rajesh Kumar', - role: 'Department Lead Approval', - status: 'waiting', - tatHours: 72, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null, - description: 'Department head approves and blocks budget in IO for this activity' - }, - { - step: 5, - approver: `${claimData.dealerName} (Dealer)`, - role: 'Dealer - Completion Documents', - status: 'waiting', - tatHours: 120, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null, - description: 'Dealer submits activity completion documents and description' - }, - { - step: 6, - approver: 'Current User (Initiator)', - role: 'Initiator Verification', - status: 'waiting', - tatHours: 48, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null, - description: 'Initiator verifies completion documents and can modify approved amount' - }, - { - step: 7, - approver: 'System Auto-Process', - role: 'E-Invoice Generation', - status: 'waiting', - tatHours: 1, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null, - description: 'Auto-generate e-invoice based on final approved amount' - }, - { - step: 8, - approver: 'Finance Team', - role: 'Credit Note Issuance', - status: 'waiting', - tatHours: 48, - elapsedHours: 0, - assignedAt: null, - comment: null, - timestamp: null, - description: 'Finance team issues credit note to dealer' - } - ], - documents: [], - spectators: [], - auditTrail: [ - { - type: 'created', - action: 'Request Created', - details: `Claim request for ${claimData.activityName} created`, - user: 'Current User', - timestamp: new Date().toLocaleString('en-US', { - month: 'short', - day: 'numeric', - year: 'numeric', - hour: 'numeric', - minute: 'numeric', - hour12: true - }) - } - ], - tags: ['claim-management', 'new-request', claimData.activityType?.toLowerCase().replace(/\s+/g, '-')] - }; - - // Add to dynamic requests - setDynamicRequests(prev => [...prev, newRequest]); - - // Also add to REQUEST_DATABASE for immediate viewing - (REQUEST_DATABASE as any)[requestId] = newRequest; - - toast.success('Claim Request Submitted', { - description: 'Your claim management request has been created successfully.', - }); - setCurrentPage('my-requests'); - }} - /> - ); - default: - return ; - } + const handleClaimManagementSubmit = (claimData: any) => { + // Generate unique ID for the new claim request + const requestId = `RE-REQ-2024-CM-${String(dynamicRequests.length + 2).padStart(3, '0')}`; + + // Create full request object + const newRequest = { + id: requestId, + title: `${claimData.activityName} - Claim Request`, + description: claimData.requestDescription, + category: 'Dealer Operations', + subcategory: 'Claim Management', + status: 'pending', + priority: 'standard', + amount: 'TBD', + slaProgress: 0, + slaRemaining: '7 days', + slaEndDate: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString(), + currentStep: 1, + totalSteps: 8, + templateType: 'claim-management', + templateName: 'Claim Management', + initiator: { + name: 'Current User', + role: 'Regional Marketing Coordinator', + department: 'Marketing', + email: 'current.user@royalenfield.com', + phone: '+91 98765 43290', + avatar: 'CU' + }, + department: 'Marketing', + createdAt: new Date().toLocaleString('en-US', { + month: 'short', + day: 'numeric', + year: 'numeric', + hour: 'numeric', + minute: 'numeric', + hour12: true + }), + updatedAt: new Date().toLocaleString('en-US', { + month: 'short', + day: 'numeric', + year: 'numeric', + hour: 'numeric', + minute: 'numeric', + hour12: true + }), + dueDate: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString(), + conclusionRemark: '', + claimDetails: { + activityName: claimData.activityName, + activityType: claimData.activityType, + activityDate: claimData.activityDate ? new Date(claimData.activityDate).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }) : '', + location: claimData.location, + dealerCode: claimData.dealerCode, + dealerName: claimData.dealerName, + dealerEmail: claimData.dealerEmail || 'N/A', + dealerPhone: claimData.dealerPhone || 'N/A', + dealerAddress: claimData.dealerAddress || 'N/A', + requestDescription: claimData.requestDescription, + estimatedBudget: claimData.estimatedBudget || 'TBD', + periodStart: claimData.periodStartDate ? new Date(claimData.periodStartDate).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }) : '', + periodEnd: claimData.periodEndDate ? new Date(claimData.periodEndDate).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }) : '' + }, + approvalFlow: claimData.workflowSteps || [ + { + step: 1, + approver: `${claimData.dealerName} (Dealer)`, + role: 'Dealer - Document Upload', + status: 'pending', + tatHours: 72, + elapsedHours: 0, + assignedAt: new Date().toISOString(), + comment: null, + timestamp: null, + description: 'Dealer uploads proposal document, cost breakup, timeline for closure, and other supporting documents' + }, + { + step: 2, + approver: 'Current User (Initiator)', + role: 'Initiator Evaluation', + status: 'waiting', + tatHours: 48, + elapsedHours: 0, + assignedAt: null, + comment: null, + timestamp: null, + description: 'Initiator reviews dealer documents and approves or requests modifications' + }, + { + step: 3, + approver: 'System Auto-Process', + role: 'IO Confirmation', + status: 'waiting', + tatHours: 1, + elapsedHours: 0, + assignedAt: null, + comment: null, + timestamp: null, + description: 'Automatic IO (Internal Order) confirmation generated upon initiator approval' + }, + { + step: 4, + approver: 'Rajesh Kumar', + role: 'Department Lead Approval', + status: 'waiting', + tatHours: 72, + elapsedHours: 0, + assignedAt: null, + comment: null, + timestamp: null, + description: 'Department head approves and blocks budget in IO for this activity' + }, + { + step: 5, + approver: `${claimData.dealerName} (Dealer)`, + role: 'Dealer - Completion Documents', + status: 'waiting', + tatHours: 120, + elapsedHours: 0, + assignedAt: null, + comment: null, + timestamp: null, + description: 'Dealer submits activity completion documents and description' + }, + { + step: 6, + approver: 'Current User (Initiator)', + role: 'Initiator Verification', + status: 'waiting', + tatHours: 48, + elapsedHours: 0, + assignedAt: null, + comment: null, + timestamp: null, + description: 'Initiator verifies completion documents and can modify approved amount' + }, + { + step: 7, + approver: 'System Auto-Process', + role: 'E-Invoice Generation', + status: 'waiting', + tatHours: 1, + elapsedHours: 0, + assignedAt: null, + comment: null, + timestamp: null, + description: 'Auto-generate e-invoice based on final approved amount' + }, + { + step: 8, + approver: 'Finance Team', + role: 'Credit Note Issuance', + status: 'waiting', + tatHours: 48, + elapsedHours: 0, + assignedAt: null, + comment: null, + timestamp: null, + description: 'Finance team issues credit note to dealer' + } + ], + documents: [], + spectators: [], + auditTrail: [ + { + type: 'created', + action: 'Request Created', + details: `Claim request for ${claimData.activityName} created`, + user: 'Current User', + timestamp: new Date().toLocaleString('en-US', { + month: 'short', + day: 'numeric', + year: 'numeric', + hour: 'numeric', + minute: 'numeric', + hour12: true + }) + } + ], + tags: ['claim-management', 'new-request', claimData.activityType?.toLowerCase().replace(/\s+/g, '-')] + }; + + // Add to dynamic requests + setDynamicRequests(prev => [...prev, newRequest]); + + // Also add to REQUEST_DATABASE for immediate viewing + (REQUEST_DATABASE as any)[requestId] = newRequest; + + toast.success('Claim Request Submitted', { + description: 'Your claim management request has been created successfully.', + }); + navigate('/my-requests'); }; return (
- {(currentPage === 'new-request' || currentPage === 'claim-management') ? ( - renderCurrentPage() - ) : ( - - {renderCurrentPage()} - - )} + + {/* Dashboard */} + + + + } + /> + + + + + } + /> + + {/* Open Requests */} + + + + } + /> + + {/* Closed Requests */} + + + + } + /> + + {/* My Requests */} + + + + } + /> + + {/* Request Detail */} + + + + } + /> + + {/* Work Notes/Chat */} + } + /> + + {/* New Request (Custom) */} + + } + /> + + {/* Claim Management Wizard */} + + } + /> + ); -} \ No newline at end of file +} + +// Main App Component with Router +export default function App() { + return ( + + + + ); +} diff --git a/src/assets/images/royal_enfield_logo.png b/src/assets/images/royal_enfield_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e18d69a1a42d3e576162140f8dd7795f9be6eda1 GIT binary patch literal 133031 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 DBEAfv literal 0 HcmV?d00001 diff --git a/src/components/Auth/AuthDebugInfo.tsx b/src/components/Auth/AuthDebugInfo.tsx new file mode 100644 index 0000000..90e4049 --- /dev/null +++ b/src/components/Auth/AuthDebugInfo.tsx @@ -0,0 +1,80 @@ +import React, { useEffect } from 'react'; +import { useAuth0 } from '@auth0/auth0-react'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { Badge } from '@/components/ui/badge'; +import { X } from 'lucide-react'; +import { Button } from '@/components/ui/button'; + +interface AuthDebugInfoProps { + isOpen: boolean; + onClose: () => void; +} + +export function AuthDebugInfo({ isOpen, onClose }: AuthDebugInfoProps) { + const { user, isAuthenticated, isLoading, error } = useAuth0(); + + useEffect(() => { + console.log('AuthDebugInfo - Current Auth State:', { + isAuthenticated, + isLoading, + hasUser: !!user, + error: error?.message, + userData: user, + timestamp: new Date().toISOString() + }); + }, [user, isAuthenticated, isLoading, error]); + + if (!isOpen) return null; + + return ( +

+ ); +} + diff --git a/src/components/common/Loader/Loader.tsx b/src/components/common/Loader/Loader.tsx new file mode 100644 index 0000000..c7fe225 --- /dev/null +++ b/src/components/common/Loader/Loader.tsx @@ -0,0 +1,24 @@ +import React from 'react'; + +interface LoaderProps { + message?: string; + size?: 'sm' | 'md' | 'lg'; +} + +export function Loader({ message, size = 'md' }: LoaderProps) { + const sizeClasses = { + sm: 'h-4 w-4', + md: 'h-8 w-8', + lg: 'h-12 w-12' + }; + + return ( +
+
+ {message && ( +

{message}

+ )} +
+ ); +} + diff --git a/src/components/common/Loader/index.ts b/src/components/common/Loader/index.ts new file mode 100644 index 0000000..cab320d --- /dev/null +++ b/src/components/common/Loader/index.ts @@ -0,0 +1,2 @@ +export { Loader } from './Loader'; + diff --git a/src/components/layout/PageLayout/PageLayout.tsx b/src/components/layout/PageLayout/PageLayout.tsx index 25bced4..02cb0f7 100644 --- a/src/components/layout/PageLayout/PageLayout.tsx +++ b/src/components/layout/PageLayout/PageLayout.tsx @@ -5,15 +5,17 @@ import { Input } from '@/components/ui/input'; import { Badge } from '@/components/ui/badge'; import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'; +import royalEnfieldLogo from '@/assets/images/royal_enfield_logo.png'; interface PageLayoutProps { children: React.ReactNode; currentPage?: string; onNavigate?: (page: string) => void; onNewRequest?: () => void; + onLogout?: () => void; } -export function PageLayout({ children, currentPage = 'dashboard', onNavigate, onNewRequest }: PageLayoutProps) { +export function PageLayout({ children, currentPage = 'dashboard', onNavigate, onNewRequest, onLogout }: PageLayoutProps) { const [sidebarOpen, setSidebarOpen] = useState(false); const menuItems = [ @@ -70,21 +72,23 @@ export function PageLayout({ children, currentPage = 'dashboard', onNavigate, on z-50 md:z-auto flex-shrink-0 border-r border-gray-800 bg-black - overflow-y-auto + flex flex-col `}> -
-
+
+
-
-
-
+ Royal Enfield Logo

Royal Enfield

Approval Portal

-
+
{menuItems.map((item) => ( ))} -
- - {/* Quick Action in Sidebar */} -
- + + {/* Quick Action in Sidebar - Right below menu items */} +
+ +
@@ -197,7 +201,7 @@ export function PageLayout({ children, currentPage = 'dashboard', onNavigate, on Settings - + Logout diff --git a/src/components/workNote/WorkNoteChat/WorkNoteChat.tsx b/src/components/workNote/WorkNoteChat/WorkNoteChat.tsx index cdc4a07..042bfd6 100644 --- a/src/components/workNote/WorkNoteChat/WorkNoteChat.tsx +++ b/src/components/workNote/WorkNoteChat/WorkNoteChat.tsx @@ -39,7 +39,9 @@ import { Bell, Star, Flag, - X + X, + FileSpreadsheet, + Image } from 'lucide-react'; interface Message { @@ -286,14 +288,16 @@ const formatMessage = (content: string) => { .replace(/\n/g, '
'); }; -const getFileIcon = (type: string) => { +// File icon components using Lucide React +const FileIcon = ({ type }: { type: string }) => { + const iconClass = "w-4 h-4"; switch (type.toLowerCase()) { - case 'pdf': return '📄'; - case 'excel': case 'xlsx': return '📊'; - case 'powerpoint': case 'pptx': return '📊'; - case 'word': case 'docx': return '📝'; - case 'image': case 'png': case 'jpg': case 'jpeg': return '🖼️'; - default: return '📎'; + case 'pdf': return ; + case 'excel': case 'xlsx': return ; + case 'powerpoint': case 'pptx': return ; + case 'word': case 'docx': return ; + case 'image': case 'png': case 'jpg': case 'jpeg': return ; + default: return ; } }; @@ -642,7 +646,9 @@ export function WorkNoteChat({ requestId, onBack }: WorkNoteChatProps) {
{msg.attachments.map((attachment, index) => (
- {getFileIcon(attachment.type)} +
+ +
{attachment.name} @@ -727,7 +733,9 @@ export function WorkNoteChat({ requestId, onBack }: WorkNoteChatProps) {
{selectedFiles.map((file, index) => (
- {getFileIcon(file.type.split('/')[1] || 'file')} +
+ +
{file.name} {(file.size / 1024).toFixed(1)} KB + +
+

Secure Single Sign-On

+

Powered by Auth0

+
+ + +
+ ); +} + diff --git a/src/pages/Auth/AuthCallback.tsx b/src/pages/Auth/AuthCallback.tsx new file mode 100644 index 0000000..b171fb8 --- /dev/null +++ b/src/pages/Auth/AuthCallback.tsx @@ -0,0 +1,44 @@ +import React, { useEffect } from 'react'; +import { useAuth0 } from '@auth0/auth0-react'; +import { Loader } from '@/components/common/Loader'; + +export function AuthCallback() { + const { isAuthenticated, isLoading, error, user } = useAuth0(); + + useEffect(() => { + console.log('AuthCallback Component Mounted'); + console.log('Auth0 State during callback:', { + isAuthenticated, + isLoading, + error: error?.message, + hasUser: !!user, + timestamp: new Date().toISOString() + }); + + if (user) { + console.log('User authenticated successfully:', { + id: user.sub, + email: user.email, + name: user.name, + picture: user.picture, + nickname: user.nickname, + userData: user + }); + } + + if (error) { + console.error('Error during authentication callback:', error); + } + }, [isAuthenticated, isLoading, error, user]); + + if (error) { + console.error('AuthCallback Error:', error); + } + + return ( +
+ +
+ ); +} + diff --git a/src/pages/Auth/AuthenticatedApp.tsx b/src/pages/Auth/AuthenticatedApp.tsx new file mode 100644 index 0000000..98e6db3 --- /dev/null +++ b/src/pages/Auth/AuthenticatedApp.tsx @@ -0,0 +1,114 @@ +import React, { useEffect, useState } from 'react'; +import { useAuth0 } from '@auth0/auth0-react'; +import { Auth } from './Auth'; +import { AuthCallback } from './AuthCallback'; +import { AuthDebugInfo } from '@/components/Auth/AuthDebugInfo'; +import App from '../../App'; + +export function AuthenticatedApp() { + const { isAuthenticated, isLoading, error, user, logout: logoutAuth0 } = useAuth0(); + const [showDebugInfo, setShowDebugInfo] = useState(false); + + const handleLogout = async () => { + console.log('========================================'); + console.log('LOGOUT - Initiated'); + console.log('Timestamp:', new Date().toISOString()); + console.log('========================================'); + + // Clear all storage + console.log('Clearing all storage...'); + localStorage.clear(); + sessionStorage.clear(); + console.log('Storage cleared'); + + try { + await logoutAuth0({ + logoutParams: { + returnTo: window.location.origin + }, + localOnly: false // Clear Auth0 session as well + }); + + console.log('Logout successful'); + } catch (logoutError) { + console.error('Logout error:', logoutError); + } + }; + + useEffect(() => { + console.log('AuthenticatedApp - Auth State Changed:', { + isAuthenticated, + isLoading, + error: error?.message, + hasUser: !!user, + timestamp: new Date().toISOString() + }); + + if (user) { + console.log('========================================'); + console.log('USER AUTHENTICATED - Full Details'); + console.log('========================================'); + console.log('User ID (sub):', user.sub); + console.log('Email:', user.email); + console.log('Name:', user.name); + console.log('Nickname:', user.nickname); + console.log('Picture:', user.picture); + console.log('Email Verified:', user.email_verified); + console.log('Updated At:', user.updated_at); + console.log('========================================'); + console.log('ALL USER CLAIMS:'); + console.log(JSON.stringify(user, null, 2)); + console.log('========================================'); + } + }, [isAuthenticated, isLoading, error, user]); + + // Show loading state while checking authentication + if (isLoading) { + console.log('Auth0 is still loading...'); + return ( +
+
+
+

Loading authentication...

+
+
+ ); + } + + // Show auth error if present + if (error) { + console.error('Authentication Error:', error); + return ( +
+
+

Authentication Error

+

{error.message}

+ +
+
+ ); + } + + // Show login screen if not authenticated + if (!isAuthenticated) { + console.log('User not authenticated, showing login screen'); + return ; + } + + // User is authenticated, show the app + console.log('User authenticated successfully, showing main application'); + return ( + <> + + {showDebugInfo && ( + setShowDebugInfo(false)} /> + )} + + ); +} + diff --git a/src/pages/Auth/index.ts b/src/pages/Auth/index.ts new file mode 100644 index 0000000..f5f165b --- /dev/null +++ b/src/pages/Auth/index.ts @@ -0,0 +1,4 @@ +export { Auth } from './Auth'; +export { AuthCallback } from './AuthCallback'; +export { AuthenticatedApp } from './AuthenticatedApp'; + diff --git a/src/pages/ClosedRequests/ClosedRequests.tsx b/src/pages/ClosedRequests/ClosedRequests.tsx index 6914009..20f4c20 100644 --- a/src/pages/ClosedRequests/ClosedRequests.tsx +++ b/src/pages/ClosedRequests/ClosedRequests.tsx @@ -19,7 +19,8 @@ import { Target, RefreshCw, Settings2, - X + X, + XCircle } from 'lucide-react'; interface Request { @@ -304,8 +305,18 @@ export function ClosedRequests({ onViewRequest }: ClosedRequestsProps) { All Priorities - 🔥 Express - 🎯 Standard + +
+ + Express +
+
+ +
+ + Standard +
+
@@ -315,8 +326,18 @@ export function ClosedRequests({ onViewRequest }: ClosedRequestsProps) { All Statuses - ✅ Approved - ❌ Rejected + +
+ + Approved +
+
+ +
+ + Rejected +
+
diff --git a/src/pages/OpenRequests/OpenRequests.tsx b/src/pages/OpenRequests/OpenRequests.tsx index 5d0690a..7ab6ef6 100644 --- a/src/pages/OpenRequests/OpenRequests.tsx +++ b/src/pages/OpenRequests/OpenRequests.tsx @@ -351,8 +351,18 @@ export function OpenRequests({ onViewRequest }: OpenRequestsProps) { All Priorities - 🔥 Express - 🎯 Standard + +
+ + Express +
+
+ +
+ + Standard +
+
@@ -362,8 +372,8 @@ export function OpenRequests({ onViewRequest }: OpenRequestsProps) { All Statuses - ⏳ Pending - 👁️ In Review + Pending + In Review diff --git a/vite.config.ts b/vite.config.ts index b5e130f..60a58a0 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -18,6 +18,7 @@ export default defineConfig({ port: 3000, open: true, host: true, + allowedHosts: ['9b89f4bfd360.ngrok-free.app'], }, build: { outDir: 'dist',