Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add census submissions to contact rollups #20876

Merged
merged 4 commits into from
Feb 27, 2018
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
38 changes: 38 additions & 0 deletions lib/cdo/contact_rollups.rb
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ class ContactRollups

ROLE_TEACHER = "Teacher".freeze
ROLE_FORM_SUBMITTER = "Form Submitter".freeze
CENSUS_FORM_NAME = "Census".freeze

def self.build_contact_rollups
start = Time.now
Expand All @@ -120,6 +121,7 @@ def self.build_contact_rollups
insert_from_pegasus_forms
insert_from_dashboard_contacts
insert_from_dashboard_pd_enrollments
insert_from_dashboard_census_submissions
update_unsubscribe_info
update_roles
update_grades_taught
Expand All @@ -142,6 +144,7 @@ def self.build_contact_rollups

# Add contacts to the Teacher role based on form responses
update_teachers_from_forms
update_teachers_from_census_submissions

count = PEGASUS_REPORTING_DB_READER["select count(*) as cnt from #{PEGASUS_DB_NAME}.#{DEST_TABLE_NAME}"].first[:cnt]
log "Done. Total overall time: #{Time.now - start} seconds. #{count} records created in contact_rollups_daily table."
Expand Down Expand Up @@ -295,6 +298,24 @@ def self.insert_from_dashboard_pd_enrollments
log_completion(start)
end

def self.insert_from_dashboard_census_submissions
start = Time.now
log "Inserting contacts from dashboard.census_submissions"
PEGASUS_REPORTING_DB_WRITER.run "
INSERT INTO #{PEGASUS_DB_NAME}.#{DEST_TABLE_NAME} (email, name, roles, forms_submitted)
SELECT submitter_email_address, submitter_name, '#{ROLE_FORM_SUBMITTER}', '#{CENSUS_FORM_NAME}'
FROM #{DASHBOARD_DB_NAME}.census_submissions AS census_submissions
WHERE LENGTH(census_submissions.submitter_email_address) > 0
ON DUPLICATE KEY
UPDATE #{DEST_TABLE_NAME}.forms_submitted =
CASE LOCATE(values(forms_submitted), COALESCE(#{DEST_TABLE_NAME}.forms_submitted,''))
WHEN 0 THEN LEFT(CONCAT(COALESCE(CONCAT(#{DEST_TABLE_NAME}.forms_submitted, ','), ''),values(forms_submitted)),255)
ELSE #{DEST_TABLE_NAME}.forms_submitted
END"

log_completion(start)
end

def self.update_teachers_from_forms
start = Time.now
log "Updating teacher roles based on submitted forms"
Expand All @@ -313,6 +334,23 @@ def self.update_teachers_from_forms
log_completion(start)
end

def self.update_teachers_from_census_submissions
start = Time.now
log "Updating teacher roles based on census submissions"
PEGASUS_REPORTING_DB_WRITER.run "
UPDATE #{PEGASUS_DB_NAME}.#{DEST_TABLE_NAME}
INNER JOIN #{DASHBOARD_DB_NAME}.census_submissions on census_submissions.submitter_email_address = #{DEST_TABLE_NAME}.email
SET roles =
-- Use LOCATE to determine if this role is already present and CONCAT+COALESCE to add it if it is not.
CASE LOCATE('#{ROLE_TEACHER}', COALESCE(#{DEST_TABLE_NAME}.roles,''))
WHEN 0 THEN LEFT(CONCAT(COALESCE(CONCAT(#{DEST_TABLE_NAME}.roles, ','), ''),'#{ROLE_TEACHER}'),255)
ELSE #{DEST_TABLE_NAME}.roles
END
WHERE census_submissions.submitter_role = 'TEACHER'"

log_completion(start)
end

def self.update_unsubscribe_info
start = Time.now
log "Inserting contacts from pegasus.contacts"
Expand Down