217 lines
5.2 KiB
Markdown
217 lines
5.2 KiB
Markdown
# ✅ Holiday Calendar & Admin Configuration - Setup Complete!
|
|
|
|
## 🎉 Successfully Implemented
|
|
|
|
### **Database Tables Created:**
|
|
1. ✅ `holidays` - Organization holiday calendar
|
|
2. ✅ `admin_configurations` - System-wide admin settings
|
|
|
|
### **API Endpoints Created:**
|
|
- ✅ `/api/admin/holidays` - CRUD operations for holidays
|
|
- ✅ `/api/admin/configurations` - Manage admin settings
|
|
|
|
### **Features Implemented:**
|
|
- ✅ Holiday management (add/edit/delete/bulk import)
|
|
- ✅ TAT calculation excludes holidays for STANDARD priority
|
|
- ✅ Automatic holiday cache with 6-hour refresh
|
|
- ✅ Admin configuration system ready for future UI
|
|
- ✅ Sample Indian holidays data (2025) prepared for import
|
|
|
|
---
|
|
|
|
## 🚀 Quick Start
|
|
|
|
### **1. Verify Tables:**
|
|
```bash
|
|
# Check if tables were created
|
|
psql -d your_database -c "\dt holidays"
|
|
psql -d your_database -c "\dt admin_configurations"
|
|
```
|
|
|
|
### **2. Start the Backend:**
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
**You should see:**
|
|
```
|
|
📅 Holiday calendar loaded for TAT calculations
|
|
[TAT Utils] Loaded 0 holidays into cache
|
|
```
|
|
|
|
### **3. Add Your First Holiday (via API):**
|
|
|
|
**As Admin user:**
|
|
```bash
|
|
curl -X POST http://localhost:5000/api/admin/holidays \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
|
|
-d '{
|
|
"holidayDate": "2025-11-05",
|
|
"holidayName": "Diwali",
|
|
"description": "Festival of Lights",
|
|
"holidayType": "NATIONAL"
|
|
}'
|
|
```
|
|
|
|
### **4. Bulk Import Indian Holidays (Optional):**
|
|
```bash
|
|
curl -X POST http://localhost:5000/api/admin/holidays/bulk-import \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
|
|
-d @data/indian_holidays_2025.json
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 How It Works
|
|
|
|
### **TAT Calculation with Holidays:**
|
|
|
|
**STANDARD Priority:**
|
|
- ❌ Skips **weekends** (Saturday/Sunday)
|
|
- ❌ Skips **holidays** (from holidays table)
|
|
- ✅ Only counts **working hours** (9 AM - 6 PM)
|
|
|
|
**EXPRESS Priority:**
|
|
- ✅ Includes **all days** (24/7)
|
|
- ✅ No holidays or weekends excluded
|
|
|
|
---
|
|
|
|
## 📚 Documentation
|
|
|
|
- **Full Guide:** `docs/HOLIDAY_CALENDAR_SYSTEM.md`
|
|
- **Complete Summary:** `HOLIDAY_AND_ADMIN_CONFIG_COMPLETE.md`
|
|
|
|
---
|
|
|
|
## 🎯 Next Steps
|
|
|
|
### **For Backend Developers:**
|
|
1. Test holiday API endpoints
|
|
2. Verify TAT calculations with holidays
|
|
3. Add more admin configurations as needed
|
|
|
|
### **For Frontend Developers:**
|
|
1. Build Admin Holiday Management UI
|
|
2. Create Holiday Calendar view
|
|
3. Implement Configuration Settings page
|
|
|
|
---
|
|
|
|
## 🔍 Verify Setup
|
|
|
|
### **Check Holidays Table:**
|
|
```sql
|
|
SELECT * FROM holidays;
|
|
-- Should return 0 rows (no holidays added yet)
|
|
```
|
|
|
|
### **Check Admin Configurations:**
|
|
```sql
|
|
SELECT * FROM admin_configurations;
|
|
-- Should return 0 rows (will be seeded on first use)
|
|
```
|
|
|
|
### **Test Holiday API:**
|
|
```bash
|
|
# Get all holidays for 2025
|
|
curl http://localhost:5000/api/admin/holidays?year=2025 \
|
|
-H "Authorization: Bearer YOUR_ADMIN_TOKEN"
|
|
```
|
|
|
|
---
|
|
|
|
## 📋 Sample Holidays Data
|
|
|
|
**File:** `data/indian_holidays_2025.json`
|
|
|
|
Contains 14 Indian national holidays for 2025:
|
|
- Republic Day (Jan 26)
|
|
- Holi
|
|
- Independence Day (Aug 15)
|
|
- Gandhi Jayanti (Oct 2)
|
|
- Diwali
|
|
- Christmas
|
|
- And more...
|
|
|
|
---
|
|
|
|
## ✅ Setup Status
|
|
|
|
| Component | Status | Notes |
|
|
|-----------|--------|-------|
|
|
| **Holidays Table** | ✅ Created | With 4 indexes |
|
|
| **Admin Config Table** | ✅ Created | With 3 indexes |
|
|
| **Holiday Model** | ✅ Implemented | Full CRUD support |
|
|
| **Holiday Service** | ✅ Implemented | Including bulk import |
|
|
| **Admin Controller** | ✅ Implemented | All endpoints ready |
|
|
| **Admin Routes** | ✅ Implemented | Secured with admin middleware |
|
|
| **TAT Integration** | ✅ Implemented | Holidays excluded for STANDARD |
|
|
| **Holiday Cache** | ✅ Implemented | 6-hour expiry, auto-refresh |
|
|
| **Sample Data** | ✅ Created | 14 holidays for 2025 |
|
|
| **Documentation** | ✅ Complete | Full guide available |
|
|
|
|
---
|
|
|
|
## 🎓 Example Usage
|
|
|
|
### **Create Request with Holiday in TAT Period:**
|
|
|
|
```javascript
|
|
// Create STANDARD priority request
|
|
POST /api/workflows
|
|
{
|
|
"title": "Test Request",
|
|
"priority": "STANDARD",
|
|
"approvers": [
|
|
{ "email": "approver@example.com", "tatHours": 48 }
|
|
]
|
|
}
|
|
|
|
// If holidays exist between now and +48 hours:
|
|
// - Due date will be calculated skipping those holidays
|
|
// - TAT calculation will be accurate
|
|
```
|
|
|
|
---
|
|
|
|
## 🛠️ Troubleshooting
|
|
|
|
### **Holidays not excluded from TAT?**
|
|
|
|
1. Check if holidays cache is loaded:
|
|
- Look for "Loaded X holidays into cache" in server logs
|
|
2. Verify priority is STANDARD (EXPRESS doesn't use holidays)
|
|
3. Check if holiday exists and is active:
|
|
```sql
|
|
SELECT * FROM holidays WHERE holiday_date = '2025-11-05' AND is_active = true;
|
|
```
|
|
|
|
### **Cache not updating after adding holiday?**
|
|
|
|
- Cache refreshes automatically when admin adds/updates/deletes holidays
|
|
- If not working, restart backend server
|
|
- Cache also refreshes every 6 hours automatically
|
|
|
|
---
|
|
|
|
## 📞 Support
|
|
|
|
For issues or questions:
|
|
1. Check documentation in `docs/` folder
|
|
2. Review complete guide in `HOLIDAY_AND_ADMIN_CONFIG_COMPLETE.md`
|
|
3. Consult with backend team
|
|
|
|
---
|
|
|
|
**🎉 You're all set! Start adding holidays and enjoy accurate TAT calculations!**
|
|
|
|
---
|
|
|
|
**Last Updated:** November 4, 2025
|
|
**Version:** 1.0.0
|
|
**Team:** Royal Enfield Workflow System
|
|
|