71 lines
2.6 KiB
Python
71 lines
2.6 KiB
Python
from django.shortcuts import render, get_object_or_404, redirect
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.db.models import Q
|
|
from django.contrib import messages
|
|
from .models import AIChatHistory, AIConfiguration, SyncHistoryLog
|
|
from .ai_service import sync_ai_history
|
|
|
|
def index(request):
|
|
if request.user.is_authenticated:
|
|
return redirect('dashboard')
|
|
return render(request, 'core/index.html')
|
|
|
|
@login_required
|
|
def dashboard(request):
|
|
profile = request.user.profile
|
|
company = profile.company
|
|
|
|
query = request.GET.get('q', '')
|
|
histories = AIChatHistory.objects.filter(company=company)
|
|
|
|
if query:
|
|
histories = histories.filter(
|
|
Q(chat_title__icontains=query) |
|
|
Q(chat_content__icontains=query)
|
|
)
|
|
|
|
# Ordering is now handled by Model Meta
|
|
histories = histories.order_by('-chat_last_date')
|
|
|
|
# AI Configurations for the company
|
|
ai_configs = AIConfiguration.objects.filter(company=company)
|
|
last_sync_log = SyncHistoryLog.objects.filter(company=company).order_by('-timestamp').first()
|
|
|
|
context = {
|
|
'histories': histories,
|
|
'query': query,
|
|
'ai_configs': ai_configs,
|
|
'last_sync_log': last_sync_log,
|
|
}
|
|
return render(request, 'core/dashboard.html', context)
|
|
|
|
@login_required
|
|
def chat_detail(request, pk):
|
|
profile = request.user.profile
|
|
chat = get_object_or_404(AIChatHistory, pk=pk, company=profile.company)
|
|
return render(request, 'core/chat_detail.html', {'chat': chat})
|
|
|
|
@login_required
|
|
def sync_history(request):
|
|
if request.method == 'POST':
|
|
profile = request.user.profile
|
|
configs = AIConfiguration.objects.filter(company=profile.company, is_active=True)
|
|
|
|
if not configs.exists():
|
|
messages.warning(request, "No active AI configurations found. Please contact your administrator to add an API key.")
|
|
else:
|
|
total_synced = 0
|
|
for config in configs:
|
|
sync_ai_history(config)
|
|
# Re-fetch the log we just created
|
|
latest_log = SyncHistoryLog.objects.filter(configuration=config).order_by('-timestamp').first()
|
|
if latest_log and latest_log.status == 'success':
|
|
total_synced += latest_log.records_synced
|
|
|
|
if total_synced > 0:
|
|
messages.success(request, f"Successfully synced {total_synced} new chat records.")
|
|
else:
|
|
messages.info(request, "Sync completed. No new records found.")
|
|
|
|
return redirect('dashboard')
|