192 lines
6.8 KiB
Python
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) |