From d50cec383e703e46b3a118270175a5256780df04 Mon Sep 17 00:00:00 2001 From: Adam Goldsmith Date: Thu, 10 Feb 2022 16:51:32 -0500 Subject: [PATCH] Add complete Member, Flag, and MemberFlag models --- membershipworks/admin.py | 26 +++++-- membershipworks/models.py | 142 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 156 insertions(+), 12 deletions(-) diff --git a/membershipworks/admin.py b/membershipworks/admin.py index 6fb7f28..7a3d1bd 100644 --- a/membershipworks/admin.py +++ b/membershipworks/admin.py @@ -1,15 +1,29 @@ from django.contrib import admin -from .models import Member +from .models import Member, Flag -@admin.register(Member) -class MemberAdmin(admin.ModelAdmin): - readonly_fields = [field.name for field in Member._meta.get_fields() if field.concrete] - search_fields = ['account_name'] - +class ReadOnlyAdmin(admin.ModelAdmin): def has_add_permission(self, request, obj=None): return False + def has_change_permission(self, request, obj=None): + return False + def has_delete_permission(self, request, obj=None): return False + + +class MemberFlagInline(admin.TabularInline): + model = Member.flags.through + + +@admin.register(Member) +class MemberAdmin(ReadOnlyAdmin): + search_fields = ['account_name'] + inlines = [MemberFlagInline] + + +@admin.register(Flag) +class FlagAdmin(ReadOnlyAdmin): + inlines = [MemberFlagInline] diff --git a/membershipworks/models.py b/membershipworks/models.py index 1d3a4c4..c3641c5 100644 --- a/membershipworks/models.py +++ b/membershipworks/models.py @@ -1,13 +1,127 @@ +from datetime import datetime + from django.db import models +class Flag(models.Model): + id = models.CharField(max_length=24, primary_key=True) + name = models.TextField(null=True) + type = models.CharField(max_length=6) + + def __str__(self): + return f'{self.name} ({self.type})' + + class Meta: + managed = False + db_table = 'flag' + + +# TODO: is this still a temporal table? class Member(models.Model): - # TODO: this is only a partial set of fields, may want to expand - uid = models.CharField(primary_key=True, max_length=24) - year_of_birth = models.TextField(db_column='Year of Birth', blank=True, null=True) - account_name = models.TextField(db_column='Account Name', blank=True, null=True) - first_name = models.TextField(db_column='First Name', blank=True, null=True) - last_name = models.TextField(db_column='Last Name', blank=True, null=True) + uid = models.CharField(max_length=24, primary_key=True) + year_of_birth = models.TextField(db_column="Year of Birth", null=True) + account_name = models.TextField(db_column="Account Name", null=True) + first_name = models.TextField(db_column="First Name", null=True) + last_name = models.TextField(db_column="Last Name", null=True) + phone = models.TextField(db_column="Phone", null=True) + email = models.TextField(db_column="Email", null=True) + address_street = models.TextField(db_column="Address (Street)", null=True) + address_city = models.TextField(db_column="Address (City)", null=True) + address_state_province = models.TextField( + db_column="Address (State/Province)", null=True + ) + address_postal_code = models.TextField(db_column="Address (Postal Code)", null=True) + address_country = models.TextField(db_column="Address (Country)", null=True) + profile_description = models.TextField(db_column="Profile description", null=True) + website = models.TextField(db_column="Website", null=True) + fax = models.TextField(db_column="Fax", null=True) + contact_person = models.TextField(db_column="Contact Person", null=True) + password = models.TextField(db_column="Password", null=True) + position_relation = models.TextField(db_column="Position/relation", null=True) + parent_account_id = models.TextField(db_column="Parent Account ID", null=True) + gift_membership_purchased_by = models.TextField( + db_column="Gift Membership purchased by", null=True + ) + purchased_gift_membership_for = models.TextField( + db_column="Purchased Gift Membership for", null=True + ) + closet_storage = models.TextField(db_column="Closet Storage #", null=True) + storage_shelf = models.TextField(db_column="Storage Shelf #", null=True) + personal_studio_space = models.TextField(db_column="Personal Studio Space #", null=True) + access_permitted_shops_during_extended_hours = models.BooleanField( + db_column="Access Permitted Shops During Extended Hours?" + ) + normal_access_permitted_during_covid19_limited_operations = models.BooleanField( + db_column="Normal Access Permitted During COVID-19 Limited Operations" + ) + access_permitted_during_covid19_staffed_period_only = models.BooleanField( + db_column="Access Permitted During COVID-19 Staffed Period Only" + ) + access_front_door_and_studio_space_during_extended_hours = models.BooleanField( + db_column="Access Front Door and Studio Space During Extended Hours?" + ) + access_wood_shop = models.BooleanField(db_column="Access Wood Shop?") + access_metal_shop = models.BooleanField(db_column="Access Metal Shop?") + access_storage_closet = models.BooleanField(db_column="Access Storage Closet?") + access_studio_space = models.BooleanField(db_column="Access Studio Space?") + access_front_door = models.BooleanField(db_column="Access Front Door?") + access_card_number = models.TextField(db_column="Access Card Number", null=True) + access_card_facility_code = models.TextField( + db_column="Access Card Facility Code", null=True + ) + auto_billing_id = models.TextField(db_column="Auto Billing ID", null=True) + billing_method = models.TextField(db_column="Billing Method", null=True) + renewal_date = models.DateField(db_column="Renewal Date", null=True) + join_date = models.DateField(db_column="Join Date", null=True) + admin_note = models.TextField(db_column="Admin note", null=True) + profile_gallery_image_url = models.TextField( + db_column="Profile gallery image URL", null=True + ) + business_card_image_url = models.TextField( + db_column="Business card image URL", null=True + ) + instagram = models.TextField(db_column="Instagram", null=True) + pinterest = models.TextField(db_column="Pinterest", null=True) + youtube = models.TextField(db_column="Youtube", null=True) + yelp = models.TextField(db_column="Yelp", null=True) + google = models.TextField(db_column="Google+", null=True) + bbb = models.TextField(db_column="BBB", null=True) + twitter = models.TextField(db_column="Twitter", null=True) + facebook = models.TextField(db_column="Facebook", null=True) + linked_in = models.TextField(db_column="LinkedIn", null=True) + do_not_show_street_address_in_profile = models.TextField( + db_column="Do not show street address in profile", null=True + ) + do_not_list_in_directory = models.TextField( + db_column="Do not list in directory", null=True + ) + how_did_you_hear = models.TextField(db_column="HowDidYouHear", null=True) + authorize_charge = models.TextField(db_column="authorizeCharge", null=True) + policy_agreement = models.TextField(db_column="policyAgreement", null=True) + waiver_form_signed_and_on_file_date = models.DateField( + db_column="Waiver form signed and on file date.", null=True + ) + membership_agreement_signed_and_on_file_date = models.DateField( + db_column="Membership Agreement signed and on file date.", null=True + ) + ip_address = models.TextField(db_column="IP Address", null=True) + audit_date = models.DateField(db_column="Audit Date", null=True) + agreement_version = models.TextField(db_column="Agreement Version", null=True) + paperwork_status = models.TextField(db_column="Paperwork status", null=True) + membership_agreement_dated = models.BooleanField(db_column="Membership agreement dated") + membership_agreement_acknowledgement_page_filled_out = models.BooleanField( + db_column="Membership Agreement Acknowledgement Page Filled Out" + ) + membership_agreement_signed = models.BooleanField( + db_column="Membership Agreement Signed" + ) + liability_form_filled_out = models.BooleanField(db_column="Liability Form Filled Out") + self_certify_essential_business = models.BooleanField( + db_column="selfCertifyEssentialBusiness" + ) + accepted_covid19_policy = models.BooleanField(db_column="Accepted COVID-19 Policy") + flags = models.ManyToManyField(Flag, through='MemberFlag', related_name='members') + def __str__(self): return f"{self.account_name}" @@ -16,3 +130,19 @@ class Member(models.Model): managed = False db_table = 'members' ordering = ('first_name', 'last_name') + + +class MemberFlag(models.Model): + member = models.ForeignKey(Member, on_delete=models.PROTECT, db_column="uid") + flag = models.ForeignKey(Flag, on_delete=models.PROTECT) + + def __str__(self): + return f'{self.member} - {self.flag}' + + class Meta: + managed = False + db_table = 'memberflag' + constraints = [ + models.UniqueConstraint(fields=['member', 'flag_id'], name='unique_member_flag') + ] +