magfest / ubersystem

MAGFest's Ubersystem - handles ticketing, staffing, analytics, volunteers, and tons more
http://magfest.org
GNU Affero General Public License v3.0
48 stars 55 forks source link

As a TechOps/Reg Staffer, I'd like to know how many attendees register using Public Reg Stations #2979

Open rscullin opened 6 years ago

rscullin commented 6 years ago

Both TechOps and Reg would like to keep track of how many attendees register for MAGFest at event using the Public Registration Kiosks, so that we can better plan how many stations are needed in the future. Additionally, we would like to be able to view this number though Uber. Daily breakdowns would be a nice-to-have.

TechOps can configure the Kiosks to point to a special reg page, the reg page with a query string (like ?publicreg=true), or anything else.

thaeli commented 6 years ago

Are public reg stations different from the normal self-registration kiosks? If they are the same, that's already a separate URL we can track.

RobRuana commented 6 years ago

This is totally doable, would be pretty easy. I won't have time to get to it until late December, if at all. Pull requests welcome though!

earl7399 commented 6 years ago

Not sure anything needs coding if web-based reg is a different URL from self-reg kiosks

-- Bob Earl r.a.earl@gmail.com FAX: +1 440 919 5086

On Fri, Nov 24, 2017 at 1:16 PM, Rob Ruana notifications@github.com wrote:

This is totally doable, would be pretty easy. I won't have time to get to it until late December, if at all. Pull requests welcome though!

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/magfest/ubersystem/issues/2979#issuecomment-346879071, or mute the thread https://github.com/notifications/unsubscribe-auth/AIXSFTH8H1TJwauVkFSm9mu171x971hrks5s5wgWgaJpZM4QqAGV .

rscullin commented 6 years ago

@thaeli Same thing, different name.

@earl7399 Do we have any way of viewing stats from previous years of self-reg vs pre-reg/online reg?

earl7399 commented 6 years ago

I'd assume the Eli would know the answer, but also assume that without weblogs, nope. Hmmm. Is there an existing field in the Attendee db that could hold the info? I don't recall seeing any useful diagrams, can't find models.py in the main repo, and everything I look at is full of stuff I cannot parse.

-- Bob Earl r.a.earl@gmail.com FAX: +1 440 919 5086

On Fri, Nov 24, 2017 at 3:42 PM, Robert Scullin notifications@github.com wrote:

@thaeli https://github.com/thaeli Same thing, different name.

@earl7399 https://github.com/earl7399 Do we have any way of viewing stats from previous years of self-reg vs pre-reg/online reg?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/magfest/ubersystem/issues/2979#issuecomment-346893823, or mute the thread https://github.com/notifications/unsubscribe-auth/AIXSFc3BbcIJoEf-2dqzgLE0b-zJzlluks5s5yoYgaJpZM4QqAGV .

RobRuana commented 6 years ago

@earl7399 models.py was refactored under the models directory! You can find the Attendee class under models/attendee.py 😄

earl7399 commented 6 years ago

Hence my comment about being unable to parse. So we don't actually have anything like a simple diagram / list of fields and their uses?

-- Bob Earl r.a.earl@gmail.com FAX: +1 440 919 5086

On Fri, Nov 24, 2017 at 5:35 PM, Rob Ruana notifications@github.com wrote:

@earl7399 https://github.com/earl7399 models.py was refactored under the models directory! You can find the Attendee class under models/attendee.py 😄

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/magfest/ubersystem/issues/2979#issuecomment-346902912, or mute the thread https://github.com/notifications/unsubscribe-auth/AIXSFSrZL03R8cmaa6iuxqhBwY_ewlmWks5s50S-gaJpZM4QqAGV .

RobRuana commented 6 years ago

😬

RobRuana commented 6 years ago

I don't know why I didn't think of looking at the DB table directly:

                                      Table "public.attendee"
        Column        |            Type             |                   Modifiers                   
----------------------+-----------------------------+-----------------------------------------------
 address1             | character varying           | not null default ''::character varying
 address2             | character varying           | not null default ''::character varying
 admin_notes          | character varying           | not null default ''::character varying
 affiliate            | character varying           | not null default ''::character varying
 age_group            | integer                     | default 178244408
 amount_extra         | integer                     | not null default 0
 amount_paid          | integer                     | not null default 0
 amount_refunded      | integer                     | not null default 0
 badge_num            | integer                     | 
 badge_printed_name   | character varying           | not null default ''::character varying
 badge_status         | integer                     | not null default 163076611
 badge_type           | integer                     | not null default 51352218
 base_badge_price     | integer                     | not null default 0
 birthdate            | date                        | 
 can_spam             | boolean                     | not null default false
 can_work_setup       | boolean                     | not null default false
 can_work_teardown    | boolean                     | not null default false
 cellphone            | character varying           | not null default ''::character varying
 checked_in           | timestamp without time zone | 
 city                 | character varying           | not null default ''::character varying
 comments             | character varying           | not null default ''::character varying
 confirmed            | timestamp without time zone | 
 country              | character varying           | not null default ''::character varying
 ec_name              | character varying           | not null default ''::character varying
 ec_phone             | character varying           | not null default ''::character varying
 email                | character varying           | not null default ''::character varying
 extra_donation       | integer                     | not null default 0
 extra_merch          | character varying           | not null default ''::character varying
 first_name           | character varying           | not null default ''::character varying
 for_review           | character varying           | not null default ''::character varying
 found_how            | character varying           | not null default ''::character varying
 got_merch            | boolean                     | not null default false
 group_id             | uuid                        | 
 hotel_eligible       | boolean                     | not null default false
 hotel_pin            | character varying           | 
 id                   | uuid                        | not null
 interests            | character varying           | not null default ''::character varying
 international        | boolean                     | not null default false
 last_name            | character varying           | not null default ''::character varying
 legal_name           | character varying           | not null default ''::character varying
 no_cellphone         | boolean                     | not null default false
 nonshift_hours       | integer                     | not null default 0
 overridden_price     | integer                     | 
 paid                 | integer                     | not null default 121378471
 past_years           | character varying           | not null default ''::character varying
 payment_method       | integer                     | 
 placeholder          | boolean                     | not null default false
 promo_code_id        | uuid                        | 
 public_id            | uuid                        | not null
 reg_station          | integer                     | 
 regdesk_info         | character varying           | not null default ''::character varying
 region               | character varying           | not null default ''::character varying
 registered           | timestamp without time zone | not null default timezone('utc'::text, now())
 requested_hotel_info | boolean                     | not null default false
 ribbon               | character varying           | not null default ''::character varying
 second_shirt         | integer                     | not null default 194196342
 shirt                | integer                     | not null default 0
 staffing             | boolean                     | not null default false
 watchlist_id         | uuid                        | 
 zip_code             | character varying           | not null default ''::character varying
earl7399 commented 6 years ago

This looks like an alpha-sorted list comparable to the non-sorted list I pulled from the attendees.py and posted in #devops.

It looks like there are no extra fields (as I expected).

Since adding a field is pretty trivial at this point (thanks, Rob!), that's not a show-stopper.

What may be one is that I had a brief discussion with @kitsuta and it seems that while at Fest, the normal pre-reg URL gets redirected to the at-Fest URL. So we won't be able to differentiate based on URL. She suggested that anyone who uses an At-Door station to pre-reg would then be able to share whatever URL they saw there, so a parameter intended to indicate that might end up out in the real world.

If we're trying to track At-Door-station regs vs Internet-based regs, can we use the IP to determine which is which? We'll control the IP for the stations, so we could use a lookup table to determine what to put in "pre-reg_from" field ... "Internet" vs "At Door". Maybe even have some other options to flesh that out ... "Imported", "MIVS", "Guest", "Dealer", etc.

How does something like this sound?

-- Bob Earl r.a.earl@gmail.com FAX: +1 440 919 5086

On Fri, Nov 24, 2017 at 7:39 PM, Rob Ruana notifications@github.com wrote:

I don't know why I didn't think of looking at the DB table directly:

                                  Table "public.attendee"
    Column        |            Type             |                   Modifiers

----------------------+-----------------------------+----------------------------------------------- address1 | character varying | not null default ''::character varying address2 | character varying | not null default ''::character varying admin_notes | character varying | not null default ''::character varying affiliate | character varying | not null default ''::character varying age_group | integer | default 178244408 amount_extra | integer | not null default 0 amount_paid | integer | not null default 0 amount_refunded | integer | not null default 0 badge_num | integer | badge_printed_name | character varying | not null default ''::character varying badge_status | integer | not null default 163076611 badge_type | integer | not null default 51352218 base_badge_price | integer | not null default 0 birthdate | date | can_spam | boolean | not null default false can_work_setup | boolean | not null default false can_work_teardown | boolean | not null default false cellphone | character varying | not null default ''::character varying checked_in | timestamp without time zone | city | character varying | not null default ''::character varying comments | character varying | not null default ''::character varying confirmed | timestamp without time zone | country | character varying | not null default ''::character varying ec_name | character varying | not null default ''::character varying ec_phone | character varying | not null default ''::character varying email | character varying | not null default ''::character varying extra_donation | integer | not null default 0 extra_merch | character varying | not null default ''::character varying first_name | character varying | not null default ''::character varying for_review | character varying | not null default ''::character varying found_how | character varying | not null default ''::character varying got_merch | boolean | not null default false group_id | uuid | hotel_eligible | boolean | not null default false hotel_pin | character varying | id | uuid | not null interests | character varying | not null default ''::character varying international | boolean | not null default false last_name | character varying | not null default ''::character varying legal_name | character varying | not null default ''::character varying no_cellphone | boolean | not null default false nonshift_hours | integer | not null default 0 overridden_price | integer | paid | integer | not null default 121378471 past_years | character varying | not null default ''::character varying payment_method | integer | placeholder | boolean | not null default false promo_code_id | uuid | public_id | uuid | not null reg_station | integer | regdesk_info | character varying | not null default ''::character varying region | character varying | not null default ''::character varying registered | timestamp without time zone | not null default timezone('utc'::text, now()) requested_hotel_info | boolean | not null default false ribbon | character varying | not null default ''::character varying second_shirt | integer | not null default 194196342 shirt | integer | not null default 0 staffing | boolean | not null default false watchlist_id | uuid | zip_code | character varying | not null default ''::character varying

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/magfest/ubersystem/issues/2979#issuecomment-346909521, or mute the thread https://github.com/notifications/unsubscribe-auth/AIXSFd12d6DiplRqmX7y8xwvjD2CluGWks5s52HPgaJpZM4QqAGV .

RobRuana commented 6 years ago

Oh, capturing the IP address is a great idea! And it could be used for a lot of other things in addition to determining at-door vs internet registrations!

earl7399 commented 6 years ago

Okay, I'll see if I can poke at this a bit over the next week.

From what little I know, I'll need to modify the pages that update the attendee DB and the attendee.py.

My default thought would be a DB table to hold "known internal IPs" and maybe a webpage to interface with that. Or would you rather I just go with a hardcoded string somewhere? If we go that way can we update it w/out restarting RAMS to re-read it?

-- Bob Earl r.a.earl@gmail.com FAX: +1 440 919 5086

On Sat, Nov 25, 2017 at 4:52 PM, Rob Ruana notifications@github.com wrote:

Oh, capturing the IP address is a great idea! And it could be used for a lot of other things in addition to determining at-door vs internet registrations!

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/magfest/ubersystem/issues/2979#issuecomment-346968588, or mute the thread https://github.com/notifications/unsubscribe-auth/AIXSFamboc0PHShONnNj02EspLjxw6AOks5s6IwpgaJpZM4QqAGV .

RobRuana commented 6 years ago

We can probably start just by capturing the ip in a column like registered_from_ip or something (I'm not too particular about the name). As long as we're capturing the data, we can always go back and analyze it later against known ips (we'll just be sure to record the ips of our kiosk machines).

RobRuana commented 6 years ago

Also, I think you can get the ip address like so:

cherrypy.request.headers.get('X-Real-IP')

I believe that will get the originating ip address of the request. Someone correct me if I'm wrong 😅

RobRuana commented 6 years ago

My mistake, I originally said to use 'Remote-Addr' but I think the correct header is 'X-Real-IP'