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)