gitlab_support_readiness 1.0.25 → 1.0.26

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4ab21d2be7f89338471a03f2646613b3b7f173bb687dde03e7bb925d11c28d35
4
- data.tar.gz: ba65dee2b2278ab90ddcb2d20ee6e20332b66c3aea28f72f1e552230b8037da4
3
+ metadata.gz: 322f32c5b1347111c6546cab83120538806148efd451f5d6b406abf2bd100110
4
+ data.tar.gz: fe095b0303f8385f9e2716789fec729cf7102a45687b55876012e26f535b8649
5
5
  SHA512:
6
- metadata.gz: e7d8737d99bf51afcfd919103a5d0d6a52aa8199a34a073f006c23e142f9a5e325e56e462c6adc82da4bb84d30d4379239fc744b47a628acae6a45b38b545704
7
- data.tar.gz: 8248245a1bc184d33b794d88451c3395a1760bdda62cd4f4568afd971bb9cc812a3d9c04cbca2b4eca5ab522744a2e09afa62b31f9966ddde29ff265c449aa9c
6
+ metadata.gz: e2971c436d14b76a4718af776e07492e9ddb8d69c1d2435b2e2a41a365b2cbe7f735ce5de018b34911e576939db1739d343f981f6ba5e62d2fa87941245b8e9a
7
+ data.tar.gz: 24f4f50ebaa586a78feb5effb0e415bf4f6786ef01fe695df2b5044b3a3e08d94cc65a2cf36cf7ec09974aa1ad9de830030901c3fbfceaff4ef29a08588d807f
@@ -74,6 +74,359 @@ module Readiness
74
74
  false
75
75
  end
76
76
 
77
+ ##
78
+ # Return an Array of accounts from Salesforce for Global support
79
+ #
80
+ # @author Jason Colyer
81
+ # @since 1.0.26
82
+ # @param client [Object] An instance of {Readiness::Salesforce::Client}
83
+ # @return [Array]
84
+ # @example
85
+ # config = Readiness::Salesforce::Configuration.new
86
+ # config.api_version = '58.0'
87
+ # config.client_id = ENV.fetch('SFDC_CLIENTID')
88
+ # config.client_secret = ENV.fetch('SFDC_CLIENTSECRET')
89
+ # config.password = ENV.fetch('SFDC_PASSWORD')
90
+ # config.security_token = ENV.fetch('SFDC_SECURITYTOKEN')
91
+ # config.username = ENV.fetch('SFDC_USERNAME')
92
+ # client = Readiness::Salesforce::Client.new(config)
93
+ # accounts = Readiness::Salesforce::Accounts.global_accounts(client)
94
+ # pp accounts.count
95
+ # # => 51234
96
+ def self.global_accounts(client)
97
+ query = Queries.new(global_sync_query_string)
98
+ results = Queries.run!(client, query)
99
+ results.map { |r| global_sync_object(r) }
100
+ end
101
+
102
+ ##
103
+ # Return an Array of accounts from Salesforce for US Government support
104
+ #
105
+ # @author Jason Colyer
106
+ # @since 1.0.26
107
+ # @param client [Object] An instance of {Readiness::Salesforce::Client}
108
+ # @return [Array]
109
+ # @example
110
+ # config = Readiness::Salesforce::Configuration.new
111
+ # config.api_version = '58.0'
112
+ # config.client_id = ENV.fetch('SFDC_CLIENTID')
113
+ # config.client_secret = ENV.fetch('SFDC_CLIENTSECRET')
114
+ # config.password = ENV.fetch('SFDC_PASSWORD')
115
+ # config.security_token = ENV.fetch('SFDC_SECURITYTOKEN')
116
+ # config.username = ENV.fetch('SFDC_USERNAME')
117
+ # client = Readiness::Salesforce::Client.new(config)
118
+ # accounts = Readiness::Salesforce::Accounts.usgov_accounts(client)
119
+ # pp accounts.count
120
+ # # => 7125
121
+ def self.usgov_accounts(client)
122
+ query = Queries.new(usgov_sync_query_string)
123
+ results = Queries.run!(client, query)
124
+ results.map { |r| usgov_sync_object(r) }
125
+ end
126
+
127
+ ##
128
+ # Return a Hash used for the account sync for Global support
129
+ #
130
+ # @author Jason Colyer
131
+ # @since 1.0.26
132
+ def self.global_sync_object(account)
133
+ subscriptions = account_subscriptions(account)
134
+ expiration = account_expiration(account)
135
+ type = account_type(account, expiration)
136
+ partner = %w[alliance_partner open_partner select_partner].include?(type)
137
+ {
138
+ "name" => "#{Digest::SHA1.hexdigest(account.Account_ID_18__c)[0..7]} #{account.Name}",
139
+ "salesforce_id" => account.Account_ID_18__c,
140
+ "sfdc_short_id" => account.Account_ID_18__c[..-4],
141
+ "support_level" => (partner ? 'ultimate' : global_highest_support_level(subscriptions)),
142
+ "aar" => account_arr(account).to_f,
143
+ "sales_segmentation" => account_market_segment(account),
144
+ "account_owner" => account.Account_Owner_Calc__c,
145
+ "type" => type,
146
+ "technical_account_manager" => account.Technical_Account_Manager_Name__c,
147
+ "solutions_architect" => account.Solutions_Architect_Lookup__r&.Name,
148
+ "seats_decimal" => account_seats(account).to_f,
149
+ "org_region" => account_region(account),
150
+ "health_score" => account_health_score(account),
151
+ "expiration_date" => expiration,
152
+ "restricted_account" => (account.Restricted_Account__c == 'Restricted Party'),
153
+ "greatly_expired" => (partner ? false : Date.parse(expiration) <= Date.today.years_ago(3)),
154
+ "sub_consumption_ai" => subscriptions.include?('sub_consumption_ai'),
155
+ "sub_consumption_cicd_minutes" => subscriptions.include?('sub_consumption_cicd_minutes'),
156
+ "sub_consumption_eap" => subscriptions.include?('sub_consumption_eap'),
157
+ "sub_consumption_storage" => subscriptions.include?('sub_consumption_storage'),
158
+ "sub_proserv" => subscriptions.include?('sub_proserv'),
159
+ "sub_dotcom_premium" => subscriptions.include?('sub_dotcom_premium'),
160
+ "sub_dotcom_ultimate" => subscriptions.include?('sub_dotcom_ultimate'),
161
+ "sub_sm_starter" => subscriptions.include?('sub_sm_starter'),
162
+ "sub_sm_premium" => subscriptions.include?('sub_sm_premium'),
163
+ "sub_sm_ultimate" => subscriptions.include?('sub_sm_ultimate'),
164
+ "sub_usgov_12x5" => subscriptions.include?('sub_usgov_12x5'),
165
+ "sub_usgov_24x7" => subscriptions.include?('sub_usgov_24x7'),
166
+ "sub_gitlab_dedicated" => subscriptions.include?('sub_gitlab_dedicated'),
167
+ "sub_edu" => subscriptions.include?('sub_edu'),
168
+ "sub_oss" => subscriptions.include?('sub_oss'),
169
+ "sub_community_other" => subscriptions.include?('sub_community_other'),
170
+ "sub_ss_ase" => subscriptions.include?('sub_ss_ase'),
171
+ "sub_other" => subscriptions.include?('sub_other'),
172
+ "partner_customer" => account_is_partner_customer?(account, type),
173
+ "not_in_sfdc" => false,
174
+ "support_hold" => account.Support_Hold__c,
175
+ "sold_to" => account_sold_to(account)
176
+ }
177
+ end
178
+
179
+ ##
180
+ # Return a Hash used for the account sync for US Government support
181
+ #
182
+ # @author Jason Colyer
183
+ # @since 1.0.26
184
+ def self.usgov_sync_object(account)
185
+ subscriptions = account_subscriptions(account)
186
+ expiration = account_expiration(account)
187
+ type = account_type(account, expiration)
188
+ partner = %w[alliance_partner open_partner select_partner].include?(type)
189
+ {
190
+ "name" => "#{Digest::SHA1.hexdigest(account.Account_ID_18__c)[0..7]} #{account.Name}",
191
+ "salesforce_id" => account.Account_ID_18__c,
192
+ "sfdc_short_id" => account.Account_ID_18__c[..-4],
193
+ "support_level" => usgov_highest_support_level(subscriptions),
194
+ "arr" => account_arr(account).to_f,
195
+ "market_segment" => account_market_segment(account),
196
+ "account_owner" => account.Account_Owner_Calc__c,
197
+ "type" => type,
198
+ "technical_account_manager" => account.Technical_Account_Manager_Name__c,
199
+ "solutions_architect" => account.Solutions_Architect_Lookup__r&.Name,
200
+ "number_of_seats" => account_seats(account).to_f,
201
+ "health_score" => account_health_score(account),
202
+ "expiration_date" => expiration,
203
+ "restricted_account" => (account.Restricted_Account__c == 'Restricted Party'),
204
+ "greatly_expired" => (partner ? false : Date.parse(expiration) <= Date.today.years_ago(3)),
205
+ "sub_consumption_ai" => subscriptions.include?('sub_consumption_ai'),
206
+ "sub_consumption_cicd_minutes" => subscriptions.include?('sub_consumption_cicd_minutes'),
207
+ "sub_consumption_eap" => subscriptions.include?('sub_consumption_eap'),
208
+ "sub_consumption_storage" => subscriptions.include?('sub_consumption_storage'),
209
+ "sub_proserv" => subscriptions.include?('sub_proserv'),
210
+ "sub_dotcom_premium" => subscriptions.include?('sub_dotcom_premium'),
211
+ "sub_dotcom_ultimate" => subscriptions.include?('sub_dotcom_ultimate'),
212
+ "sub_sm_starter" => subscriptions.include?('sub_sm_starter'),
213
+ "sub_sm_premium" => subscriptions.include?('sub_sm_premium'),
214
+ "sub_sm_ultimate" => subscriptions.include?('sub_sm_ultimate'),
215
+ "sub_usgov_12x5" => subscriptions.include?('sub_usgov_12x5'),
216
+ "sub_usgov_24x7" => subscriptions.include?('sub_usgov_24x7'),
217
+ "sub_gitlab_dedicated" => subscriptions.include?('sub_gitlab_dedicated'),
218
+ "sub_edu" => subscriptions.include?('sub_edu'),
219
+ "sub_oss" => subscriptions.include?('sub_oss'),
220
+ "sub_community_other" => subscriptions.include?('sub_community_other'),
221
+ "sub_ss_ase" => subscriptions.include?('sub_ss_ase'),
222
+ "sub_other" => subscriptions.include?('sub_other'),
223
+ "not_in_sfdc" => false,
224
+ "support_hold" => account.Support_Hold__c
225
+ }
226
+ end
227
+
228
+ ##
229
+ # Return an Array of subscriptions used for the account sync
230
+ #
231
+ # @author Jason Colyer
232
+ # @since 1.0.26
233
+ def self.account_subscriptions(account)
234
+ subs = []
235
+ return subs if account.Zuora__R00N40000001lGjTEAU__r.nil?
236
+
237
+ account.Zuora__R00N40000001lGjTEAU__r.each do |sub|
238
+ next if Date.parse(sub.Zuora__EffectiveEndDate__c) < Date.today
239
+
240
+ subs.push('sub_consumption_ai') if SubscriptionDefinitions.consumption_ai.include? sub.Name
241
+ subs.push('sub_consumption_cicd_minutes') if SubscriptionDefinitions.consumption_cicd_minutes.include? sub.Name
242
+ subs.push('sub_consumption_eap') if SubscriptionDefinitions.consumption_eap.include? sub.Name
243
+ subs.push('sub_consumption_storage') if SubscriptionDefinitions.consumption_storage.include? sub.Name
244
+ subs.push('sub_proserv') if SubscriptionDefinitions.proserv.include? sub.Name
245
+ subs.push('sub_dotcom_premium') if SubscriptionDefinitions.dotcom_premium.include? sub.Name
246
+ subs.push('sub_dotcom_ultimate') if SubscriptionDefinitions.dotcom_ultimate.include? sub.Name
247
+ subs.push('sub_sm_starter') if SubscriptionDefinitions.sm_starter.include? sub.Name
248
+ subs.push('sub_sm_premium') if SubscriptionDefinitions.sm_premium.include? sub.Name
249
+ subs.push('sub_sm_ultimate') if SubscriptionDefinitions.sm_ultimate.include? sub.Name
250
+ subs.push('sub_usgov_12x5') if SubscriptionDefinitions.usgov_12x5.include? sub.Name
251
+ subs.push('sub_usgov_24x7') if SubscriptionDefinitions.usgov_24x7.include? sub.Name
252
+ subs.push('sub_gitlab_dedicated') if SubscriptionDefinitions.gitlab_dedicated.include? sub.Name
253
+ subs.push('sub_edu') if SubscriptionDefinitions.edu.include? sub.Name
254
+ subs.push('sub_oss') if SubscriptionDefinitions.oss.include? sub.Name
255
+ subs.push('sub_community_other') if SubscriptionDefinitions.community_other.include? sub.Name
256
+ subs.push('sub_ss_ase') if SubscriptionDefinitions.ss_ase.include? sub.Name
257
+ subs.push('sub_usgov_24x7') if SubscriptionDefinitions.fedramp.include? sub.Name
258
+ subs.push('sub_gitlab_dedicated') if SubscriptionDefinitions.fedramp.include? sub.Name
259
+ subs.push('sub_other') if subs.count.zero?
260
+ end
261
+ subs.compact.uniq
262
+ end
263
+
264
+ ##
265
+ # Returns an accounts latest expiration
266
+ #
267
+ # @author Jason Colyer
268
+ # @since 1.0.26
269
+ def self.account_expiration(account)
270
+ return '1970-01-01' if account.Zuora__R00N40000001lGjTEAU__r.nil?
271
+
272
+ account.Zuora__R00N40000001lGjTEAU__r.map(&:Zuora__EffectiveEndDate__c).max
273
+ end
274
+
275
+ ##
276
+ # Returns an accounts type
277
+ #
278
+ # @author Jason Colyer
279
+ # @since 1.0.26
280
+ def self.account_type(account, expiration)
281
+ return 'alliance_partner' if %w[0014M00001sDiGEQA0].include?(account.Account_ID_18__c)
282
+ return 'open_partner' if account.Type == 'Partner' && account.Partner_Track__c == 'Open'
283
+ return 'select_partner' if account.Type == 'Partner' && account.Partner_Track__c == 'Select'
284
+ return 'former_customer' if Date.parse(expiration) < Date.today
285
+
286
+ 'customer'
287
+ end
288
+
289
+ ##
290
+ # Returns an accounts ARR
291
+ #
292
+ # @author Jason Colyer
293
+ # @since 1.0.26
294
+ def self.account_arr(account)
295
+ total = 0
296
+ return total if account.Zuora__R00N40000001lGjTEAU__r.nil?
297
+
298
+ account.Zuora__R00N40000001lGjTEAU__r.each do |subscription|
299
+ next if Date.parse(subscription.Zuora__EffectiveEndDate__c) < Date.today
300
+
301
+ total += subscription.Zuora__TotalContractValue__c.to_i
302
+ end
303
+ total
304
+ end
305
+
306
+ ##
307
+ # Returns an accounts market segment
308
+ #
309
+ # @author Jason Colyer
310
+ # @since 1.0.26
311
+ def self.account_market_segment(account)
312
+ account.Ultimate_Parent_Sales_Segment_Employees__c.downcase
313
+ rescue NoMethodError
314
+ 'unknown'
315
+ end
316
+
317
+ ##
318
+ # Returns an accounts seat count
319
+ #
320
+ # @author Jason Colyer
321
+ # @since 1.0.26
322
+ def self.account_seats(account)
323
+ total = 0
324
+ return total if account.Zuora__R00N40000001lGjTEAU__r.nil?
325
+
326
+ account.Zuora__R00N40000001lGjTEAU__r.each do |subscription|
327
+ next if Date.parse(subscription.Zuora__EffectiveEndDate__c) < Date.today
328
+
329
+ total += subscription.Zuora__Quantity__c.to_i
330
+ end
331
+ total
332
+ end
333
+
334
+ ##
335
+ # Returns an accounts region
336
+ #
337
+ # @author Jason Colyer
338
+ # @since 1.0.26
339
+ def self.account_region(account)
340
+ return nil if account.Account_Demographics_Geo__c.nil?
341
+ return nil unless %w[amer apac emea latam ncsa noram].include? account.Account_Demographics_Geo__c.to_s.downcase
342
+
343
+ "org_region_#{account.Account_Demographics_Geo__c.to_s.downcase}"
344
+ end
345
+
346
+ ##
347
+ # Returns an accounts health score
348
+ #
349
+ # @author Jason Colyer
350
+ # @since 1.0.26
351
+ def self.account_health_score(account)
352
+ account.GS_Health_Score_Color__c.downcase
353
+ rescue NoMethodError
354
+ nil
355
+ end
356
+
357
+ ##
358
+ # Returns if an account is a partner customer or not
359
+ #
360
+ # @author Jason Colyer
361
+ # @since 1.0.26
362
+ def self.account_is_partner_customer?(account, type)
363
+ return false if account.Latest_Sold_To_Contact__r.nil?
364
+ return false if type != 'customer'
365
+ return true if account.Latest_Sold_To_Contact__r.Email == 'ecopo@us.ibm.com'
366
+
367
+ false
368
+ end
369
+
370
+ ##
371
+ # Returns an accounts highest support level for the Global support sync
372
+ #
373
+ # @author Jason Colyer
374
+ # @since 1.0.26
375
+ def self.global_highest_support_level(subscriptions)
376
+ return 'ultimate' if subscriptions.include? 'sub_sm_ultimate'
377
+ return 'gold' if subscriptions.include? 'sub_dotcom_ultimate'
378
+ return 'ultimate' if subscriptions.include? 'sub_gitlab_dedicated'
379
+ return 'premium' if subscriptions.include? 'sub_sm_premium'
380
+ return 'silver' if subscriptions.include? 'sub_dotcom_premium'
381
+ return 'starter' if subscriptions.include? 'sub_sm_starter'
382
+ return 'consumption_only' if subscriptions.include? 'sub_consumption_ai'
383
+ return 'consumption_only' if subscriptions.include? 'sub_consumption_cicd_minutes'
384
+ return 'consumption_only' if subscriptions.include? 'sub_consumption_eap'
385
+ return 'consumption_only' if subscriptions.include? 'sub_consumption_storage'
386
+ return 'custom' if subscriptions.include? 'sub_usgov_12x5'
387
+ return 'custom' if subscriptions.include? 'sub_usgov_24x7'
388
+ return 'custom' if subscriptions.include? 'sub_ss_ase'
389
+ return 'community' if subscriptions.include? 'sub_edu'
390
+ return 'community' if subscriptions.include? 'sub_oss'
391
+ return 'community' if subscriptions.include? 'sub_community_other'
392
+ return 'other' if subscriptions.include? 'sub_proserv'
393
+ return 'sub_other' if subscriptions.include? 'sub_proserv'
394
+
395
+ 'expired'
396
+ end
397
+
398
+ ##
399
+ # Returns an accounts highest support level for the US Government support sync
400
+ #
401
+ # @author Jason Colyer
402
+ # @since 1.0.26
403
+ def self.usgov_highest_support_level(subscriptions)
404
+ return 'ultimate' if subscriptions.include? 'sub_sm_ultimate'
405
+ return 'ultimate' if subscriptions.include? 'sub_gitlab_dedicated'
406
+ return 'premium' if subscriptions.include? 'sub_sm_premium'
407
+ return 'starter' if subscriptions.include? 'sub_sm_starter'
408
+ return 'custom' if subscriptions.include? 'sub_usgov_12x5'
409
+ return 'custom' if subscriptions.include? 'sub_usgov_24x7'
410
+
411
+ 'expired'
412
+ end
413
+
414
+ ##
415
+ # Returns an accounts sold to
416
+ #
417
+ # @author Jason Colyer
418
+ # @since 1.0.26
419
+ def self.account_sold_to(account)
420
+ return nil if account.Zuora__R00N40000001kyLcEAI__r.nil?
421
+ return nil if account.Zuora__R00N40000001kyLcEAI__r.first.Zuora__SoldToWorkEmail__c == 'ecopo@us.ibm.com'
422
+
423
+ {
424
+ "salesforce_id" => account.Account_ID_18__c,
425
+ "email" => account.Zuora__R00N40000001kyLcEAI__r.first.Zuora__SoldToWorkEmail__c,
426
+ "name" => account.Zuora__R00N40000001kyLcEAI__r.first.Name
427
+ }
428
+ end
429
+
77
430
  ##
78
431
  # Provides the String needed to make a specific type of SOQL query
79
432
  #
@@ -104,6 +457,115 @@ module Readiness
104
457
  Account_ID_18__c = '#{aid}'
105
458
  STRING
106
459
  end
460
+
461
+ ##
462
+ # Provides the String needed to make a specific type of SOQL query
463
+ #
464
+ # @author Jason Colyer
465
+ # @since 1.0.26
466
+ # @param aid [String] The ID of the Account to check
467
+ # @return [String]
468
+ def self.global_sync_query_string
469
+ <<~QUERY
470
+ SELECT
471
+ Account_ID_18__c,
472
+ Name,
473
+ Type,
474
+ Ultimate_Parent_Sales_Segment_Employees__c,
475
+ Account_Owner_Calc__c,
476
+ Technical_Account_Manager_Name__c,
477
+ GS_Health_Score_Color__c,
478
+ Restricted_Account__c,
479
+ Solutions_Architect_Lookup__r.Name,
480
+ Account_Demographics_Geo__c,
481
+ Latest_Sold_To_Contact__r.Email,
482
+ Latest_Sold_To_Contact__r.Name,
483
+ Partner_Track__c,
484
+ Partners_Partner_Type__c,
485
+ Support_Hold__c,
486
+ (
487
+ SELECT
488
+ Id,
489
+ Name,
490
+ Zuora__ProductName__c,
491
+ Zuora__EffectiveEndDate__c,
492
+ Zuora__Quantity__c,
493
+ Zuora__TotalContractValue__c,
494
+ Subscription_Status__c
495
+ FROM Zuora__R00N40000001lGjTEAU__r
496
+ WHERE
497
+ Zuora__EffectiveEndDate__c != NULL
498
+ ),
499
+ (
500
+ SELECT
501
+ Name,
502
+ Zuora__SoldToWorkEmail__c
503
+ FROM Zuora__R00N40000001kyLcEAI__r
504
+ WHERE
505
+ IsDeleted = false
506
+ ORDER BY CreatedDate ASC
507
+ LIMIT 1
508
+ )
509
+ FROM Account
510
+ WHERE
511
+ Type != 'Prospect' AND
512
+ (
513
+ Type IN ('Customer', 'Former Customer') OR
514
+ (
515
+ Type = 'Partner' AND
516
+ Partners_Partner_Status__c IN ('Authorized', 'Former') AND
517
+ Partners_Partner_Type__c IN ('Alliance', 'Channel') AND
518
+ Partner_Track__c IN ('Open', 'Select', 'Technology')
519
+ )
520
+ )
521
+ QUERY
522
+ end
523
+
524
+ ##
525
+ # Provides the String needed to make a specific type of SOQL query
526
+ #
527
+ # @author Jason Colyer
528
+ # @since 1.0.26
529
+ # @param aid [String] The ID of the Account to check
530
+ # @return [String]
531
+ def self.usgov_sync_query_string
532
+ <<~QUERY
533
+ SELECT
534
+ Account_ID_18__c,
535
+ Name,
536
+ Ultimate_Parent_Sales_Segment_Employees__c,
537
+ Account_Owner_Calc__c,
538
+ Technical_Account_Manager_Name__c,
539
+ GS_Health_Score_Color__c,
540
+ Restricted_Account__c,
541
+ Solutions_Architect_Lookup__r.Name,
542
+ Support_Hold__c,
543
+ (
544
+ SELECT
545
+ Id,
546
+ Name,
547
+ Zuora__ProductName__c,
548
+ Zuora__EffectiveEndDate__c,
549
+ Zuora__Quantity__c,
550
+ Zuora__TotalContractValue__c,
551
+ Subscription_Status__c
552
+ FROM Zuora__R00N40000001lGjTEAU__r
553
+ )
554
+ FROM Account
555
+ WHERE
556
+ Type IN ('Customer', 'Former Customer') AND
557
+ (
558
+ (
559
+ Account_Demographics_Territory__c LIKE 'PUBSEC%' AND
560
+ Account_Demographics_Territory__c != 'PUBSEC_' AND
561
+ (
562
+ NOT Account_Demographics_Territory__c LIKE '%SLED%'
563
+ )
564
+ ) OR
565
+ Support_Instance__c = 'federal-support'
566
+ )
567
+ QUERY
568
+ end
107
569
  end
108
570
  end
109
571
  end
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module Salesforce
6
+ module Salesforce
7
+ ##
8
+ # Defines the class Contacts within the module {Readiness::Salesforce}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.26
12
+ class Contacts < Readiness::Client
13
+ ##
14
+ # Return an Array of contacts from Salesforce for US Government support
15
+ #
16
+ # @author Jason Colyer
17
+ # @since 1.0.26
18
+ # @param client [Object] An instance of {Readiness::Salesforce::Client}
19
+ # @return [Array]
20
+ # @example
21
+ # config = Readiness::Salesforce::Configuration.new
22
+ # config.api_version = '58.0'
23
+ # config.client_id = ENV.fetch('SFDC_CLIENTID')
24
+ # config.client_secret = ENV.fetch('SFDC_CLIENTSECRET')
25
+ # config.password = ENV.fetch('SFDC_PASSWORD')
26
+ # config.security_token = ENV.fetch('SFDC_SECURITYTOKEN')
27
+ # config.username = ENV.fetch('SFDC_USERNAME')
28
+ # client = Readiness::Salesforce::Client.new(config)
29
+ # contacts = Readiness::Salesforce::Contacts.usgov_contacts(client)
30
+ # pp contacts.count
31
+ # # => 1769
32
+ def self.usgov_contacts(client)
33
+ query = Queries.new(usgov_sync_query_string)
34
+ results = Queries.run!(client, query)
35
+ contacts = results.map { |r| usgov_sync_object(r) }.compact.uniq
36
+ grouped = contacts.group_by { |a| a['email'] }.values
37
+ duplicates = grouped.select { |a| a.size > 1 }.flatten
38
+ (contacts - duplicates).compact.uniq
39
+ end
40
+
41
+ ##
42
+ # Return a Hash used for the contact sync for US Government support
43
+ #
44
+ # @author Jason Colyer
45
+ # @since 1.0.26
46
+ def self.usgov_sync_object(contact)
47
+ {
48
+ "name" => contact.Name,
49
+ "email" => contact.Email.downcase,
50
+ "org" => "#{Digest::SHA1.hexdigest(contact.Account.Account_ID_18__c)[0..7]} #{contact.Account.Name}",
51
+ "salesforce_id" => contact.Account.Account_ID_18__c,
52
+ "not_in_sfdc" => false
53
+ }
54
+ end
55
+
56
+ ##
57
+ # Return a String used for the contact sync for US Government support
58
+ #
59
+ # @author Jason Colyer
60
+ # @since 1.0.26
61
+ def self.usgov_sync_query_string
62
+ <<~QUERY
63
+ SELECT
64
+ Name,
65
+ Email,
66
+ Account.Account_ID_18__c,
67
+ Account.Name,
68
+ Role__c
69
+ FROM Contact
70
+ WHERE
71
+ Inactive_Contact__c = false AND
72
+ Name != '' AND
73
+ Email != '' AND
74
+ Role__c INCLUDES ('Gitlab Admin') AND
75
+ (
76
+ NOT Email LIKE '%gitlab.com'
77
+ ) AND
78
+ (
79
+ (
80
+ Account.Account_Demographics_Territory__c LIKE 'PUBSEC%' AND
81
+ Account.Account_Demographics_Territory__c != 'PUBSEC_' AND
82
+ (
83
+ NOT Account.Account_Demographics_Territory__c LIKE '%SLED%'
84
+ )
85
+ ) OR
86
+ Account.Support_Instance__c = 'federal-support'
87
+ )
88
+ QUERY
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,608 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module Salesforce
6
+ module Salesforce
7
+ ##
8
+ # Defines the class SubscriptionDefinitions within the module {Readiness::Salesforce}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.26
12
+ class SubscriptionDefinitions < Readiness::Client
13
+ ##
14
+ # Defines Consumption => AI subscriptions
15
+ #
16
+ # @author Jason Colyer
17
+ # @since 1.0.26
18
+ # @return [Array]
19
+ def self.consumption_ai
20
+ [
21
+ 'Dedicated - GitLab Duo Enterprise - 1 Year',
22
+ 'Dedicated - GitLab Duo Enterprise - 2 Year',
23
+ 'Dedicated - GitLab Duo Enterprise - 3 Year',
24
+ 'Dedicated - GitLab Duo Enterprise - 4 Year',
25
+ 'Dedicated - GitLab Duo Enterprise - 5 Year',
26
+ 'Dedicated - GitLab Duo Enterprise - Monthly',
27
+ 'Dedicated - GitLab Duo Pro - 1 Year',
28
+ 'Dedicated - GitLab Duo Pro - 2 Year',
29
+ 'Dedicated - GitLab Duo Pro - 3 Year',
30
+ 'Dedicated - GitLab Duo Pro - 4 Year',
31
+ 'Dedicated - GitLab Duo Pro - 5 Year',
32
+ 'Dedicated - GitLab Duo Pro - Monthly',
33
+ 'SaaS - GitLab Duo Enterprise - 1 Year',
34
+ 'SaaS - GitLab Duo Enterprise - 2 Year',
35
+ 'SaaS - GitLab Duo Enterprise - 3 Year',
36
+ 'SaaS - GitLab Duo Enterprise - 4 Year',
37
+ 'SaaS - GitLab Duo Enterprise - 5 Year',
38
+ 'SaaS - GitLab Duo Enterprise - Monthly',
39
+ 'SaaS - GitLab Duo Pro - 1 Year',
40
+ 'SaaS - GitLab Duo Pro - 2 Year',
41
+ 'SaaS - GitLab Duo Pro - 3 Year',
42
+ 'SaaS - GitLab Duo Pro - 4 Year',
43
+ 'SaaS - GitLab Duo Pro - 5 Year',
44
+ 'SaaS - GitLab Duo Pro - Monthly',
45
+ 'Self-Managed - GitLab Duo Enterprise - 1 Year',
46
+ 'Self-Managed - GitLab Duo Enterprise - 2 Year',
47
+ 'Self-Managed - GitLab Duo Enterprise - 3 Year',
48
+ 'Self-Managed - GitLab Duo Enterprise - 4 Year',
49
+ 'Self-Managed - GitLab Duo Enterprise - 5 Year',
50
+ 'Self-Managed - GitLab Duo Enterprise - Monthly',
51
+ 'Self-Managed - GitLab Duo Pro - 1 Year',
52
+ 'Self-Managed - GitLab Duo Pro - 2 Year',
53
+ 'Self-Managed - GitLab Duo Pro - 3 Year',
54
+ 'Self-Managed - GitLab Duo Pro - 4 Year',
55
+ 'Self-Managed - GitLab Duo Pro - 5 Year',
56
+ 'Self-Managed - GitLab Duo Pro - Monthly'
57
+ ]
58
+ end
59
+
60
+ ##
61
+ # Defines Consumption => CI/CD Minutes subscriptions
62
+ #
63
+ # @author Jason Colyer
64
+ # @since 1.0.26
65
+ # @return [Array]
66
+ def self.consumption_cicd_minutes
67
+ [
68
+ '1,000 CI Minutes',
69
+ '1,000 Compute Minutes',
70
+ 'Annual CI Minutes Pack (DO NOT USE)'
71
+ ]
72
+ end
73
+
74
+ ##
75
+ # Defines Consumption => EAP subscriptions
76
+ #
77
+ # @author Jason Colyer
78
+ # @since 1.0.26
79
+ # @return [Array]
80
+ def self.consumption_eap
81
+ [
82
+ 'Dedicated - Enterprise Agile Planning - 1 Year',
83
+ 'Dedicated - Enterprise Agile Planning - 2 Year',
84
+ 'Dedicated - Enterprise Agile Planning - 3 Year',
85
+ 'Dedicated - Enterprise Agile Planning - 4 Year',
86
+ 'Dedicated - Enterprise Agile Planning - 5 Year',
87
+ 'Dedicated - Enterprise Agile Planning - Monthly',
88
+ 'SaaS - Enterprise Agile Planning - 1 Year',
89
+ 'SaaS - Enterprise Agile Planning - 2 Year',
90
+ 'SaaS - Enterprise Agile Planning - 3 Year',
91
+ 'SaaS - Enterprise Agile Planning - 4 Year',
92
+ 'SaaS - Enterprise Agile Planning - 5 Year',
93
+ 'SaaS - Enterprise Agile Planning - Monthly',
94
+ 'Self-Managed - Enterprise Agile Planning - 1 Year',
95
+ 'Self-Managed - Enterprise Agile Planning - 2 Year',
96
+ 'Self-Managed - Enterprise Agile Planning - 3 Year',
97
+ 'Self-Managed - Enterprise Agile Planning - 4 Year',
98
+ 'Self-Managed - Enterprise Agile Planning - 5 Year',
99
+ 'Self-Managed - Enterprise Agile Planning - Monthly'
100
+ ]
101
+ end
102
+
103
+ ##
104
+ # Defines Consumption => Storage subscriptions
105
+ #
106
+ # @author Jason Colyer
107
+ # @since 1.0.26
108
+ # @return [Array]
109
+ def self.consumption_storage
110
+ [
111
+ 'Dedicated - Storage 10GB - 1 Year',
112
+ 'Dedicated - Storage 10GB - 2 Year',
113
+ 'Dedicated - Storage 10GB - 3 Year',
114
+ 'Dedicated - Storage 10GB - Monthly',
115
+ 'GitLab Dedicated for US Public Sector - Storage 10GB - 1 Year',
116
+ 'GitLab Dedicated for US Public Sector - Storage 10GB - 2 Year',
117
+ 'GitLab Dedicated for US Public Sector - Storage 10GB - 3 Year',
118
+ 'GitLab Dedicated for US Public Sector - Storage 10GB - Monthly',
119
+ 'Gitlab Storage 10GB - 1 Year'
120
+ ]
121
+ end
122
+
123
+ ##
124
+ # Defines ProServ subscriptions
125
+ #
126
+ # @author Jason Colyer
127
+ # @since 1.0.26
128
+ # @return [Array]
129
+ def self.proserv
130
+ [
131
+ '#movingtogitlab',
132
+ 'Admin Training',
133
+ 'CI/CD Modernization Workshop',
134
+ 'Consulting Block - 1 Year',
135
+ 'Consulting Block (48 Hours)',
136
+ 'CSM Services',
137
+ 'Custom PS Education Services',
138
+ 'Dedicated - Administration Fee [2XLarge] - 1 Year',
139
+ 'Dedicated - Administration Fee [2XLarge] - 2 Year',
140
+ 'Dedicated - Administration Fee [2XLarge] - 3 Year',
141
+ 'Dedicated - Administration Fee [2XLarge] - Monthly',
142
+ 'Dedicated - Administration Fee [3XLarge] - 1 Year',
143
+ 'Dedicated - Administration Fee [3XLarge] - 2 Year',
144
+ 'Dedicated - Administration Fee [3XLarge] - 3 Year',
145
+ 'Dedicated - Administration Fee [3XLarge] - Monthly',
146
+ 'Dedicated - Administration Fee [Large] - 1 Year',
147
+ 'Dedicated - Administration Fee [Large] - 2 Year',
148
+ 'Dedicated - Administration Fee [Large] - 2 Year',
149
+ 'Dedicated - Administration Fee [Large] - 3 Year',
150
+ 'Dedicated - Administration Fee [Large] - Monthly',
151
+ 'Dedicated - Administration Fee [Medium] - 1 Year',
152
+ 'Dedicated - Administration Fee [Medium] - 2 Year',
153
+ 'Dedicated - Administration Fee [Medium] - 3 Year',
154
+ 'Dedicated - Administration Fee [Medium] - Monthly',
155
+ 'Dedicated - Administration Fee [Small] - 1 Year',
156
+ 'Dedicated - Administration Fee [Small] - 2 Year',
157
+ 'Dedicated - Administration Fee [Small] - 3 Year',
158
+ 'Dedicated - Administration Fee [Small] - Monthly',
159
+ 'Dedicated - Administration Fee [XLarge] - 1 Year',
160
+ 'Dedicated - Administration Fee [XLarge] - 2 Year',
161
+ 'Dedicated - Administration Fee [XLarge] - 3 Year',
162
+ 'Dedicated - Administration Fee [XLarge] - Monthly',
163
+ 'Dedicated Implementation Services',
164
+ 'EdCast Settlement Revenue',
165
+ 'GitLab Dedicated for US Public Sector - Administration Fee [XLarge] - 1 Year',
166
+ 'GitLab Dedicated for US Public Sector - Administration Fee [XLarge] - 2 Year',
167
+ 'GitLab Dedicated for US Public Sector - Administration Fee [XLarge] - 3 Year',
168
+ 'GitLab Dedicated for US Public Sector - Administration Fee [XLarge] - Monthly',
169
+ 'GitLab Dedicated for US Public Sector - Administration Fee [2XLarge] - 1 Year',
170
+ 'GitLab Dedicated for US Public Sector - Administration Fee [2XLarge] - 2 Year',
171
+ 'GitLab Dedicated for US Public Sector - Administration Fee [2XLarge] - 3 Year',
172
+ 'GitLab Dedicated for US Public Sector - Administration Fee [2XLarge] - Monthly',
173
+ 'GitLab Dedicated for US Public Sector - Administration Fee [3XLarge] - 1 Year',
174
+ 'GitLab Dedicated for US Public Sector - Administration Fee [3XLarge] - 2 Year',
175
+ 'GitLab Dedicated for US Public Sector - Administration Fee [3XLarge] - 3 Year',
176
+ 'GitLab Dedicated for US Public Sector - Administration Fee [3XLarge] - Monthly',
177
+ 'GitLab Dedicated for US Public Sector - Administration Fee [Large] - 1 Year',
178
+ 'GitLab Dedicated for US Public Sector - Administration Fee [Large] - 2 Year',
179
+ 'GitLab Dedicated for US Public Sector - Administration Fee [Large] - 3 Year',
180
+ 'GitLab Dedicated for US Public Sector - Administration Fee [Large] - Monthly',
181
+ 'GitLab Dedicated for US Public Sector - Administration Fee [Medium] - 1 Year',
182
+ 'GitLab Dedicated for US Public Sector - Administration Fee [Medium] - 2 Year',
183
+ 'GitLab Dedicated for US Public Sector - Administration Fee [Medium] - 3 Year',
184
+ 'GitLab Dedicated for US Public Sector - Administration Fee [Medium] - Monthly',
185
+ 'GitLab Dedicated for US Public Sector - Administration Fee [Small] - 1 Year',
186
+ 'GitLab Dedicated for US Public Sector - Administration Fee [Small] - 2 Year',
187
+ 'GitLab Dedicated for US Public Sector - Administration Fee [Small] - 3 Year',
188
+ 'GitLab Dedicated for US Public Sector - Administration Fee [Small] - Monthly',
189
+ 'GitLab Agile Portfolio Management Training - Onsite',
190
+ 'GitLab Agile Portfolio Management Training - Remote',
191
+ 'GitLab Certification Exam',
192
+ 'GitLab CI/CD Training - Onsite',
193
+ 'GitLab CI/CD Training - Remote',
194
+ 'GitLab DevSecOps Fundamentals Training - Remote',
195
+ 'GitLab for System Administrators Training - Onsite',
196
+ 'GitLab for System Administrators Training - Remote',
197
+ 'GitLab Geo',
198
+ 'GitLab Geo | 2 Year',
199
+ 'GitLab Geo | 2 Year',
200
+ 'GitLab Geo | 3 Year',
201
+ 'GitLab Health Check - Self-Managed',
202
+ 'GitLab Private 1-Day Training Classroom - Remote',
203
+ 'GitLab Public 1-Day Training Seat - Remote',
204
+ 'GitLab Security Essentials Training - Onsite',
205
+ 'GitLab Security Essentials Training - Remote',
206
+ 'GitLab Service Package',
207
+ 'GitLab Service Package B',
208
+ 'GitLab Service Package C',
209
+ 'GitLab Service Package D',
210
+ 'GitLab System Administration Training - Onsite',
211
+ 'GitLab System Administration Training - Remote',
212
+ 'GitLab with Git Fundamentals Training - Onsite',
213
+ 'GitLab with Git Fundamentals Training - Remote',
214
+ 'Hourly Consulting',
215
+ 'Implementation Quick Start',
216
+ 'Implementation Quick Start (High Availability)',
217
+ 'Implementation QuickStart - GitLab.com',
218
+ 'Implementation QuickStart - Self Managed (HA)',
219
+ 'Implementation Support',
220
+ 'InnerSourcing Training - At your site',
221
+ 'InnerSourcing Training - Remote for your team',
222
+ 'Jenkins Integration',
223
+ 'JIRA Integration',
224
+ 'LDAP Integration',
225
+ 'Migration Quickstart',
226
+ 'Migration+',
227
+ 'New Component',
228
+ 'OLD: ProServ Training Per-Seat Add-on',
229
+ 'Pivotal Cloud Foundry',
230
+ 'ProServ Training Per-Seat Add-on',
231
+ 'Quarter',
232
+ 'Quick Start with HA (less than 10,000 users)',
233
+ 'Quick Start without HA, less than 500 users',
234
+ 'Training LMS Settlement Revenue',
235
+ 'Training Workshop',
236
+ 'Training Workshop | OneTime',
237
+ 'Travel Expenses',
238
+ 'Ultimate QuickStart - DevSecOps Workshop'
239
+ ]
240
+ end
241
+
242
+ ##
243
+ # Defines GitLab.com => Premium subscriptions
244
+ #
245
+ # @author Jason Colyer
246
+ # @since 1.0.26
247
+ # @return [Array]
248
+ def self.dotcom_premium
249
+ [
250
+ 'SaaS - Premium - 1 Year',
251
+ 'SaaS - Premium - 2 Year',
252
+ 'SaaS - Premium - 3 Year',
253
+ 'SaaS - Premium - 4 Year',
254
+ 'SaaS - Premium - 5 Year',
255
+ 'SaaS - Premium - Monthly',
256
+ 'Silver Plan',
257
+ 'Silver Plan - 2 Year',
258
+ 'Silver Plan - 3 Year',
259
+ 'Silver Plan - 4 Year',
260
+ 'Silver Plan - 5 Year',
261
+ 'Silver Plan - Monthly'
262
+ ]
263
+ end
264
+
265
+ ##
266
+ # Defines GitLab.com => Ultimate subscriptions
267
+ #
268
+ # @author Jason Colyer
269
+ # @since 1.0.26
270
+ # @return [Array]
271
+ def self.dotcom_ultimate
272
+ [
273
+ '[EDU Enterprise-Large] SaaS - Ultimate - 1 Year',
274
+ '[EDU Enterprise-Medium] SaaS - Ultimate - 1 Year',
275
+ '[EDU Enterprise-Small] SaaS - Ultimate - 1 Year',
276
+ '[EDU Enterprise-XLarge] SaaS - Ultimate - 1 Year',
277
+ '[EDU Program] SaaS - Support - 1 Year',
278
+ '[OSS Program] SaaS - Support - 1 Year',
279
+ '[Startups Program] SaaS - Support - 1 Year',
280
+ 'Gold - 1 Year (Reporter Access)',
281
+ 'Gold - 1 year EDU-Enterprise-Large (SaaS)',
282
+ 'Gold - 1 year EDU-Enterprise-Large (Self-Hosted)',
283
+ 'Gold - 1 year EDU-Enterprise-Medium (SaaS)',
284
+ 'Gold - 1 year EDU-Enterprise-Medium (Self-Hosted)',
285
+ 'Gold - 1 year EDU-Enterprise-Small (SaaS)',
286
+ 'Gold - 1 year EDU-Enterprise-Small (Self-Hosted)',
287
+ 'Gold - 1 year EDU-Enterprise-XLarge (SaaS)',
288
+ 'Gold - 1 year EDU-Enterprise-XLarge (Self-Hosted)',
289
+ 'Gold - 2 Year (Reporter Access)',
290
+ 'Gold - 3 Year (Reporter Access)',
291
+ 'Gold - Monthly',
292
+ 'Gold Plan',
293
+ 'Gold Plan - 1 Year (Y Combinator) w/ Support',
294
+ 'Gold Plan - 2 Year',
295
+ 'Gold Plan - 3 Year',
296
+ 'Gold Plan - 4 Year',
297
+ 'Gold Plan - 5 Year',
298
+ 'SaaS - Ultimate - 1 Year',
299
+ 'SaaS - Ultimate - 2 Year',
300
+ 'SaaS - Ultimate - 3 Year',
301
+ 'SaaS - Ultimate - 4 Year',
302
+ 'SaaS - Ultimate - 5 Year',
303
+ 'SaaS - Ultimate - Monthly'
304
+ ]
305
+ end
306
+
307
+ ##
308
+ # Defines Self-Managed => Starter subscriptions
309
+ #
310
+ # @author Jason Colyer
311
+ # @since 1.0.26
312
+ # @return [Array]
313
+ def self.sm_starter
314
+ [
315
+ 'Education (Starter) - 1 Year',
316
+ 'Education (Starter) - 2 Year',
317
+ 'Education (Starter) - 3 Year',
318
+ 'Education (Starter) - 4 Year',
319
+ 'Education (Starter) - 5 Year',
320
+ 'Education (Starter) - Monthly',
321
+ 'GitLab EE Starter',
322
+ 'GitLab EE Starter | 2 Year',
323
+ 'Standard | 2 Years',
324
+ 'Standard | 3 Years',
325
+ 'Standard | 4 Years',
326
+ 'Standard | 5 Years',
327
+ 'Standard | Annual',
328
+ 'Starter - 1 Year',
329
+ 'Starter - 2 Year',
330
+ 'Starter - 3 Year',
331
+ 'Starter - 4 Year',
332
+ 'Starter - 5 Year',
333
+ 'Starter - Monthly',
334
+ 'Starter - Monthly - 1 Year',
335
+ 'Starter - Monthly - 2 Year',
336
+ 'Starter - Monthly - 3 Year',
337
+ 'Starter - Monthly - 4 Year',
338
+ 'Starter - Monthly - 5 Year'
339
+ ]
340
+ end
341
+
342
+ ##
343
+ # Defines Self-Managed => Premium subscriptions
344
+ #
345
+ # @author Jason Colyer
346
+ # @since 1.0.26
347
+ # @return [Array]
348
+ def self.sm_premium
349
+ [
350
+ 'Education (Premium) - 1 Year',
351
+ 'GitLab EE Premium',
352
+ 'GitLab EE Premium | 3 Years',
353
+ 'GitLab EE Premium | 5 Years',
354
+ 'GitLab Enterprise Premium',
355
+ 'Premium - 1 Year',
356
+ 'Premium - 1 Year - Eval',
357
+ 'Premium - 1 Year (Guest Access)',
358
+ 'Premium - 1 Year (Reporter Access',
359
+ 'Premium - 2 Year',
360
+ 'Premium - 3 Year',
361
+ 'Premium - 4 Year',
362
+ 'Premium - 5 Year',
363
+ 'Premium - Monthly',
364
+ 'Premium - Monthly - 1 Year',
365
+ 'Premium - Monthly - 2 Year',
366
+ 'Premium - Monthly - 3 Year',
367
+ 'Premium - Monthly - 4 Year',
368
+ 'Premium - Monthly - 5 Year',
369
+ 'Premium - monthly (Guest Access)',
370
+ 'Premium Support',
371
+ 'Premium Support - 3 Years',
372
+ 'Self-Managed - Premium - 1 Year',
373
+ 'Self-Managed - Premium - 2 Year',
374
+ 'Self-Managed - Premium - 3 Year',
375
+ 'Self-Managed - Premium - 4 Year',
376
+ 'Self-Managed - Premium - 5 Year',
377
+ 'Self-Managed - Premium - Monthly'
378
+ ]
379
+ end
380
+
381
+ ##
382
+ # Defines Self-Managed => Ultimate subscriptions
383
+ #
384
+ # @author Jason Colyer
385
+ # @since 1.0.26
386
+ # @return [Array]
387
+ def self.sm_ultimate
388
+ [
389
+ '[EDU Enterprise-Large] Self-Managed - Ultimate - 1 Year',
390
+ '[EDU Enterprise-Medium] Self-Managed - Ultimate - 1 Year',
391
+ '[EDU Enterprise-Small] Self-Managed - Ultimate - 1 Year',
392
+ '[EDU Enterprise-XLarge] Self-Managed - Ultimate - 1 Year',
393
+ '[EDU Program] Self-Managed - Support - 1 Year',
394
+ '[EDU Program] Self-Managed - Support - 3 Year',
395
+ '[OSS Program] Self-Managed - Support - 1 Year',
396
+ '[Startups Program] Self-Managed - Support - 1 Year',
397
+ 'Education (Ultimate) - 1 Year',
398
+ 'Education (Ultimate) - 2 Year',
399
+ 'Education (Ultimate) - 3 Year',
400
+ 'Education (Ultimate) - 3 Year',
401
+ 'EE License',
402
+ 'GitLab EE Ultimate',
403
+ 'GitLab EE Ultimate | 2 Year',
404
+ 'GitLab EE Ultimate | 3 Year',
405
+ 'GitLab EE Ultimate | 5 Year',
406
+ 'GitLab EE Ultimate | Monthly',
407
+ 'GitLab Enterprise Edition',
408
+ 'GitLab Enterprise Edition - Monthly',
409
+ 'GitLab Enterprise Edition | 2 Years',
410
+ 'GitLab Enterprise Edition | 3 Years',
411
+ 'GitLab Enterprise Edition | 4 Years',
412
+ 'GitLab Enterprise Edition | 5 Years',
413
+ 'Plus | 2 Years',
414
+ 'Plus | 3 Years',
415
+ 'Plus | 4 Years',
416
+ 'Plus | 5 Years',
417
+ 'Plus | Annual',
418
+ 'Plus | Annual - 2 Year',
419
+ 'Self-Managed - Ultimate - 1 Year',
420
+ 'Self-Managed - Ultimate - 2 Year',
421
+ 'Self-Managed - Ultimate - 3 Year',
422
+ 'Self-Managed - Ultimate - 4 Year',
423
+ 'Self-Managed - Ultimate - 5 Year',
424
+ 'Self-Managed - Ultimate - Monthly',
425
+ 'Ultimate - 1 Year',
426
+ 'Ultimate - 1 Year (EDU or OSS) w/ Support',
427
+ 'Ultimate - 1 Year (Guest Access)',
428
+ 'Ultimate - 1 Year (Reporter Access)',
429
+ 'Ultimate - 1 Year (Y Combinator) w/ Support',
430
+ 'Ultimate - 1 year EDU-Enterprise-Large (SaaS)',
431
+ 'Ultimate - 1 year EDU-Enterprise-Large (Self-Hosted)',
432
+ 'Ultimate - 1 year EDU-Enterprise-Medium (SaaS)',
433
+ 'Ultimate - 1 year EDU-Enterprise-Medium (Self-Hosted)',
434
+ 'Ultimate - 1 year EDU-Enterprise-Small (SaaS)',
435
+ 'Ultimate - 1 year EDU-Enterprise-Small (Self-Hosted)',
436
+ 'Ultimate - 1 year EDU-Enterprise-XLarge (SaaS)',
437
+ 'Ultimate - 1 year EDU-Enterprise-XLarge (Self-Hosted)',
438
+ 'Ultimate - 2 Year',
439
+ 'Ultimate - 2 Year (Reporter Access)',
440
+ 'Ultimate - 3 Year',
441
+ 'Ultimate - 3 Year (EDU or OSS) w/ Support',
442
+ 'Ultimate - 4 Year',
443
+ 'Ultimate - 5 Year',
444
+ 'Ultimate - Monthly',
445
+ 'Ultimate - Monthly - 1 Year',
446
+ 'Ultimate - Monthly - 2 Year',
447
+ 'Ultimate - Monthly - 3 Year',
448
+ 'Ultimate - Monthly - 4 Year',
449
+ 'Ultimate - Monthly - 5 Year',
450
+ 'Ultimate Pack - 1 Year (AWS)',
451
+ 'Ultimate Pack - 2 Year (AWS)',
452
+ 'Ultimate Pack - 3 Year (AWS)',
453
+ 'Ultimate Pack - 4 Year (AWS)',
454
+ 'Ultimate Pack - 5 User Pack (AWS Hourly)',
455
+ 'Ultimate Pack - 5 Year (AWS)'
456
+ ]
457
+ end
458
+
459
+ ##
460
+ # Defines US Government => 12x5 subscriptions
461
+ #
462
+ # @author Jason Colyer
463
+ # @since 1.0.26
464
+ # @return [Array]
465
+ def self.usgov_12x5
466
+ [
467
+ '12x5 US Citizen Support - 1 Year',
468
+ '12x5 US Citizen Support - 2 Year',
469
+ '12x5 US Citizen Support - 3 Year',
470
+ '12x5 US Citizen Support - 4 Year',
471
+ '12x5 US Citizen Support - 5 Year',
472
+ '12x5 US Citizen Support - Monthly'
473
+ ]
474
+ end
475
+
476
+ ##
477
+ # Defines US Government => 24x7 subscriptions
478
+ #
479
+ # @author Jason Colyer
480
+ # @since 1.0.26
481
+ # @return [Array]
482
+ def self.usgov_24x7
483
+ [
484
+ '24x7 US Citizen Support - 1 Year',
485
+ '24x7 US Citizen Support - 2 Year',
486
+ '24x7 US Citizen Support - 3 Year',
487
+ '24x7 US Citizen Support - 4 Year',
488
+ '24x7 US Citizen Support - 5 Year',
489
+ '24x7 US Citizen Support - Monthly'
490
+ ]
491
+ end
492
+
493
+ ##
494
+ # Defines GitLab Dedicated subscriptions
495
+ #
496
+ # @author Jason Colyer
497
+ # @since 1.0.26
498
+ # @return [Array]
499
+ def self.gitlab_dedicated
500
+ [
501
+ 'Dedicated - Ultimate - 1 Year',
502
+ 'Dedicated - Ultimate - 2 Year',
503
+ 'Dedicated - Ultimate - 3 Year',
504
+ 'Dedicated - Ultimate - 4 Year',
505
+ 'Dedicated - Ultimate - 5 Year',
506
+ 'Dedicated - Ultimate - Monthly'
507
+ ]
508
+ end
509
+
510
+ ##
511
+ # Defines FedRAMP subscriptions
512
+ #
513
+ # @author Jason Colyer
514
+ # @since 1.0.26
515
+ # @return [Array]
516
+ def self.fedramp
517
+ [
518
+ 'GitLab Dedicated for US Public Sector - Ultimate - 1 Year',
519
+ 'GitLab Dedicated for US Public Sector - Ultimate - 2 Year',
520
+ 'GitLab Dedicated for US Public Sector - Ultimate - 3 Year',
521
+ 'GitLab Dedicated for US Public Sector - Ultimate - Monthly'
522
+ ]
523
+ end
524
+
525
+ ##
526
+ # Defines Community => EDU subscriptions
527
+ #
528
+ # @author Jason Colyer
529
+ # @since 1.0.26
530
+ # @return [Array]
531
+ def self.edu
532
+ [
533
+ '[EDU Program] SaaS - Ultimate - 1 Year',
534
+ '[EDU Program] Self-Managed - Ultimate - 1 Year',
535
+ '[EDU Program] Self-Managed - Ultimate - 3 Year',
536
+ 'Gold Plan - 1 Year (EDU or OSS)',
537
+ 'Ultimate - 1 Year (EDU or OSS)',
538
+ 'Ultimate - 1 Year (Y Combinator)'
539
+ ]
540
+ end
541
+
542
+ ##
543
+ # Defines Community => OSS subscriptions
544
+ #
545
+ # @author Jason Colyer
546
+ # @since 1.0.26
547
+ # @return [Array]
548
+ def self.oss
549
+ [
550
+ '[OSS Program] SaaS - Ultimate - 1 Year',
551
+ '[OSS Program] SaaS - Ultimate - 1 Year',
552
+ '[OSS Program] Self-Managed - Support - 3 Year',
553
+ '[OSS Program] Self-Managed - Ultimate - 1 Year',
554
+ '[OSS Program] Self-Managed - Ultimate - 3 Year'
555
+ ]
556
+ end
557
+
558
+ ##
559
+ # Defines Community => Other subscriptions
560
+ #
561
+ # @author Jason Colyer
562
+ # @since 1.0.26
563
+ # @return [Array]
564
+ def self.community_other
565
+ [
566
+ '[Startups Program] SaaS - Ultimate - 1 Year',
567
+ '[Startups Program] Self-Managed - Ultimate - 1 Year',
568
+ 'Gold Plan - 1 Year (Y Combinator)'
569
+ ]
570
+ end
571
+
572
+ ##
573
+ # Defines Support Services => ASE subscriptions
574
+ #
575
+ # @author Jason Colyer
576
+ # @since 1.0.26
577
+ # @return [Array]
578
+ def self.ss_ase
579
+ [
580
+ 'Dedicated - Success Plan Services - 1 Year',
581
+ 'Dedicated - Success Plan Services - 2 Year',
582
+ 'Dedicated - Success Plan Services - 3 Year',
583
+ 'Dedicated - Success Plan Services - Monthly',
584
+ 'SaaS - Assigned Support Engineer - 1 Year',
585
+ 'SaaS - Assigned Support Engineer - 2 Year',
586
+ 'SaaS - Assigned Support Engineer - 3 Year',
587
+ 'SaaS - Assigned Support Engineer - 4 Year',
588
+ 'SaaS - Assigned Support Engineer - 5 Year',
589
+ 'SaaS - Assigned Support Engineer - Monthly',
590
+ 'SaaS - Success Plan Services - 1 Year',
591
+ 'SaaS - Success Plan Services - 3 Year',
592
+ 'SaaS - Success Plan Services - Monthly',
593
+ 'SaaS- Success Plan Services - 2 Year',
594
+ 'Self-Managed - Assigned Support Engineer - 1 Year',
595
+ 'Self-Managed - Assigned Support Engineer - 2 Year',
596
+ 'Self-Managed - Assigned Support Engineer - 3 Year',
597
+ 'Self-Managed - Assigned Support Engineer - 4 Year',
598
+ 'Self-Managed - Assigned Support Engineer - 5 Year',
599
+ 'Self-Managed - Assigned Support Engineer - Monthly',
600
+ 'Self-Managed - Success Plan Services - 1 Year',
601
+ 'Self-Managed - Success Plan Services - 2 Year',
602
+ 'Self-Managed - Success Plan Services - 3 Year',
603
+ 'Self-Managed - Success Plan Services - Monthly'
604
+ ]
605
+ end
606
+ end
607
+ end
608
+ end
@@ -9,8 +9,10 @@ module Readiness
9
9
  module Salesforce
10
10
  require "#{__dir__}/salesforce/accounts"
11
11
  require "#{__dir__}/salesforce/cases"
12
+ require "#{__dir__}/salesforce/contacts"
12
13
  require "#{__dir__}/salesforce/client"
13
14
  require "#{__dir__}/salesforce/configuration"
14
15
  require "#{__dir__}/salesforce/queries"
16
+ require "#{__dir__}/salesforce/subscription_definitions"
15
17
  end
16
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab_support_readiness
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.25
4
+ version: 1.0.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Colyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-18 00:00:00.000000000 Z
11
+ date: 2024-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -289,7 +289,9 @@ files:
289
289
  - lib/support_readiness/salesforce/cases.rb
290
290
  - lib/support_readiness/salesforce/client.rb
291
291
  - lib/support_readiness/salesforce/configuration.rb
292
+ - lib/support_readiness/salesforce/contacts.rb
292
293
  - lib/support_readiness/salesforce/queries.rb
294
+ - lib/support_readiness/salesforce/subscription_definitions.rb
293
295
  - lib/support_readiness/slack.rb
294
296
  - lib/support_readiness/slack/client.rb
295
297
  - lib/support_readiness/slack/configuration.rb