Advertisement
Guest User

Untitled

a guest
Apr 10th, 2016
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.86 KB | None | 0 0
  1. def self.create_csv
  2. db = Rails.application.config.database_configuration[Rails.env]
  3. db = db['reporting'] if Rails.env == 'production'
  4.  
  5. username = db["username"]
  6. host = db["host"]
  7. database = db["database"]
  8. password = db["password"]
  9. port = db["port"]
  10. all_active_newsletters = Newsletter.where('display = 1 AND exacttarget_pref_name IS NOT NULL')
  11. newsletter_queries = ""
  12. if all_active_newsletters.present?
  13. all_active_newsletters.each do |letter|
  14. if letter.has_options
  15. # The types of newsletters that have options in user's subscriptions: 'All', 'Weekly', 'Monthly', whatever free text, etc. as long as it is not NULL.
  16. newsletter_queries << "(SELECT newsletter_subscriptions.options
  17. FROM newsletter_subscriptions
  18. LEFT JOIN newsletters ON newsletter_subscriptions.newsletter_id = newsletters.id
  19. WHERE newsletter_subscriptions.user_id = users.id AND newsletters.exacttarget_pref_name = '#{letter.exacttarget_pref_name}') AS '#{letter.exacttarget_pref_name}',"
  20. else
  21. # The types of newsletters that do not have options in user's subscriptions; a user either subscribes or does not subscribe.
  22. newsletter_queries << "(SELECT (case when COUNT(newsletter_subscriptions.id) > 0 then 'True' else 'False' end)
  23. FROM newsletter_subscriptions
  24. LEFT JOIN newsletters ON newsletter_subscriptions.newsletter_id = newsletters.id
  25. WHERE newsletter_subscriptions.user_id = users.id AND newsletters.exacttarget_pref_name = '#{letter.exacttarget_pref_name}') AS '#{letter.exacttarget_pref_name}',"
  26. end
  27. end
  28. end
  29.  
  30.  
  31. (0..85).each do |loop_number|
  32. subscriber_postfix = ExactTargetSubscriber.postfix
  33. sql_query = "
  34. SELECT SUBSTRING(TRIM(REPLACE(users.first_name,',',' ')) FROM 1 FOR 50) AS 'FirstName',
  35. SUBSTRING(TRIM(REPLACE(users.last_name,',',' ')) FROM 1 FOR 50) AS 'LastName',
  36. users.id AS UserId,
  37. users.created_at AS 'SignUpDate',
  38. users.cancelled_membership_at AS 'MembershipCancelledDate'," +
  39. newsletter_queries +
  40. "
  41. (SELECT concat(exact_target_subscribers.id, '_#{subscriber_postfix}')
  42. FROM exact_target_subscribers
  43. WHERE subscriber_id=users.id AND subscriber_type='User') as SubscriberKey,
  44. (SELECT (case when COUNT(fraud_user_accounts.id) > 0 then 'True' else 'False' end)
  45. FROM fraud_user_accounts
  46. WHERE fraud_user_accounts.user_id=users.id AND fraud_user_accounts.state='confirmed') as Fraudulent,
  47. (SELECT count(orders.id)
  48. FROM orders
  49. WHERE orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered')
  50. AND orders.user_id=users.id) as NumberOfOrders,
  51. (SELECT count(orders.id)
  52. FROM orders
  53. WHERE orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered') AND orders.order_classification IN (0,1,7,8,10) AND orders.user_id=users.id) AS NumberOfSubscriptions,
  54. (SELECT (case when MIN(orders.user_selected_ship_date) is not null then 'True' else 'False' end)
  55. FROM orders
  56. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  57. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  58. WHERE orders.state='start_order' AND orders.order_classification IN (0,1,7,8,10) AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.sku='0001') AS 'HasDiapersSubscription',
  59. (SELECT MIN(orders.user_selected_ship_date)
  60. FROM orders
  61. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  62. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  63. WHERE orders.state='start_order' AND orders.order_classification IN (0,1,7,8,10) AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.sku='0001') AS 'NextDiaperShipment',
  64. (SELECT (case when MIN(orders.user_selected_ship_date) is not null then 'True' else 'False' end)
  65. FROM orders
  66. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  67. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  68. WHERE orders.state='start_order' AND orders.order_classification IN (0,1,7,8,10) AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.sku='0002') AS 'HasEssentialsSubscription',
  69. (SELECT MIN(orders.user_selected_ship_date)
  70. FROM orders
  71. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  72. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  73. WHERE orders.state='start_order' AND orders.order_classification IN (0,1,7,8,10) AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.sku='0002') AS 'NextEssentialsShipment',
  74. (SELECT (case when MIN(orders.user_selected_ship_date) is not null then 'True' else 'False' end)
  75. FROM orders
  76. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  77. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  78. WHERE orders.state='start_order' AND orders.order_classification IN (0,1,7,8,10) AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.sku='0003') AS 'HasHWSubscription',
  79. (SELECT MIN(orders.user_selected_ship_date)
  80. FROM orders
  81. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  82. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  83. WHERE orders.state='start_order' AND orders.order_classification IN (0,1,7,8,10) AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.sku='0003') AS 'NextHWShipment',
  84. (SELECT (case when MIN(orders.user_selected_ship_date) is not null then 'True' else 'False' end)
  85. FROM orders
  86. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  87. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  88. WHERE orders.state='start_order' AND orders.order_classification IN (0,1,7,8,10) AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.sku='0004') AS 'HasFeedingSubscription',
  89. (SELECT MIN(orders.user_selected_ship_date)
  90. FROM orders
  91. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  92. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  93. WHERE orders.state='start_order' AND orders.order_classification IN (0,1,7,8,10) AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.sku='0004') AS 'NextFeedingShipment',
  94. (SELECT (case when COUNT(orders.id) > 0 then 'True' else 'False' end)
  95. FROM orders
  96. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  97. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  98. WHERE orders.order_classification = 2
  99. AND orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered')
  100. AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.product_id=19) AS 'DiapersTrial',
  101. (SELECT local_date(max(order_state_transitions.created_at))
  102. FROM orders
  103. JOIN order_state_transitions on (orders.id=order_state_transitions.order_id and order_state_transitions.event='start_vanity')
  104. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  105. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  106. WHERE orders.order_classification = 2
  107. AND orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered')
  108. AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.product_id=19
  109. GROUP BY orders.user_id) AS 'DiapersTrialDate',
  110. (SELECT (case when COUNT(orders.id) > 0 then 'True' else 'False' end)
  111. FROM orders
  112. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  113. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  114. WHERE orders.order_classification = 2
  115. AND orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered')
  116. AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.product_id=16) AS 'EssentialsTrial',
  117. (SELECT local_date(max(order_state_transitions.created_at))
  118. FROM orders
  119. JOIN order_state_transitions on (orders.id=order_state_transitions.order_id and order_state_transitions.event='start_vanity')
  120. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  121. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  122. WHERE orders.order_classification = 2
  123. AND orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered')
  124. AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.product_id=16
  125. GROUP BY orders.user_id) AS 'EssentialsTrialDate',
  126. (SELECT (case when COUNT(orders.id) > 0 then 'True' else 'False' end)
  127. FROM orders
  128. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  129. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  130. WHERE orders.order_classification = 2
  131. AND orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered')
  132. AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.product_id=84) AS 'HWTrial',
  133. (SELECT local_date(max(order_state_transitions.created_at))
  134. FROM orders
  135. JOIN order_state_transitions on (orders.id=order_state_transitions.order_id and order_state_transitions.event='start_vanity')
  136. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  137. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  138. WHERE orders.order_classification = 2
  139. AND orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered')
  140. AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.product_id=84
  141. GROUP BY orders.user_id) AS 'HWTrialDate',
  142. (SELECT (case when COUNT(orders.id) > 0 then 'True' else 'False' end)
  143. FROM orders
  144. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  145. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  146. WHERE orders.order_classification = 2
  147. AND orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered')
  148. AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.product_id=206) AS 'FeedingTrial',
  149. (SELECT local_date(max(order_state_transitions.created_at))
  150. FROM orders
  151. JOIN order_state_transitions on (orders.id=order_state_transitions.order_id and order_state_transitions.event='start_vanity')
  152. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  153. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  154. WHERE orders.order_classification = 2
  155. AND orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered')
  156. AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.product_id=206
  157. GROUP BY orders.user_id) AS 'FeedingTrialDate',
  158. (SELECT count(orders.id)
  159. FROM orders
  160. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  161. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  162. WHERE orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered') AND orders.order_classification IN (0,1,7,8,10) AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.sku='0001') AS 'DiapersSubscriptionOrders',
  163. (SELECT count(orders.id)
  164. FROM orders
  165. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  166. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  167. WHERE orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered') AND orders.order_classification IN (0,1,7,8,10) AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.sku='0002') AS 'EssentialsSubscriptionOrders',
  168. (SELECT count(orders.id)
  169. FROM orders
  170. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  171. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  172. WHERE orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered') AND orders.order_classification IN (0,1,7,8,10) AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.sku='0003') AS 'HWSubscriptionOrders',
  173. (SELECT count(orders.id)
  174. FROM orders
  175. LEFT OUTER JOIN line_items ON line_items.itemizable_id=orders.id
  176. LEFT OUTER JOIN variants ON line_items.variant_id=variants.id
  177. WHERE orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered') AND orders.order_classification IN (0,1,7,8,10) AND orders.user_id=users.id AND line_items.itemizable_type='Order' AND variants.sku='0004') AS 'FeedingSubscriptionOrders',
  178. (SELECT (case when user_trans.subscription like '%Diaper%' then null else max(end_date) end)
  179. from subscriptions_plus_minus
  180. join user_trans on (subscriptions_plus_minus.user_id=user_trans.user_id
  181. and product_type='Diaper Bundle')
  182. where user_trans.user_id=users.id
  183. ) 'DiaperCancelDate',
  184. (SELECT (case when user_trans.subscription like '%Essentials%' then null else max(end_date) end)
  185. from subscriptions_plus_minus
  186. join user_trans on (subscriptions_plus_minus.user_id=user_trans.user_id
  187. and product_type='Essentials Bundle')
  188. where user_trans.user_id=users.id
  189. ) 'EssentialsCancelDate',
  190. (SELECT (case when user_trans.subscription like '%H&W%' then null else max(end_date) end)
  191. from subscriptions_plus_minus
  192. join user_trans on (subscriptions_plus_minus.user_id=user_trans.user_id
  193. and product_type='H&W Bundle')
  194. where user_trans.user_id=users.id
  195. ) 'HWCancelDate',
  196. (SELECT (case when user_trans.subscription like '%Feeding%' then null else max(end_date) end)
  197. from subscriptions_plus_minus
  198. join user_trans on (subscriptions_plus_minus.user_id=user_trans.user_id
  199. and product_type='Feeding Bundle')
  200. where user_trans.user_id=users.id
  201. ) 'FeedingCancelDate',
  202. (SELECT MAX(date_sub(orders.created_at,interval 8 hour))
  203. FROM orders
  204. WHERE orders.order_classification IN (5,9) and orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered') AND orders.user_id=users.id) AS 'LastStorePurchase',
  205. (SELECT count(orders.id)
  206. FROM orders
  207. WHERE orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered') AND orders.order_classification IN (5,9) AND orders.user_id=users.id) AS 'ShopOrders',
  208. (SELECT count(orders.id)
  209. FROM orders
  210. WHERE orders.state in ('charged','staged','pick_started','restaged','vanity_started','shipped','delivered') AND orders.order_classification IN (6, 14, 15) AND orders.user_id=users.id) AS 'GiftOrders',
  211. (select count(distinct id) from test.order_product dr1
  212. where dr1.user_id=users.id and product_id =1
  213. group by bundle_id) 'PurchasedDiaperProducts',
  214. (select max(order_date) from test.order_product
  215. dr1 where dr1.user_id=users.id and product_id =1
  216. group by user_id) 'LastDatePurchasedDiaperProducts',
  217. (select count(distinct id) from test.order_product
  218. where test.order_product.user_id=users.id and bundle_id=21) 'PurchasedEssentialsProducts',
  219. (select max(order_date) from test.order_product
  220. dr1 where dr1.user_id=users.id and bundle_id=21
  221. group by user_id) 'LastDatePurchasedEssentialsProducts',
  222. (select count(distinct id) from test.order_product
  223. where test.order_product.user_id=users.id and bundle_id=73) 'PurchasedHWProducts',
  224. (select max(order_date) from test.order_product
  225. dr1 where dr1.user_id=users.id and bundle_id=73
  226. group by user_id) 'LastDatePurchasedHWProducts',
  227. (select count(distinct id) from test.order_product
  228. where test.order_product.user_id=users.id and bundle_id=201) 'PurchasedFeedingProducts',
  229. (select max(order_date) from test.order_product
  230. dr1 where dr1.user_id=users.id and bundle_id=201
  231. group by user_id) 'LastDatePurchasedFeedingProducts',
  232. (SELECT count(*) FROM line_items join test.max_shop_order dr1 on (line_items.itemizable_id=dr1.id)
  233. join variants on (line_items.variant_id=variants.id and product_id=1)
  234. left join bundle_add_ons on (variants.id=bundle_add_ons.variant_id) where dr1.user_id=users.id
  235. ) as 'LastShopOrderDiaperProduct',
  236. (SELECT count(*) FROM line_items join test.max_shop_order dr1 on (line_items.itemizable_id=dr1.id)
  237. join variants on (line_items.variant_id=variants.id)
  238. join bundle_add_ons on (variants.id=bundle_add_ons.variant_id and bundle_id=21) where dr1.user_id=users.id
  239. ) as 'LastShopOrderEssentialsProduct',
  240. (SELECT count(*) FROM line_items join test.max_shop_order dr1 on (line_items.itemizable_id=dr1.id)
  241. join variants on (line_items.variant_id=variants.id)
  242. join bundle_add_ons on (variants.id=bundle_add_ons.variant_id and bundle_id=73) where dr1.user_id=users.id
  243. ) as 'LastShopOrderHWProduct',
  244. (SELECT count(*) FROM line_items join test.max_shop_order dr1 on (line_items.itemizable_id=dr1.id)
  245. join variants on (line_items.variant_id=variants.id)
  246. join bundle_add_ons on (variants.id=bundle_add_ons.variant_id and bundle_id=201) where dr1.user_id=users.id
  247. ) as 'LastShopOrderFeedingProduct',
  248. (SELECT max(date_sub(orders.updated_at,interval 8 hour))
  249. FROM orders
  250. WHERE orders.state IN ('cart') AND DATE(orders.updated_at + INTERVAL 2 DAY) < NOW() AND orders.user_id=users.id) AS 'LastCartAbandonDate',
  251. (SELECT referrals.m_id FROM referrals WHERE referrals.user_id=users.id and referrals.campaign IS NULL) AS 'MID',
  252. (SELECT referrals.a_id FROM referrals WHERE referrals.user_id=users.id and referrals.campaign IS NULL) AS 'AID',
  253. date_sub(users.current_sign_in_at,interval 8 hour) 'LastSignIn',
  254. users.email AS 'EmailAddress',
  255. (CASE WHEN EXISTS(SELECT NULL FROM user_tracked_fields
  256. WHERE user_tracked_fields.app_platform='ios'
  257. AND user_tracked_fields.business_unit_id = #{BusinessUnit.honest.id}
  258. AND user_tracked_fields.user_id = users.id)
  259. THEN 'True' ELSE 'False' END) AS 'HonestApp'," +
  260. # we don't yet have LastAppUsedDate data so this is just a placeholder column
  261. "(SELECT NULL) AS 'LastAppUsedDate'
  262. FROM users WHERE user_id >= #{loop_number * 100000} AND user_id < #{(loop_number + 1) * 100000};"
  263.  
  264. mysql_login = "mysql -u #{username} -h #{host} -P #{port} --password=#{password} #{database}"
  265. temp_file = "/tmp/exacttarget_#{Rails.env}.txt"
  266. csv_file_name = "/tmp/initial_export_#{loop_number}.csv"
  267.  
  268. #%x[echo "call get_users_changed()" | #{mysql_login}]
  269. %x[echo "#{sql_query}" | #{mysql_login} > #{temp_file}]
  270. %x[sed -e 's/"/''''/g' -e 's/\t/","/g;s/^/"/;s/$/"/' -e 's/"NULL"//g' #{temp_file} > #{csv_file_name}]
  271. end
  272.  
  273. csv_file_name
  274. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement