251 lines
7.3 KiB
Python
251 lines
7.3 KiB
Python
from django.contrib import admin
|
|
from .models import (
|
|
UsefulLinks,
|
|
Membership,
|
|
CalendarEvent,
|
|
MembershipServices,
|
|
AddressModel1,
|
|
MembershipPerson,
|
|
MembershipCommittee,
|
|
CalendarEventAddressModel,
|
|
Payments,
|
|
SCHAOfficer,
|
|
)
|
|
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
|
|
|
|
class SCHAOfficerAdmin(admin.ModelAdmin):
|
|
list_display = ["position", "name", "email"]
|
|
|
|
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)
|
|
admin.site.register(SCHAOfficer, SCHAOfficerAdmin)
|
|
|