Files
scha/schasite/admin.py
2025-03-07 12:15:48 -06:00

192 lines
6.8 KiB
Python

from django.contrib import admin
from .models import UsefulLinks, Membership,CalendarEvent, MembershipServices, AddressModel1, MembershipPerson, MembershipCommittee, CalendarEventAddressModel, Payments
from django.http import HttpResponse
from datetime import datetime
from .forms import PaymentImport
# Register your models here.
class UsefulLinksAdmin(admin.ModelAdmin):
list_display = ["name", "url"]
class MembershipAddressInline(admin.TabularInline):
model = AddressModel1
extra = 1
readonly_fields = ('id',)
class MembershipPersonInline(admin.TabularInline):
model = MembershipPerson
extra = 1
readonly_fields = ('id',)
class MembershipCommiteeInline(admin.TabularInline):
model = MembershipCommittee
extra = 1
readonly_fields = ('id',)
class MembershipServicesInline(admin.TabularInline):
model = MembershipServices
extra = 1
readonly_fields = ('id',)
def download_csv_by_members(modelAdmin, request, queryset):
import csv
import io as StringIO
def stream_csv(queryset):
csvfile = StringIO.StringIO()
writer = csv.writer(csvfile)
writer.writerow([
'address_1',
'city',
'state',
'zip_code',
'first_name',
'last_name',
'email',
'phone_number'
])
for q in queryset:
people = [item for item in MembershipPerson.objects.filter(membership_id=q.id)]
for person in people:
writer.writerow([
q.addressmodel1.address_1,
q.addressmodel1.city,
q.addressmodel1.state,
q.addressmodel1.zip_code,
person.first_name,
person.last_name,
person.email,
person.phone_number
])
yield csvfile.getvalue()
now = datetime.now()
filename = now.strftime("%Y_%m_%d_%H_%M_%S") + "_scha_member_by_member.csv"
response = HttpResponse(stream_csv(queryset), content_type="text/csv")
response['Content-Disposition'] = "attachment; filename={}".format(filename)
return response
def download_csv_by_address(modeladmin, request, queryset):
import csv
import io as StringIO
def stream_csv(queryset):
csvfile = StringIO.StringIO()
writer = csv.writer(csvfile)
writer.writerow(['address_1',
"city",
"state",
"zip_code",
"person_1_email",
"person_1_phone",
"person_1_first_name",
"person_1_last_name",
"person_2_email",
"person_2_phone",
"person_2_first_name",
"person_2_last_name"])
for q in queryset:
people = [item for item in MembershipPerson.objects.filter(membership_id=q.id)]
writer.writerow([
q.addressmodel1.address_1,
q.addressmodel1.city,
q.addressmodel1.state,
q.addressmodel1.zip_code,
people[0].email if len(people) > 0 else "",
people[0].phone_number if len(people) > 0 else "",
people[0].first_name if len(people) > 0 else "",
people[0].last_name if len(people) > 0 else "",
people[1].email if len(people) > 1 else "",
people[1].phone_number if len(people) > 1 else "",
people[1].first_name if len(people) > 1 else "",
people[1].last_name if len(people) > 1 else "",
])
yield csvfile.getvalue()
now = datetime.now()
filename = now.strftime("%Y_%m_%d_%H_%M_%S") + "_scha_member_by_address.csv"
response = HttpResponse(stream_csv(queryset), content_type="text/csv")
response['Content-Disposition'] = "attachment; filename={}".format(filename)
return response
class MembershipAdmin(admin.ModelAdmin):
inlines = [MembershipAddressInline, MembershipPersonInline, MembershipCommiteeInline, MembershipServicesInline]
actions=[download_csv_by_address, download_csv_by_members]
class CalendarEventAddressInline(admin.TabularInline):
model = CalendarEventAddressModel
extra = 1
readonly_fields = ('id',)
class CalendarEventAdmin(admin.ModelAdmin):
inlines = [CalendarEventAddressInline]
list_display = ["event_name", "start_date", "end_date", "coordinator_email", "event_link_name"]
class AddressModelAdmin(admin.ModelAdmin):
pass
class MembershipPersonAdmin(admin.ModelAdmin):
pass
class MembershipCommitteeAdmin(admin.ModelAdmin):
pass
class MembershipServicesAdmin(admin.ModelAdmin):
pass
class CalendarEventAddressModelAdmin(admin.ModelAdmin):
pass
def download_payments(modelAdmin, request, queryset):
import csv
import io as StringIO
def stream_payment_csv(queryset):
csvfile = StringIO.StringIO()
writer = csv.writer(csvfile)
writer.writerow([
'email',
'date',
'status',
'first_name',
'last_name',
'phone_number'
])
for q in queryset:
first_name=""
last_name = ""
phone_number = ""
if q.person:
first_name = q.person.first_name if q.person.first_name else ""
last_name = q.person.last_name if q.person.last_name else ""
phone_number = q.person.phone_number if q.person.phone_number else ""
writer.writerow([
q.email,
q.date,
q.status,
first_name,
last_name,
phone_number,
])
yield csvfile.getvalue()
now = datetime.now()
filename = now.strftime("%Y_%m_%d_%H_%M_%S") + "_scha_payments_by_member.csv"
response = HttpResponse(stream_payment_csv(queryset), content_type="text/csv")
response['Content-Disposition'] = "attachment; filename={}".format(filename)
return response
class PaymentsAdmin(admin.ModelAdmin):
list_display = ["date", "status", "email"]
search_fields = ['email']
actions=[download_payments]
form = PaymentImport
admin.site.register(UsefulLinks, UsefulLinksAdmin)
admin.site.register(Membership, MembershipAdmin)
admin.site.register(CalendarEvent, CalendarEventAdmin)
admin.site.register(AddressModel1, AddressModelAdmin)
admin.site.register(MembershipPerson, MembershipPersonAdmin)
admin.site.register(MembershipCommittee, MembershipCommitteeAdmin)
admin.site.register(MembershipServices, MembershipServicesAdmin)
admin.site.register(CalendarEventAddressModel, CalendarEventAddressModelAdmin)
admin.site.register(Payments, PaymentsAdmin)