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})