~singpolyma/jmp-pay

ca8e6746719dc93498189232a334f573770a2d05 — Stephen Paul Weber 9 months ago abb452a + bf64ce8
Merge branch 'fix-months-to-balance'

* fix-months-to-balance:
  Not going to run this, new plan
  Give everyone $5.0001 to prevent low balance and eat one month
  Make days correct
1 files changed, 0 insertions(+), 37 deletions(-)

D bin/months_to_balance
D bin/months_to_balance => bin/months_to_balance +0 -37
@@ 1,37 0,0 @@
#!/usr/bin/ruby
# frozen_string_literal: true

# This is meant to be a one-time script that takes any "extra"
# months an account is activated for and rolls them back into balance instead
# Mostly as a fix for all the time that web activation spent not setting balance

require "pg"

DB = PG.connect(dbname: "jmp")
DB.type_map_for_results = PG::BasicTypeMapForResults.new(DB)
DB.type_map_for_queries = PG::BasicTypeMapForQueries.new(DB)

rows = DB.query(<<~SQL)
	SELECT customer_id, expires_at,
		((((DATE_PART('year', expires_at) - DATE_PART('year', LOCALTIMESTAMP)) * 12 +
		(DATE_PART('month', expires_at) - DATE_PART('month', LOCALTIMESTAMP))) - 1) *
			case plan_name
			when 'usd_beta_unlimited-v20210223' then 2.99
			when 'cad_beta_unlimited-v20210223' then 3.59
			end)::NUMERIC(12,4) AS amount
	FROM customer_plans WHERE expires_at > (DATE_TRUNC('month', LOCALTIMESTAMP) + '2 months') ORDER BY expires_at;
SQL

rows.each do |r|
	cid = r["customer_id"]
	DB.transaction do
		DB.exec(<<~SQL, [cid, "#{cid}-months_to_balance", r["amount"]])
			INSERT INTO transactions (customer_id, transaction_id, amount, note)
			VALUES ($1, $2, $3, 'months_to_balance')
		SQL
		DB.exec(<<~SQL, [cid, r["expires_at"]])
			UPDATE plan_log SET date_range = date_range - tsrange(LOCALTIMESTAMP + '1 month', UPPER(date_range))
			WHERE customer_id=$1 AND UPPER(date_range)=$2
		SQL
	end
end