Created
March 29, 2016 14:12
-
-
Save gruntruk/ebf091532d9b96e84531 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class WeeklyAuditJob < JobBase | |
def self.queue | |
JobBase::JOB_QUEUE_MISC | |
end | |
def initialize | |
@vertical_codes = Vertical.where(requires_payment: true).pluck(:code) | |
end | |
def perform | |
audit_report = generate_audit_report(users.to_a) | |
send_emails(audit_report) | |
end | |
def salesforce_api | |
@salesforce_api ||= SalesforceApi.new | |
end | |
private | |
def empty_report | |
{ :no_subscriptions => [], :no_stripe_tokens => [], :invalid_subscriptions => [] } | |
end | |
def generate_audit_report(user_collection) | |
user_collection.each_with_object(empty_report) do |user, report| | |
begin | |
populate_report_for_user!(report, user) | |
rescue Databasedotcom::SalesForceError | |
report[:invalid_subscriptions] << user | |
end | |
report | |
end | |
end | |
def populate_report_for_user(report, user) | |
contact = salesforce_api.find(:user, user.salesforce_id) | |
if user.subscription.nil? | |
report[:no_subscriptions] << user | |
elsif user.subscription && subscription.stripe_customer_token.blank? && !pays_by_check?(contact) | |
report[:no_stripe_tokens] << user | |
end | |
mark_as_pay_by_check(user) if pays_by_check?(contact) | |
end | |
def mark_as_pay_by_check(user, contact) | |
ensure_contact_renewal_date!(contact) | |
mark_subscription_as_pay_by_check!(user.subscription) | |
end | |
def pays_by_check?(contact) | |
contact["Pays_By_Check__c"] || contact["Group_Card_Payment__c"] | |
end | |
attr_accessor :vertical_codes | |
def users | |
User.unscoped.where(:build_status.ne => 6, | |
:vertical_code.in => vertical_codes, | |
:coupon.ne => "MMAPPEMPLOYEE", | |
:email => /(@(?!cardtapp\.com).*)$/i) | |
end | |
def ensure_contact_renewal_date!(contact) | |
return unless contact["Renewal_Check_Date__c"].blank? | |
contact["Renewal_Check_Date__c"] = contact["Sign_Up_Date__c"] + 1.year | |
contact.save | |
end | |
def mark_subscription_as_pay_by_check!(subscription, contact) | |
stripe_billing_info = subscription.stripe_billing_info | |
stripe_billing_info[:current_period_end] = contact["Renewal_Check_Date__c"].to_time.to_i | |
stripe_billing_info[:interval] = "year" | |
stripe_billing_info[:interval_count] = 1 | |
subscription.update_attributes(stripe_customer_token: Subscription::CHECK_STRIPE_TOKEN, | |
stripe_billing_info: stripe_billing_info) | |
end | |
def send_emails(audit_report) | |
mail_error = send_mail(:invalid_stripe_subscriptions, audit_report[:invalid_subscriptions]) | |
mail_error ||= send_mail(:no_stripe_subscriptions, audit_report[:no_stripe_tokens]) | |
mail_error ||= send_mail(:no_subscriptions, audit_report[:no_subscriptions]) | |
raise mail_error if mail_error | |
end | |
def send_mail(mail_function, subscriptions_array) | |
begin | |
SystemMailer.public_send(mail_function, subscriptions_array, vertical_codes).deliver! | |
rescue StandardError => e | |
Honeybadger.notify(e, context: { mail_function: mail_function }) | |
return e | |
end | |
nil | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment