39110-vm/core/admin.py
2026-03-11 07:41:51 +00:00

91 lines
3.2 KiB
Python

from django.contrib import admin
import csv
from django.http import HttpResponse
from .models import (
Donor, BloodRequest, BloodBank, VaccineRecord,
DonationEvent, Hospital, UserProfile, Badge,
Notification, Message, HealthReport
)
def export_as_csv(self, request, queryset):
meta = self.model._meta
field_names = [field.name for field in meta.fields]
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = f'attachment; filename={meta}.csv'
writer = csv.writer(response)
writer.writerow(field_names)
for obj in queryset:
writer.writerow([getattr(obj, field) for field in field_names])
return response
export_as_csv.short_description = "Export Selected to CSV"
@admin.register(UserProfile)
class UserProfileAdmin(admin.ModelAdmin):
list_display = ('user', 'blood_group', 'location', 'phone')
list_filter = ('blood_group',)
search_fields = ('user__username', 'phone', 'location')
actions = [export_as_csv]
@admin.register(Badge)
class BadgeAdmin(admin.ModelAdmin):
list_display = ('name', 'description')
@admin.register(VaccineRecord)
class VaccineRecordAdmin(admin.ModelAdmin):
list_display = ('vaccine_name', 'user', 'dose_number', 'date_taken', 'location')
list_filter = ('vaccine_name', 'date_taken')
search_fields = ('vaccine_name', 'user__username', 'location')
actions = [export_as_csv]
@admin.register(Donor)
class DonorAdmin(admin.ModelAdmin):
list_display = ('name', 'blood_group', 'location', 'is_available', 'is_verified')
list_filter = ('blood_group', 'is_available', 'is_verified')
search_fields = ('name', 'location', 'phone')
actions = [export_as_csv]
@admin.register(Hospital)
class HospitalAdmin(admin.ModelAdmin):
list_display = ('name', 'location', 'phone')
search_fields = ('name', 'location')
@admin.register(BloodRequest)
class BloodRequestAdmin(admin.ModelAdmin):
list_display = ('patient_name', 'blood_group', 'urgency', 'status', 'hospital', 'created_at')
list_filter = ('blood_group', 'urgency', 'status')
search_fields = ('patient_name', 'hospital')
actions = [export_as_csv]
@admin.register(BloodBank)
class BloodBankAdmin(admin.ModelAdmin):
list_display = ('name', 'location', 'stock_a_plus', 'stock_b_plus', 'stock_o_plus', 'stock_ab_plus')
search_fields = ('name', 'location')
actions = [export_as_csv]
@admin.register(DonationEvent)
class DonationEventAdmin(admin.ModelAdmin):
list_display = ('donor', 'request', 'date', 'is_completed')
list_filter = ('is_completed', 'date')
search_fields = ('donor__name', 'request__patient_name')
actions = [export_as_csv]
@admin.register(Notification)
class NotificationAdmin(admin.ModelAdmin):
list_display = ('user', 'message', 'is_read', 'created_at')
list_filter = ('is_read', 'created_at')
@admin.register(Message)
class MessageAdmin(admin.ModelAdmin):
list_display = ('sender', 'receiver', 'message_type', 'timestamp', 'is_read')
list_filter = ('message_type', 'is_read', 'timestamp')
@admin.register(HealthReport)
class HealthReportAdmin(admin.ModelAdmin):
list_display = ('title', 'user', 'hospital_name', 'report_date')
list_filter = ('report_date',)
search_fields = ('title', 'user__username', 'hospital_name')