# Generated by Django 5.1 on 2024-08-21 18:17 import uuid import django.db.models.deletion from django.db import migrations, models from django.db.models.functions import Cast import django_db_views.migration_functions import django_db_views.operations class Migration(migrations.Migration): initial = True dependencies = [ ("reservations", "0001_initial"), ] operations = [ migrations.CreateModel( name="Flag", fields=[ ( "id", models.CharField(max_length=24, primary_key=True, serialize=False), ), ("name", models.TextField(blank=True, null=True)), ("type", models.CharField(max_length=6)), ], options={ "db_table": "flag", "ordering": ("name",), }, ), migrations.CreateModel( name="Member", fields=[ ( "uid", models.CharField(max_length=24, primary_key=True, serialize=False), ), ( "year_of_birth", models.TextField(blank=True, db_column="Year of Birth", null=True), ), ( "account_name", models.TextField(blank=True, db_column="Account Name", null=True), ), ( "first_name", models.TextField(blank=True, db_column="First Name", null=True), ), ( "last_name", models.TextField(blank=True, db_column="Last Name", null=True), ), ("phone", models.TextField(blank=True, db_column="Phone", null=True)), ("email", models.TextField(blank=True, db_column="Email", null=True)), ( "volunteer_email", models.TextField( blank=True, db_column="Volunteer Email", null=True ), ), ( "address_street", models.TextField( blank=True, db_column="Address (Street)", null=True ), ), ( "address_city", models.TextField(blank=True, db_column="Address (City)", null=True), ), ( "address_state_province", models.TextField( blank=True, db_column="Address (State/Province)", null=True ), ), ( "address_postal_code", models.TextField( blank=True, db_column="Address (Postal Code)", null=True ), ), ( "address_country", models.TextField( blank=True, db_column="Address (Country)", null=True ), ), ( "profile_description", models.TextField( blank=True, db_column="Profile description", null=True ), ), ( "website", models.TextField(blank=True, db_column="Website", null=True), ), ("fax", models.TextField(blank=True, db_column="Fax", null=True)), ( "contact_person", models.TextField(blank=True, db_column="Contact Person", null=True), ), ( "password", models.TextField(blank=True, db_column="Password", null=True), ), ( "position_relation", models.TextField( blank=True, db_column="Position/relation", null=True ), ), ( "parent_account_id", models.TextField( blank=True, db_column="Parent Account ID", null=True ), ), ( "closet_storage", models.TextField( blank=True, db_column="Closet Storage #", null=True ), ), ( "storage_shelf", models.TextField( blank=True, db_column="Storage Shelf #", null=True ), ), ( "personal_studio_space", models.TextField( blank=True, db_column="Personal Studio Space #", null=True ), ), ( "access_permitted_shops_during_extended_hours", models.BooleanField( db_column="Access Permitted Shops During Extended Hours?" ), ), ( "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( blank=True, db_column="Access Card Number", null=True ), ), ( "access_card_facility_code", models.TextField( blank=True, db_column="Access Card Facility Code", null=True ), ), ( "auto_billing_id", models.TextField( blank=True, db_column="Auto Billing ID", null=True ), ), ( "billing_method", models.TextField(blank=True, db_column="Billing Method", null=True), ), ( "renewal_date", models.DateField(blank=True, db_column="Renewal Date", null=True), ), ( "join_date", models.DateField(blank=True, db_column="Join Date", null=True), ), ( "admin_note", models.TextField(blank=True, db_column="Admin note", null=True), ), ( "profile_gallery_image_url", models.TextField( blank=True, db_column="Profile gallery image URL", null=True ), ), ( "business_card_image_url", models.TextField( blank=True, db_column="Business card image URL", null=True ), ), ( "instagram", models.TextField(blank=True, db_column="Instagram", null=True), ), ( "pinterest", models.TextField(blank=True, db_column="Pinterest", null=True), ), ( "youtube", models.TextField(blank=True, db_column="Youtube", null=True), ), ("yelp", models.TextField(blank=True, db_column="Yelp", null=True)), ( "google", models.TextField(blank=True, db_column="Google+", null=True), ), ("bbb", models.TextField(blank=True, db_column="BBB", null=True)), ( "twitter", models.TextField(blank=True, db_column="Twitter", null=True), ), ( "facebook", models.TextField(blank=True, db_column="Facebook", null=True), ), ( "linked_in", models.TextField(blank=True, db_column="LinkedIn", null=True), ), ( "do_not_show_street_address_in_profile", models.TextField( blank=True, db_column="Do not show street address in profile", null=True, ), ), ( "do_not_list_in_directory", models.TextField( blank=True, db_column="Do not list in directory", null=True ), ), ( "how_did_you_hear", models.TextField(blank=True, db_column="HowDidYouHear", null=True), ), ( "authorize_charge", models.TextField( blank=True, db_column="authorizeCharge", null=True ), ), ( "policy_agreement", models.TextField( blank=True, db_column="policyAgreement", null=True ), ), ( "waiver_form_signed_and_on_file_date", models.DateField( blank=True, db_column="Waiver form signed and on file date.", null=True, ), ), ( "membership_agreement_signed_and_on_file_date", models.DateField( blank=True, db_column="Membership Agreement signed and on file date.", null=True, ), ), ( "ip_address", models.TextField(blank=True, db_column="IP Address", null=True), ), ( "audit_date", models.DateField(blank=True, db_column="Audit Date", null=True), ), ( "agreement_version", models.TextField( blank=True, db_column="Agreement Version", null=True ), ), ( "paperwork_status", models.TextField( blank=True, 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"), ), ], options={ "db_table": "members", "ordering": ("first_name", "last_name"), "indexes": [ models.Index(fields=["account_name"], name="account_name_idx"), models.Index(fields=["first_name"], name="first_name_idx"), models.Index(fields=["last_name"], name="last_name_idx"), ], }, ), migrations.CreateModel( name="MemberFlag", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "flag", models.ForeignKey( on_delete=django.db.models.deletion.PROTECT, to="membershipworks.flag", ), ), ( "member", models.ForeignKey( db_column="uid", db_constraint=False, on_delete=django.db.models.deletion.PROTECT, to="membershipworks.member", ), ), ], options={ "db_table": "memberflag", "constraints": [ models.UniqueConstraint( fields=("member", "flag"), name="unique_member_flag" ) ], }, ), migrations.AddField( model_name="member", name="flags", field=models.ManyToManyField( related_name="members", through="membershipworks.MemberFlag", to="membershipworks.flag", ), ), migrations.CreateModel( name="Transaction", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("sid", models.CharField(blank=True, max_length=256, null=True)), ("timestamp", models.DateTimeField()), ("type", models.TextField(blank=True, null=True)), ( "sum", models.DecimalField( blank=True, decimal_places=4, max_digits=13, null=True ), ), ( "fee", models.DecimalField( blank=True, decimal_places=4, max_digits=13, null=True ), ), ("event_id", models.TextField(blank=True, null=True)), ("for_what", models.TextField(blank=True, db_column="For", null=True)), ("items", models.TextField(blank=True, db_column="Items", null=True)), ( "discount_code", models.TextField(blank=True, db_column="Discount Code", null=True), ), ("note", models.TextField(blank=True, db_column="Note", null=True)), ("name", models.TextField(blank=True, db_column="Name", null=True)), ( "contact_person", models.TextField(blank=True, db_column="Contact Person", null=True), ), ( "full_address", models.TextField(blank=True, db_column="Full Address", null=True), ), ("street", models.TextField(blank=True, db_column="Street", null=True)), ("city", models.TextField(blank=True, db_column="City", null=True)), ( "state_province", models.TextField(blank=True, db_column="State/Province", null=True), ), ( "postal_code", models.TextField(blank=True, db_column="Postal Code", null=True), ), ( "country", models.TextField(blank=True, db_column="Country", null=True), ), ("phone", models.TextField(blank=True, db_column="Phone", null=True)), ("email", models.TextField(blank=True, db_column="Email", null=True)), ( "member", models.ForeignKey( blank=True, db_column="uid", db_constraint=False, null=True, on_delete=django.db.models.deletion.PROTECT, related_name="transactions", to="membershipworks.member", ), ), ], options={ "db_table": "transactions", }, ), migrations.CreateModel( name="EventCategory", fields=[ ("id", models.IntegerField(primary_key=True, serialize=False)), ("title", models.TextField()), ], ), migrations.CreateModel( name="Event", fields=[ ( "eid", models.CharField(max_length=255, primary_key=True, serialize=False), ), ("url", models.TextField()), ("title", models.TextField()), ("start", models.DateTimeField()), ("end", models.DateTimeField(blank=True, null=True)), ("cap", models.IntegerField(blank=True, null=True)), ("count", models.IntegerField()), ( "calendar", models.IntegerField( choices=[ (0, "Hidden"), (1, "Green"), (2, "Red"), (3, "Yellow"), (4, "Blue"), (5, "Purple"), (6, "Magenta"), (7, "Grey"), (8, "Teal"), ] ), ), ("venue", models.TextField(blank=True, null=True)), ( "category", models.ForeignKey( on_delete=django.db.models.deletion.PROTECT, to="membershipworks.eventcategory", ), ), ( "occurred", models.GeneratedField( db_persist=True, expression=models.Q( ("cap", 0), ("count", 0), ("calendar", 0), _connector="OR", _negated=True, ), output_field=models.BooleanField(), ), ), ], options={ "abstract": False, }, ), migrations.CreateModel( name="EventInstructor", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.TextField(blank=True)), ( "member", models.OneToOneField( blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.PROTECT, to="membershipworks.member", ), ), ], ), migrations.CreateModel( name="EventExt", fields=[ ( "event_ptr", models.OneToOneField( auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to="membershipworks.event", ), ), ( "materials_fee", models.DecimalField( blank=True, decimal_places=4, max_digits=13, null=True ), ), ( "instructor", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to="membershipworks.eventinstructor", ), ), ( "instructor_flat_rate", models.DecimalField(decimal_places=4, default=0, max_digits=13), ), ( "instructor_percentage", models.DecimalField(decimal_places=4, default=0.5, max_digits=5), ), ("materials_fee_included_in_price", models.BooleanField(null=True)), ("details", models.JSONField(blank=True, null=True)), ("registrations", models.JSONField(blank=True, null=True)), ( "details_timestamp", models.GeneratedField( db_persist=True, expression=models.Func( Cast(models.F("details___ts"), models.IntegerField()), function="to_timestamp", ), output_field=models.DateTimeField(), verbose_name="Last details fetch", ), ), ("should_survey", models.BooleanField(default=False)), ("survey_email_sent", models.BooleanField(default=False)), ], options={ "verbose_name": "event", "ordering": ["-start"], }, bases=("membershipworks.event",), ), migrations.CreateModel( name="EventMeetingTime", fields=[ ( "event", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="meeting_times", to="membershipworks.eventext", ), ), ( "reservation_ptr", models.OneToOneField( auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to="reservations.reservation", ), ), ], options={ "constraints": [], }, ), migrations.CreateModel( name="EventInvoice", fields=[ ( "uuid", models.UUIDField( default=uuid.uuid4, editable=False, primary_key=True, serialize=False, ), ), ("date_submitted", models.DateField()), ("date_paid", models.DateField(blank=True, null=True)), ("pdf", models.FileField(upload_to="protected/invoices/%Y/%m/%d/")), ("amount", models.DecimalField(decimal_places=4, max_digits=13)), ( "event", models.OneToOneField( on_delete=django.db.models.deletion.PROTECT, related_name="invoice", to="membershipworks.eventext", ), ), ], ), migrations.CreateModel( name="EventTicketType", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("label", models.TextField()), ("restrict_to", models.TextField(blank=True, null=True)), ("list_price", models.FloatField()), ("quantity", models.IntegerField()), ], options={ "managed": False, "base_manager_name": "objects", }, ), django_db_views.operations.ViewRunPython( code=django_db_views.migration_functions.ForwardViewMigration( "SELECT\n row_number() over () as id,\n eventext.event_ptr_id as event_id,\n tkt.*,\n jsonb_path_query_first(\n eventext.details,\n '$.tkt[*] ? (exists (@.dsp ? (@[*] == \"5771675edcdf126302a2f6b9\"))).amt'\n )::numeric as members_price\n FROM membershipworks_eventext AS eventext,\n jsonb_to_recordset(eventext.details -> 'tkt') AS tkt (\n lbl TEXT,\n amt NUMERIC,\n cnt INT,\n dsp JSONB\n )", "membershipworks_eventtickettype", engine="django.db.backends.postgresql", ), reverse_code=django_db_views.migration_functions.BackwardViewMigration( "", "membershipworks_eventtickettype", engine="django.db.backends.postgresql", ), atomic=False, ), migrations.CreateModel( name="EventAttendeeStats", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("gross_revenue", models.FloatField()), ], options={ "managed": False, }, ), django_db_views.operations.ViewRunPython( code=django_db_views.migration_functions.ForwardViewMigration( "SELECT eventext.event_ptr_id as event_id, SUM(usr.sum) as gross_revenue\n FROM\n membershipworks_eventext as eventext,\n jsonb_to_recordset(eventext.details -> 'usr') AS usr (\n sum NUMERIC\n )\n GROUP BY event_id", "membershipworks_eventattendeestats", engine="django.db.backends.postgresql", ), reverse_code=django_db_views.migration_functions.BackwardViewMigration( "", "membershipworks_eventattendeestats", engine="django.db.backends.postgresql", ), atomic=False, ), migrations.CreateModel( name="EventAttendee", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=256)), ("email", models.CharField(max_length=256)), ("sum", models.FloatField()), ], options={ "managed": False, }, ), django_db_views.operations.ViewRunPython( code=django_db_views.migration_functions.ForwardViewMigration( "SELECT eventext.event_ptr_id as event_id, usr.*\n FROM\n membershipworks_eventext AS eventext,\n jsonb_to_recordset(eventext.details -> 'usr') AS usr (\n uid TEXT,\n nam TEXT,\n eml TEXT,\n sum NUMERIC\n )", "membershipworks_eventattendee", engine="django.db.backends.postgresql", ), reverse_code=django_db_views.migration_functions.BackwardViewMigration( "", "membershipworks_eventattendee", engine="django.db.backends.postgresql", ), atomic=False, ), migrations.CreateModel( name="EventTicketAggregate", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("quantity", models.IntegerField()), ("amount", models.DecimalField(decimal_places=4, max_digits=13)), ("materials", models.DecimalField(decimal_places=4, max_digits=13)), ( "amount_without_materials", models.DecimalField(decimal_places=4, max_digits=13), ), ( "instructor_revenue", models.DecimalField(decimal_places=4, max_digits=13), ), ( "instructor_amount", models.DecimalField(decimal_places=4, max_digits=13), ), ], options={ "managed": False, }, ), django_db_views.operations.ViewRunPython( code=django_db_views.migration_functions.ForwardViewMigration( 'SELECT "membershipworks_eventtickettype"."event_id", SUM("membershipworks_eventtickettype"."cnt") AS "quantity", SUM((CASE WHEN ("membershipworks_eventtickettype"."dsp" ? (SELECT U0."id" FROM "flag" U0 WHERE (U0."name" = \'Members\' AND U0."type" = \'folder\') ORDER BY U0."name" ASC LIMIT 1) OR ("membershipworks_eventtickettype"."dsp" IS NULL AND ("membershipworks_event"."start" < \'2024-07-01 00:00:00-04:00\'::timestamptz OR "membershipworks_eventtickettype"."members_price" = 0))) THEN "membershipworks_eventtickettype"."amt" ELSE "membershipworks_eventtickettype"."members_price" END * "membershipworks_eventtickettype"."cnt")) AS "amount", SUM(CASE WHEN ("membershipworks_eventext"."materials_fee_included_in_price" OR ("membershipworks_eventext"."materials_fee" = 0 AND "membershipworks_eventext"."materials_fee" IS NOT NULL)) THEN ("membershipworks_eventext"."materials_fee" * "membershipworks_eventtickettype"."cnt") WHEN "membershipworks_eventext"."materials_fee_included_in_price" IS NULL THEN NULL ELSE 0 END) AS "materials", SUM(((CASE WHEN ("membershipworks_eventtickettype"."dsp" ? (SELECT U0."id" FROM "flag" U0 WHERE (U0."name" = \'Members\' AND U0."type" = \'folder\') ORDER BY U0."name" ASC LIMIT 1) OR ("membershipworks_eventtickettype"."dsp" IS NULL AND ("membershipworks_event"."start" < \'2024-07-01 00:00:00-04:00\'::timestamptz OR "membershipworks_eventtickettype"."members_price" = 0))) THEN "membershipworks_eventtickettype"."amt" ELSE "membershipworks_eventtickettype"."members_price" END * "membershipworks_eventtickettype"."cnt") - CASE WHEN ("membershipworks_eventext"."materials_fee_included_in_price" OR ("membershipworks_eventext"."materials_fee" = 0 AND "membershipworks_eventext"."materials_fee" IS NOT NULL)) THEN ("membershipworks_eventext"."materials_fee" * "membershipworks_eventtickettype"."cnt") WHEN "membershipworks_eventext"."materials_fee_included_in_price" IS NULL THEN NULL ELSE 0 END)) AS "amount_without_materials", SUM((((CASE WHEN ("membershipworks_eventtickettype"."dsp" ? (SELECT U0."id" FROM "flag" U0 WHERE (U0."name" = \'Members\' AND U0."type" = \'folder\') ORDER BY U0."name" ASC LIMIT 1) OR ("membershipworks_eventtickettype"."dsp" IS NULL AND ("membershipworks_event"."start" < \'2024-07-01 00:00:00-04:00\'::timestamptz OR "membershipworks_eventtickettype"."members_price" = 0))) THEN "membershipworks_eventtickettype"."amt" ELSE "membershipworks_eventtickettype"."members_price" END * "membershipworks_eventtickettype"."cnt") - CASE WHEN ("membershipworks_eventext"."materials_fee_included_in_price" OR ("membershipworks_eventext"."materials_fee" = 0 AND "membershipworks_eventext"."materials_fee" IS NOT NULL)) THEN ("membershipworks_eventext"."materials_fee" * "membershipworks_eventtickettype"."cnt") WHEN "membershipworks_eventext"."materials_fee_included_in_price" IS NULL THEN NULL ELSE 0 END) * "membershipworks_eventext"."instructor_percentage")) AS "instructor_revenue", SUM(((((CASE WHEN ("membershipworks_eventtickettype"."dsp" ? (SELECT U0."id" FROM "flag" U0 WHERE (U0."name" = \'Members\' AND U0."type" = \'folder\') ORDER BY U0."name" ASC LIMIT 1) OR ("membershipworks_eventtickettype"."dsp" IS NULL AND ("membershipworks_event"."start" < \'2024-07-01 00:00:00-04:00\'::timestamptz OR "membershipworks_eventtickettype"."members_price" = 0))) THEN "membershipworks_eventtickettype"."amt" ELSE "membershipworks_eventtickettype"."members_price" END * "membershipworks_eventtickettype"."cnt") - CASE WHEN ("membershipworks_eventext"."materials_fee_included_in_price" OR ("membershipworks_eventext"."materials_fee" = 0 AND "membershipworks_eventext"."materials_fee" IS NOT NULL)) THEN ("membershipworks_eventext"."materials_fee" * "membershipworks_eventtickettype"."cnt") WHEN "membershipworks_eventext"."materials_fee_included_in_price" IS NULL THEN NULL ELSE 0 END) * "membershipworks_eventext"."instructor_percentage") + CASE WHEN ("membershipworks_eventext"."materials_fee_included_in_price" OR ("membershipworks_eventext"."materials_fee" = 0 AND "membershipworks_eventext"."materials_fee" IS NOT NULL)) THEN ("membershipworks_eventext"."materials_fee" * "membershipworks_eventtickettype"."cnt") WHEN "membershipworks_eventext"."materials_fee_included_in_price" IS NULL THEN NULL ELSE 0 END)) AS "instructor_amount" FROM "membershipworks_eventtickettype" INNER JOIN "membershipworks_eventext" ON ("membershipworks_eventtickettype"."event_id" = "membershipworks_eventext"."event_ptr_id") INNER JOIN "membershipworks_event" ON ("membershipworks_eventext"."event_ptr_id" = "membershipworks_event"."eid") GROUP BY "membershipworks_eventtickettype"."event_id"', "membershipworks_eventticketaggregate", engine="django.db.backends.postgresql", ), reverse_code=django_db_views.migration_functions.BackwardViewMigration( "", "membershipworks_eventticketaggregate", engine="django.db.backends.postgresql", ), atomic=False, ), ]