app_manager 1.1.7 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0c3feb475e1932e9ddce85101ac275262e5bd4f2ab9f8abd6f1201cc1d67a929
4
- data.tar.gz: b17c9dc2f616130e5a0f9e3a9c962fd55a6006342fe04caf78fb4c2a850f955d
3
+ metadata.gz: bd770dce16b7f6239b4d98067abafbf7701a3dd5b02cd4094b2f264c2ce9d8dd
4
+ data.tar.gz: 466aa7a4aba2811f53b582b0d2fa6dd7b94b2eb0430ef146729214414175ad8c
5
5
  SHA512:
6
- metadata.gz: e1f07eb0df1fc3d082abbe4a58ed404cac3a2e5d5fd3a19ca21a32183d5d67076409487612be1989016f00a637d305a643ab0739ce957d7f2cb5d94ecd9027b1
7
- data.tar.gz: 18aa4fa121cb88dac088661fb1fb06467ea890af098ac6315401e2d481b42d0b282ad2670334064e3ee95ab3e69b8e730dd4c7be2b02c7741ec7f1f53c627d05
6
+ metadata.gz: 6d6e415883e4a5e08155776f041da234c099ec0a9c17814be2013d7efafa91263d117046c35b2dd95c4a0809230a637878cb1d9e1f785b385e9f9588269547db
7
+ data.tar.gz: 0d3e02114538f9178a88cfc1e2f30409227852088755121c47dd1648d20bd1919e78228f197c41199ae02f2251fef66953ae6ee560b46389ded1bd555f48088a
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- app_manager (1.1.7)
4
+ app_manager (1.2.1)
5
5
  httparty
6
6
  kaminari (>= 0.16.3)
7
7
  rails (>= 5.2.0)
@@ -119,7 +119,7 @@ GEM
119
119
  mime-types-data (3.2022.0105)
120
120
  mini_mime (1.1.2)
121
121
  mini_portile2 (2.8.0)
122
- minitest (5.16.1)
122
+ minitest (5.16.2)
123
123
  multi_xml (0.6.0)
124
124
  net-imap (0.2.3)
125
125
  digest
@@ -146,7 +146,7 @@ GEM
146
146
  method_source (~> 1.0)
147
147
  public_suffix (4.0.6)
148
148
  racc (1.6.0)
149
- rack (2.2.3.1)
149
+ rack (2.2.4)
150
150
  rack-test (2.0.2)
151
151
  rack (>= 1.3)
152
152
  rails (7.0.3)
data/README.md CHANGED
@@ -109,8 +109,9 @@ AppManager.configure do |config|
109
109
  "description" => "Feature Description",
110
110
  "value_type" => "array",
111
111
  "values" => [
112
- "val 1",
113
- "val 2"
112
+ "val-1" => "val 1",
113
+ "val-2" => "val 2",
114
+ "val-3" => "val 3",
114
115
  ],
115
116
  "format" => "string",
116
117
  "display_order" => 4,
@@ -118,7 +119,7 @@ AppManager.configure do |config|
118
119
  "group_order" => "1",
119
120
  "group" => "Group Name",
120
121
  }
121
- ]
122
+ ]
122
123
  end
123
124
  #Required, Values type : integer, boolean, string, array #
124
125
  #Format: percentage, count, string
@@ -170,7 +171,26 @@ and then you can use follwing methods with your shop objects.
170
171
 
171
172
  @shop.get_plan # return current plan hash
172
173
 
173
- @shop.get_charge # return current charge hash
174
+ if you pass @shop.get_plan(plan_id) it will return that particular plan hash like @shop.get_plan(311)
175
+
176
+ @shop.get_charge # return current charge hash, it will return nil if current plan is free
177
+
178
+ @shop.set_default_plan(plan_id=nil) #if plan id is passed nil, then it will set the free(public and $0 price) to active and if passed it will set that plan to active plan
179
+
180
+ @shop.get_plans_by_features(feature_slugs) # pass feature_slugs as an array even if one slug and it will return plans array which have that slug found. Example:
181
+
182
+ @shop.get_plans_by_features(['quantity-based-discount'])
183
+ @shop.get_plans_by_features(['quantity-based-discount','multiple-discount-types'])
184
+
185
+
186
+ you can pass string argument 'exclude_current_plan' which will return all plans that matching features except current plan
187
+
188
+ @shop.get_plans_by_features(['quantity-based-discount'],'exclude_current_plan')
189
+ @shop.get_plans_by_features(['quantity-based-discount','multiple-discount-types'],'exclude_current_plan')
190
+
191
+
192
+ @shop.get_all_plans # return all app plans array
193
+
174
194
  ```
175
195
 
176
196
 
@@ -13,17 +13,32 @@ module AppManager
13
13
  if !@shop.nil?
14
14
  plan_obj = AppManager::Client.new
15
15
  plan_data = plan_obj.get_plan(params[:plan_id],params[:shop])
16
+ # render json: plan_data and return #use this to test plan failsafe api
16
17
  if plan_data.present? && plan_data.is_a?(Hash)
17
18
  if plan_data['price'] == 0
19
+ active_charge_data = plan_obj.get_charge(params[:shop])
20
+ begin
21
+ if active_charge_data && active_charge_data.any? && !active_charge_data['active_charge']['charge_id'].nil?
22
+ gq_obj = AppManager::GraphqlHelper.new(@shop.shopify_domain,@shop.shopify_token)
23
+ rec_cancel_data = gq_obj.recurring_charge_cancel_api_call(active_charge_data['active_charge']['charge_id'],@shop)
24
+ if !rec_cancel_data["errors"].present? && (rec_cancel_data["data"].present? && rec_cancel_data["data"]["appSubscriptionCancel"].present? && !rec_cancel_data["data"]["appSubscriptionCreate"]["userErrors"].any? && (rec_cancel_data["data"]["appSubscriptionCancel"]["appSubscription"]["status"] == 'CANCELLED'))
25
+ plan_obj.cancel_charge(params[:shop],active_charge_data['active_charge']['plan_id'])
26
+ end
27
+ end
28
+ rescue Exception => e
29
+ Rails.logger.info "APP MANAGER >>>> #{e.inspect}"
30
+ end
31
+
18
32
  if @shop.update(@plan_field => params[:plan_id])
19
33
  begin
20
34
  AppManager::EventHandler.new('charge_created',{
21
35
  "plan" => plan_data,
22
36
  "charge" => nil,
23
- "previous_charge" => nil
37
+ "previous_charge" => nil,
38
+ "shopify_domain" => params[:shop]
24
39
  })
25
40
  rescue Exception => e
26
- Rails.logger.info "APP MANGAGER >>>> #{e.inspect}"
41
+ Rails.logger.info "APP MANAGER >>>> #{e.inspect}"
27
42
  end
28
43
  AppManager.clear_cache
29
44
  render json: {'redirect_url' => "#{app_url}?shop=#{params[:shop]}"} and return true
@@ -68,17 +83,17 @@ module AppManager
68
83
  plan_data = plan_obj.get_plan(params[:plan],params[:shop])
69
84
 
70
85
  charge = charges.parsed_response['recurring_application_charge']
71
- charge['charge_id'] = charge['id'];
72
- charge['type'] = 'recurring';
73
- charge['plan_id'] = params[:plan];
74
- charge['shop_domain'] = params[:shop];
75
- charge['interval'] = plan_data['interval']['value'];
86
+ charge['charge_id'] = charge['id']
87
+ charge['type'] = 'recurring'
88
+ charge['plan_id'] = params[:plan]
89
+ charge['shop_domain'] = params[:shop]
90
+ charge['interval'] = plan_data['interval']['value']
76
91
 
77
92
  if !@plan_field.nil?
78
93
  begin
79
94
  plan_obj.cancel_charge(@shop[shopify_domain],@shop[@plan_field])
80
95
  rescue Exception => e
81
- Rails.logger.info "APP MANGAGER >>>> #{e.inspect}"
96
+ Rails.logger.info "APP MANAGER >>>> #{e.inspect}"
82
97
  end
83
98
  end
84
99
 
@@ -93,10 +108,11 @@ module AppManager
93
108
  AppManager::EventHandler.new('charge_created',{
94
109
  "plan" => plan_data,
95
110
  "charge" => charge,
96
- "previous_charge" => charge_data ? (charge_data['cancelled_charge'] || nil) : nil
111
+ "previous_charge" => charge_data ? (charge_data['cancelled_charge'] || nil) : nil,
112
+ "shopify_domain" => params[:shop]
97
113
  })
98
114
  rescue Exception => e
99
- Rails.logger.info "APP MANGAGER >>>> #{e.inspect}"
115
+ Rails.logger.info "APP MANAGER >>>> #{e.inspect}"
100
116
  end
101
117
  end
102
118
  redirect_to "#{app_url}?shop=#{params[:shop]}", :status => 301 and return
@@ -13,36 +13,38 @@ module AppManager
13
13
 
14
14
  def plans
15
15
  active_plan_id_or_name = shopify_plan = plan = nil
16
+ active_charge = nil
16
17
  default_plan_id = nil
17
18
  choose_later = false
18
19
  plan_obj = AppManager::Client.new
19
20
  plans = []
20
21
  if params[:shop_domain].present? && !AppManager.configuration.plan_features.nil?
21
- plans = plan_obj.get_plans(params[:shop_domain])
22
22
  @shop = shop_data
23
23
  if !@shop.nil?
24
- active_plan_id_or_name = @shop[@plan_field]
24
+ active_plan_id_or_name = @shop[@plan_field] rescue nil
25
+ plans = plan_obj.get_plans(params[:shop_domain],active_plan_id_or_name)
25
26
  if !@field_names.nil? && @field_names.has_key?('shopify_plan') && !@field_names.nil?
26
27
  shopify_plan_field = AppManager.configuration.field_names['shopify_plan']
27
28
  shopify_plan = @shop[shopify_plan_field] rescue nil
28
- plan = plans.any? && !active_plan_id_or_name.nil? ? (plans.find{|x| x["id"] == active_plan_id_or_name}.present? ? plans.find{|x| x["id"] == active_plan_id_or_name} : nil ) : nil
29
+ plan = plans && plans.any? && !active_plan_id_or_name.nil? ? (plans.find{|x| x["id"] == active_plan_id_or_name}.present? ? plans.find{|x| x["id"] == active_plan_id_or_name} : nil ) : nil
29
30
 
30
31
  @trial_activated_field = AppManager.configuration.field_names['trial_activated_at']
31
32
  trial_activated_at = @shop[@trial_activated_field] rescue nil
32
33
  active_charge = plan_obj.get_charge(params[:shop_domain])
33
- if active_charge.any? && active_charge['active_charge'].nil? && active_charge['cancelled_charge'].nil? && trial_activated_at
34
+ if active_charge && active_charge.any? && active_charge['active_charge'].nil? && active_charge['cancelled_charge'].nil? && !trial_activated_at
34
35
  choose_later = true
35
36
  end
36
37
 
37
38
  end
38
39
  else
39
- Rails.logger.info "APP MANGAGER >>>> Either model is defined wrong or config.plan_id_or_name_field is nil in initializer ==="
40
+ Rails.logger.info "APP MANAGER >>>> Either model is defined wrong or config.plan_id_or_name_field is nil in initializer ==="
40
41
  end
41
42
  else
42
- Rails.logger.info "APP MANGAGER >>>> Either params missing store_domain or config.plan_features is nil in initializer ==="
43
+ Rails.logger.info "APP MANAGER >>>> Either params missing store_domain or config.plan_features is nil in initializer ==="
43
44
  end
44
45
 
45
46
 
47
+ plans = plan_obj.get_plans(params[:shop_domain]) if plans && plans.blank?
46
48
  default_plan_data = plans.select{|x| x['choose_later_plan'] == true }
47
49
  if default_plan_data.any?
48
50
  if default_plan_data.select{|x| x['store_base_plan'] == true }.size > 0
@@ -63,7 +65,8 @@ module AppManager
63
65
  'shopify_plan' => shopify_plan,
64
66
  'plan' => plan,
65
67
  'default_plan_id' => default_plan_id,
66
- 'choose_later' => choose_later
68
+ 'choose_later' => choose_later,
69
+ 'has_active_charge' => (!active_charge['active_charge'].nil? ? true : false)
67
70
  }
68
71
  render json: response
69
72
  end
@@ -118,8 +121,24 @@ module AppManager
118
121
  if params[:shop_domain].present? && params[:plan_id].present? && model
119
122
  @shop = shop_data
120
123
  @trial_activated_field = AppManager.configuration.field_names['trial_activated_at']
121
- @shop.update(@plan_field => params[:plan_id],@trial_activated_field => DateTime.now)
122
- render json: {'status' => true}
124
+ if @shop.update(@plan_field => params[:plan_id],@trial_activated_field => DateTime.now)
125
+ begin
126
+ plan_obj = AppManager::Client.new
127
+ plan_data = plan_obj.get_plan(params[:plan_id],params[:shop_domain]) rescue nil
128
+ AppManager::EventHandler.new('charge_created',{
129
+ "plan" => plan_data,
130
+ "charge" => nil,
131
+ "previous_charge" => nil,
132
+ "choose_later" => true,
133
+ "shopify_domain" => params[:shop_domain]
134
+ })
135
+ rescue Exception => e
136
+ Rails.logger.info "APP MANAGER >>>> #{e.inspect}"
137
+ end
138
+ render json: {'status' => true}
139
+ else
140
+ render json: {'status' => false,'error' => "#{@shop.errors.full_messages.to_sentence}"}, status: 422
141
+ end
123
142
  else
124
143
  render json: {'status' => false,'error' => 'Shop not found or missing shop'}, status: 422
125
144
  end
@@ -139,13 +158,13 @@ module AppManager
139
158
  begin
140
159
  @fs.sync_app_manager
141
160
  rescue Exception => e
142
- Rails.logger.info "APP MANGAGER >>>> LOCAL DB couldn't sync with POTAL DB #{e.inspect}"
161
+ Rails.logger.info "APP MANAGER >>>> LOCAL DB couldn't sync with POTAL DB #{e.inspect}"
143
162
  end
144
163
 
145
164
  begin
146
165
  @fs.save_api_data(params)
147
166
  rescue Exception => e
148
- Rails.logger.info "APP MANGAGER >>>> #{e.inspect}"
167
+ Rails.logger.info "APP MANAGER >>>> #{e.inspect}"
149
168
  end
150
169
  AppManager.clear_cache
151
170
  end
@@ -2,8 +2,8 @@ module AppManager
2
2
  class Client
3
3
  module Plans
4
4
 
5
- def get_plans(shop_domain)
6
- get("/plans?shop_domain=#{shop_domain}")
5
+ def get_plans(shop_domain,active_plan_id=nil)
6
+ get("/plans?shop_domain=#{shop_domain}&active_plan_id=#{active_plan_id}")
7
7
  end
8
8
 
9
9
  def get_plan(plan_id,shop_domain=nil)
@@ -18,6 +18,10 @@ module AppManager
18
18
  post("/cancel-charge", {shop_domain: shop_domain,plan_id: plan_id})
19
19
  end
20
20
 
21
+ def update_charge(shop_domain,plan_id)
22
+ post("/update-charge", {shop_domain: shop_domain,plan_id: plan_id})
23
+ end
24
+
21
25
  def sync_charge(options = {})
22
26
  post("/sync-charge", options)
23
27
  end
@@ -28,37 +28,37 @@ module AppManager
28
28
  begin
29
29
  save_api_plans(params["plans"])
30
30
  rescue Exception => e
31
- Rails.logger.info "APP MANGAGER >>>> #{e.inspect}"
31
+ Rails.logger.info "APP MANAGER >>>> #{e.inspect}"
32
32
  end
33
33
  begin
34
34
  save_api_charges(params["charges"])
35
35
  rescue Exception => e
36
- Rails.logger.info "APP MANGAGER >>>> #{e.inspect}"
36
+ Rails.logger.info "APP MANAGER >>>> #{e.inspect}"
37
37
  end
38
38
  begin
39
39
  save_api_apps(params["apps"])
40
40
  rescue Exception => e
41
- Rails.logger.info "APP MANGAGER >>>> #{e.inspect}"
41
+ Rails.logger.info "APP MANAGER >>>> #{e.inspect}"
42
42
  end
43
43
  begin
44
44
  save_api_app_structures(params["app_structures"])
45
45
  rescue Exception => e
46
- Rails.logger.info "APP MANGAGER >>>> #{e.inspect}"
46
+ Rails.logger.info "APP MANAGER >>>> #{e.inspect}"
47
47
  end
48
48
  begin
49
49
  save_api_discount_plans(params["discount_plans"])
50
50
  rescue Exception => e
51
- Rails.logger.info "APP MANGAGER >>>> #{e.inspect}"
51
+ Rails.logger.info "APP MANAGER >>>> #{e.inspect}"
52
52
  end
53
53
  begin
54
54
  save_api_extend_trials(params["extend_trials"])
55
55
  rescue Exception => e
56
- Rails.logger.info "APP MANGAGER >>>> #{e.inspect}"
56
+ Rails.logger.info "APP MANAGER >>>> #{e.inspect}"
57
57
  end
58
58
  begin
59
59
  save_api_plan_users(params["plan_users"])
60
60
  rescue Exception => e
61
- Rails.logger.info "APP MANGAGER >>>> #{e.inspect}"
61
+ Rails.logger.info "APP MANAGER >>>> #{e.inspect}"
62
62
  end
63
63
  end
64
64
 
@@ -194,11 +194,22 @@ module AppManager
194
194
 
195
195
 
196
196
  def get_local_plans(params)
197
+
197
198
  plans_data = []
198
199
 
199
200
  active_plan_id = nil
201
+ active_charge_price = nil
202
+
200
203
  charges = @apm_db.execute( "SELECT * FROM charges WHERE shop_domain = ? ",params['shop_domain'])
201
- active_plan_id = charges.first['plan_id'] if charges.any?
204
+
205
+ if charges.any?
206
+ active_plan_id = charges.first['plan_id']
207
+ active_charge_price = charges.first['price']
208
+ elsif params['active_plan_id'].present? && !params['active_plan_id'].nil?
209
+ active_plan_id = params['active_plan_id']
210
+ plan_data = @apm_db.execute( "SELECT * FROM plans WHERE id = ?", active_plan_id)
211
+ active_charge_price = plan_data.first['price'] if plan_data.any?
212
+ end
202
213
 
203
214
  custom_plan_ids = []
204
215
  plan_users = @apm_db.execute( "SELECT * FROM plan_users WHERE shop_domain = ? ",params['shop_domain'])
@@ -232,7 +243,7 @@ module AppManager
232
243
  new_plan[key] = val.collect{|e|e['value']}
233
244
  elsif ['affiliate'].include?(key)
234
245
  new_plan[key] = eval(value)
235
- elsif ['is_custom','public','store_base_plan'].include?(key)
246
+ elsif ['is_custom','public','store_base_plan','choose_later_plan'].include?(key)
236
247
  new_plan[key] = (value == 0 ? false : true)
237
248
  elsif ['test'].include?(key)
238
249
  new_plan[key] = (value == 0 ? nil : true)
@@ -255,12 +266,41 @@ module AppManager
255
266
  features_by_plan.each do |fp|
256
267
  fp['name'] = features.find{|e| e['uuid'] == fp['feature_id']}['name'] rescue nil
257
268
  fp['format'] = features.find{|e| e['uuid'] == fp['feature_id']}['format'] rescue nil
269
+ fp['slug'] = features.find{|e| e['uuid'] == fp['feature_id']}['slug'] rescue nil
258
270
  features_by_plans_data.push(fp)
259
271
  end
260
272
  end
261
273
  end
262
274
 
275
+
276
+ custom_discounts_data = []
277
+ if params["shop_domain"].present? && plan_data
278
+ custom_discounts = @apm_db.execute( "SELECT * FROM discount_plans WHERE shop_domain = ? ORDER BY created_at DESC", params["shop_domain"])
279
+ if custom_discounts.any?
280
+ custom_discounts.each do |custom_discount|
281
+ new_custom_discount = {}
282
+ custom_discount.each_with_index do |(key, value), index|
283
+ new_custom_discount[key] = value unless key.class == Integer
284
+ end
285
+ custom_discounts_data.push(new_custom_discount)
286
+ end
287
+ end
288
+ end
289
+
263
290
  plans_data.each do |plan|
291
+ if (!active_plan_id.nil? && plan['id'] == active_plan_id)
292
+ plan['price'] = active_charge_price
293
+ end
294
+
295
+ if custom_discounts_data.any? && custom_discounts_data.select{|e| e['plan_id'] == plan['id']}.size > 0
296
+ cd_hash = {}
297
+ custom_discounts_data.select{|e| e['plan_id'] == plan['id']}.each do |cd|
298
+ plan['discount'] = cd['discount']
299
+ plan['discount_type'] = cd['discount_type']
300
+ plan['cycle_count'] = cd['cycle_count']
301
+ end
302
+ end
303
+
264
304
  if features_by_plans_data.select{|e| e['plan_id'] == plan['id']}.size > 0
265
305
  feature_hash = {}
266
306
  features_by_plans_data.select{|e| e['plan_id'] == plan['id']}.each do |fp|
@@ -271,11 +311,14 @@ module AppManager
271
311
  features = nil
272
312
  end
273
313
  plan['features'] = features
314
+ plan['old_plan_id'] = nil
315
+
274
316
  end
275
317
 
276
318
  plans = plans_data
277
319
  end
278
320
 
321
+
279
322
  return plans
280
323
  end
281
324
 
@@ -291,7 +334,7 @@ module AppManager
291
334
  new_plan[key] = val
292
335
  elsif ['shopify_plans','affiliate','features'].include?(key)
293
336
  new_plan[key] = eval(value)
294
- elsif ['is_custom','public','store_base_plan'].include?(key)
337
+ elsif ['is_custom','public','store_base_plan','choose_later_plan'].include?(key)
295
338
  new_plan[key] = (value == 0 ? false : true)
296
339
  elsif ['test'].include?(key)
297
340
  new_plan[key] = (value == 0 ? nil : true)
@@ -308,7 +351,7 @@ module AppManager
308
351
  end
309
352
  plan_data['app'] = app_data
310
353
  end
311
-
354
+ plan_data['old_plan_id'] = nil # Temporary for migration puspose only
312
355
  if params["shop_domain"].present? && plan_data
313
356
  @apm_db.execute( "SELECT * FROM discount_plans WHERE plan_id = ? AND shop_domain = ? ", params["plan_id"],params["shop_domain"]) do |cd|
314
357
  plan_data['discount'] = cd['discount'] if cd rescue plan_data['discount']
@@ -322,6 +365,7 @@ module AppManager
322
365
  end
323
366
 
324
367
  end
368
+
325
369
  return plan_data
326
370
  end
327
371
 
@@ -122,6 +122,32 @@ module AppManager
122
122
  return data
123
123
  end
124
124
 
125
+
126
+ def recurring_charge_cancel_api_call(charge_id,shop)
127
+ query = 'mutation(
128
+ $id: ID!
129
+ ){
130
+ appSubscriptionCancel(
131
+ id: $id
132
+ ) {
133
+ userErrors {
134
+ field
135
+ message
136
+ }
137
+ appSubscription {
138
+ id
139
+ status
140
+ }
141
+ }
142
+ }
143
+ '
144
+ variables = {
145
+ "id": "gid://shopify/AppSubscription/#{charge_id}"
146
+ }
147
+ data = run_graph_api(query,variables)
148
+ return data
149
+ end
150
+
125
151
  end
126
152
  end
127
153
 
@@ -31,7 +31,8 @@ module AppManager
31
31
  def plan_features
32
32
  plan_id = self[AppManager.configuration.plan_id_or_name_field]
33
33
  if !plan_id
34
- raise Error, "Plan id not found"
34
+ Rails.logger.info "Plan id found nil or not set in DB"
35
+ return []
35
36
  end
36
37
  plan_obj = AppManager::Client.new
37
38
  plans = plan_obj.get_plan(plan_id)
@@ -64,34 +65,86 @@ module AppManager
64
65
  end
65
66
 
66
67
  def get_remaining_days
67
- shop_domain = self[AppManager.configuration.shopify_domain_field]
68
- trial_activated_at_field = AppManager.configuration.field_names['trial_activated_at']
69
- trial_activated_at_val = self[trial_activated_at_field]
70
- plan_field = AppManager.configuration.field_names['plan_id']
71
- plan_id = self[plan_field]
72
- plan_obj = AppManager::Client.new
73
- shop_domain ? plan_obj.get_remaining_days(shop_domain,trial_activated_at_val,plan_id) : 0
68
+ begin
69
+ shop_domain = self[AppManager.configuration.shopify_domain_field]
70
+ trial_activated_at_field = AppManager.configuration.field_names['trial_activated_at']
71
+ trial_activated_at_val = self[trial_activated_at_field]
72
+ plan_field = AppManager.configuration.field_names['plan_id']
73
+ plan_id = self[plan_field]
74
+ plan_obj = AppManager::Client.new
75
+ shop_domain ? plan_obj.get_remaining_days(shop_domain,trial_activated_at_val,plan_id) : 0
76
+ rescue Exception => e
77
+ return "#{e.inspect}"
78
+ end
74
79
  end
75
80
 
76
81
 
77
- def get_plan
78
- if !self[AppManager.configuration.plan_id_or_name_field]
79
- raise Error, "Invalid params, must have charge_id,shop && plan"
82
+ def get_plan(plan_id=nil)
83
+ req_plan_id = nil
84
+ if !plan_id.nil?
85
+ req_plan_id = plan_id
86
+ else
87
+ shop_plan_id = self[AppManager.configuration.plan_id_or_name_field]
88
+ if shop_plan_id && !shop_plan_id.nil?
89
+ req_plan_id = shop_plan_id
90
+ else
91
+ Rails.logger.info "Invalid params, must have charge_id,shop && plan"
92
+ return {}
93
+ end
80
94
  end
81
- plan_obj = AppManager::Client.new
82
- return plan_obj.get_plan(self[AppManager.configuration.plan_id_or_name_field])
95
+ plan_obj = AppManager::Client.new if req_plan_id
96
+ return req_plan_id ? plan_obj.get_plan(req_plan_id) : {}
83
97
  end
84
98
 
85
99
  def get_charge
100
+ shop_plan_id = self[AppManager.configuration.plan_id_or_name_field]
101
+ found_free_plan = false
102
+ if shop_plan_id && !shop_plan_id.nil?
103
+ plan_obj = AppManager::Client.new
104
+ plan = plan_obj.get_plan(shop_plan_id) rescue nil
105
+ if plan && plan['price'] == 0 && plan['public'] == true
106
+ found_free_plan = true
107
+ return nil
108
+ end
109
+ end
110
+ if !found_free_plan
111
+ begin
112
+ shop_domain = self[AppManager.configuration.shopify_domain_field]
113
+ plan_obj = AppManager::Client.new
114
+ return plan_obj.get_charge(shop_domain)
115
+ rescue Exception => e
116
+ Rails.logger.info "#{e.inspect}"
117
+ return nil
118
+ end
119
+ end
120
+ end
121
+
122
+ def get_all_plans
86
123
  begin
87
124
  shop_domain = self[AppManager.configuration.shopify_domain_field]
125
+ shop_plan_id = self[AppManager.configuration.plan_id_or_name_field]
126
+ active_plan_id = shop_plan_id && shop_plan_id.nil? ? nil : shop_plan_id
88
127
  plan_obj = AppManager::Client.new
89
- return plan_obj.get_charge(shop_domain)
128
+ return plan_obj.get_plans(shop_domain,active_plan_id)
90
129
  rescue Exception => e
91
- return "#{e.inspect}"
130
+ Rails.logger.info "#{e.inspect}"
131
+ return []
92
132
  end
93
133
  end
94
134
 
135
+ def cancel_charge
136
+ begin
137
+ shop_plan_id = self[AppManager.configuration.plan_id_or_name_field]
138
+ shop_domain = self[AppManager.configuration.shopify_domain_field]
139
+ if shop_plan_id && shop_domain
140
+ plan_obj = AppManager::Client.new
141
+ plan_obj.cancel_charge(shop_domain,shop_plan_id)
142
+ end
143
+ rescue Exception => e
144
+ return "#{e.inspect}"
145
+ end
146
+ end
147
+
95
148
  def set_default_plan(plan_id=nil)
96
149
  begin
97
150
  if plan_id.nil?
@@ -117,15 +170,17 @@ module AppManager
117
170
 
118
171
 
119
172
 
120
- def get_plans_by_features(feature_slugs)
173
+ def get_plans_by_features(feature_slugs,params="false")
121
174
  if feature_slugs.any?
175
+ shop_plan_id = self[AppManager.configuration.plan_id_or_name_field]
122
176
  plan_data = []
123
177
  shop_domain = self[AppManager.configuration.shopify_domain_field]
124
178
  plan_obj = AppManager::Client.new
125
179
  plans = plan_obj.get_plans(shop_domain)
126
180
  plans = plans.select{|x| x['interval'] == 'EVERY_30_DAYS' && x['public'] == true}
127
181
  plans.each do |plan|
128
- if plan['features'].any? && plan['features'].values.any? && plan['features'].values.collect{|c| c['slug']}.any?
182
+ next if (params && !params.nil? && params == "exclude_current_plan" && !shop_plan_id.nil? && plan["id"] == shop_plan_id)
183
+ if plan && (plan['features'] && plan['features'].any?) && (plan['features'].values && plan['features'].values.any?) && (plan['features'].values.collect{|c| c['slug']} && plan['features'].values.collect{|c| c['slug']}.any?)
129
184
  plan_feature_slugs = plan['features'].values.collect{|c| c['slug']}.sort
130
185
  if (feature_slugs & plan_feature_slugs).any? && ((feature_slugs & plan_feature_slugs).sort == feature_slugs.sort)
131
186
  plan_data.push(plan)
@@ -138,6 +193,8 @@ module AppManager
138
193
  end
139
194
  end
140
195
 
196
+
197
+
141
198
  private
142
199
 
143
200
  def casted_value(value,value_type)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppManager
4
- VERSION = "1.1.7"
4
+ VERSION = "1.2.1"
5
5
  end
@@ -61,8 +61,9 @@ AppManager.configure do |config|
61
61
  "description" => "Feature Description",
62
62
  "value_type" => "array",
63
63
  "values" => [
64
- "val 1",
65
- "val 2"
64
+ "val-1" => "val 1",
65
+ "val-2" => "val 2",
66
+ "val-3" => "val 3",
66
67
  ],
67
68
  "format" => "string",
68
69
  "display_order" => 4,
@@ -83,5 +84,6 @@ end
83
84
  ActiveSupport::Notifications.subscribe "charge_created" do |name, start, finish, id, payload|
84
85
  Rails.logger.debug "========APP MANAGER========="
85
86
  Rails.logger.debug "DATA : #{payload}"
87
+ #payload hash contains 3 keys, "plan", "charge", "previous_charge" and an extra key "choose_later" => "true" renders when clicked on choose later
86
88
  Rails.logger.debug "========APP MANAGER========="
87
89
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: app_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.7
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hulkapps
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-30 00:00:00.000000000 Z
11
+ date: 2022-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty