from django.shortcuts import render, redirect
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib import messages
from django.views.generic import TemplateView, View
from .models import DataUpload, ProcessedData, DashboardConfig, ReportRequest, RealTimeMonitor, DataStory, APIIntegration
from .forms import DataUploadForm, ReportRequestForm, APIIntegrationForm
class AnalyticsHomeView(TemplateView):
template_name = 'analytics/index.html'
def get(self, request, *args, **kwargs):
messages.info(request, "You need to log in to access this page.")
return super().get(request, *args, **kwargs)
class DataUploadView(View):
def get(self, request):
form = DataUploadForm()
return render(request, 'analytics/data_upload.html', {'form': form})
def post(self, request):
form = DataUploadForm(request.POST, request.FILES)
if form.is_valid():
data_upload = form.save(commit=False)
data_upload.user = request.user
data_upload.save()
return redirect('analytics:process_data')
return render(request, 'analytics/data_upload.html', {'form': form})
class ProcessDataView(View):
def get(self, request):
uploads = DataUpload.objects.filter(user=request.user)
return render(request, 'analytics/process_data.html', {'uploads': uploads})
def post(self, request):
# Implement data processing logic here
pass
class DashboardView(View):
def get(self, request):
dashboards = DashboardConfig.objects.filter(user=request.user)
return render(request, 'analytics/dashboard.html', {'dashboards': dashboards})
class DashboardDetailView(View):
def get(self, request, pk):
dashboard = DashboardConfig.objects.get(pk=pk, user=request.user)
return render(request, 'analytics/dashboard_detail.html', {'dashboard': dashboard})
class ReportView(View):
def get(self, request):
reports = ReportRequest.objects.filter(user=request.user)
return render(request, 'analytics/report_list.html', {'reports': reports})
class ReportGenerationView(View):
def get(self, request):
form = ReportRequestForm()
return render(request, 'analytics/report_generation.html', {'form': form})
def post(self, request):
form = ReportRequestForm(request.POST)
if form.is_valid():
report = form.save(commit=False)
report.user = request.user
report.save()
# Implement report generation logic here
return redirect('analytics:report_list')
return render(request, 'analytics/report_generation.html', {'form': form})
class RealTimeMonitorView(View):
def get(self, request):
monitors = RealTimeMonitor.objects.all()
return render(request, 'analytics/real_time_monitor.html', {'monitors': monitors})
class DataStoryView(View):
def get(self, request):
stories = DataStory.objects.all()
return render(request, 'analytics/data_story.html', {'stories': stories})
def post(self, request):
form = DataStoryForm(request.POST)
if form.is_valid():
story = form.save(commit=False)
story.user = request.user
story.save()
return redirect('analytics:data_story')
return render(request, 'analytics/data_story_create.html', {'form': form})
class HypothesisView(View):
def get(self, request):
# Add logic to fetch and display hypotheses
pass
class APIIntegrationView(View):
def get(self, request):
form = APIIntegrationForm()
return render(request, 'analytics/api_integration.html', {'form': form})
def post(self, request):
form = APIIntegrationForm(request.POST)
if form.is_valid():
api_integration = form.save(commit=False)
api_integration.user = request.user
api_integration.save()
# Implement API data retrieval logic here
return redirect('analytics:api_integration')
return render(request, 'analytics/api_integration.html', {'form': form})