38233-vm/core/views.py
2026-02-06 00:08:49 +00:00

139 lines
4.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.shortcuts import render, get_object_or_404, redirect
from django.db.models import Sum, Count, Avg, Q
from .models import Firma, Fatura, FaturaKalemi
from .forms import FirmaForm, FaturaForm
def home(request):
"""Fatura Yönetimi Gösterge Paneli."""
toplam_firma = Firma.objects.count()
toplam_fatura = Fatura.objects.count()
toplam_harcama = Fatura.objects.aggregate(Sum('genel_toplam'))['genel_toplam__sum'] or 0
son_faturalar = Fatura.objects.select_related('firma').all().order_by('-olusturulma_tarihi')[:10]
context = {
"toplam_firma": toplam_firma,
"toplam_fatura": toplam_fatura,
"toplam_harcama": toplam_harcama,
"son_faturalar": son_faturalar,
"active_menu": "dashboard"
}
return render(request, "core/index.html", context)
def fatura_arsivi(request):
"""Firmalara göre gruplanmış fatura arşivi."""
firmalar = Firma.objects.annotate(
fatura_sayisi=Count('faturalar'),
toplam_tutar=Sum('faturalar__genel_toplam')
).order_by('ad')
context = {
"firmalar": firmalar,
"active_menu": "archive"
}
return render(request, "core/fatura_arsivi.html", context)
def firma_detay(request, pk):
"""Belirli bir firmanın fatura listesi."""
firma = get_object_or_404(Firma, pk=pk)
faturalar = firma.faturalar.all().order_by('-tarih')
context = {
"firma": firma,
"faturalar": faturalar,
"active_menu": "archive"
}
return render(request, "core/firma_detay.html", context)
def fatura_detay(request, pk):
"""Fatura detay önizleme ve kalemleri."""
fatura = get_object_or_404(Fatura.objects.select_related('firma'), pk=pk)
kalemler = fatura.kalemler.all()
context = {
"fatura": fatura,
"kalemler": kalemler,
"active_menu": "archive"
}
return render(request, "core/fatura_detay.html", context)
def raporlar(request):
"""İstatistik ve Raporlar."""
# Aylık harcama trendi
aylik_harcama = Fatura.objects.values('tarih__month').annotate(
toplam=Sum('genel_toplam'),
adet=Count('id')
).order_by('tarih__month')
# KDV dağılımı
kdv_ozet = Fatura.objects.aggregate(
toplam_kdv=Sum('kdv_toplam'),
ortalama_kdv=Avg('kdv_toplam')
)
context = {
"aylik_harcama": aylik_harcama,
"kdv_ozet": kdv_ozet,
"active_menu": "reports"
}
return render(request, "core/raporlar.html", context)
def firma_ekle(request):
if request.method == 'POST':
form = FirmaForm(request.POST)
if form.is_valid():
form.save()
return redirect('fatura_arsivi')
else:
form = FirmaForm()
return render(request, 'core/firma_form.html', {'form': form, 'title': 'Yeni Firma Ekle'})
def fatura_ekle(request):
firma_id = request.GET.get('firma')
initial = {}
if firma_id:
initial['firma'] = firma_id
if request.method == 'POST':
form = FaturaForm(request.POST, request.FILES)
if form.is_valid():
fatura = form.save()
return redirect('firma_detay', pk=fatura.firma.pk)
else:
form = FaturaForm(initial=initial)
return render(request, 'core/fatura_form.html', {'form': form, 'title': 'Yeni Fatura Yükle'})
def search(request):
query = request.GET.get('q', '')
faturalar = []
firmalar = []
if query:
faturalar = Fatura.objects.filter(
Q(fatura_no__icontains=query) |
Q(firma__ad__icontains=query)
).select_related('firma')
firmalar = Firma.objects.filter(
Q(ad__icontains=query) |
Q(vergi_no__icontains=query)
)
context = {
'query': query,
'faturalar': faturalar,
'firmalar': firmalar,
}
return render(request, 'core/search_results.html', context)
def firma_sil(request, pk):
firma = get_object_or_404(Firma, pk=pk)
if request.method == 'POST':
firma.delete()
return redirect('fatura_arsivi')
return render(request, 'core/confirm_delete.html', {'object': firma, 'type': 'Firma'})
def fatura_sil(request, pk):
fatura = get_object_or_404(Fatura, pk=pk)
firma_pk = fatura.firma.pk
if request.method == 'POST':
fatura.delete()
return redirect('firma_detay', pk=firma_pk)
return render(request, 'core/confirm_delete.html', {'object': fatura, 'type': 'Fatura'})