trex-model 1.5.5__tar.gz → 1.5.7__tar.gz

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.

Potentially problematic release.


This version of trex-model might be problematic. Click here for more details.

Files changed (61) hide show
  1. {trex-model-1.5.5 → trex-model-1.5.7}/PKG-INFO +1 -1
  2. {trex-model-1.5.5 → trex-model-1.5.7}/setup.py +1 -1
  3. {trex-model-1.5.5 → trex-model-1.5.7}/trex_model.egg-info/PKG-INFO +1 -1
  4. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/customer_models.py +49 -0
  5. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/loyalty_models.py +53 -29
  6. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/merchant_models.py +19 -1
  7. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/ndb_models.py +15 -0
  8. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/program_models.py +23 -3
  9. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/reward_models.py +6 -0
  10. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/merchant_helpers.py +6 -3
  11. {trex-model-1.5.5 → trex-model-1.5.7}/LICENSE +0 -0
  12. {trex-model-1.5.5 → trex-model-1.5.7}/MANIFEST.in +0 -0
  13. {trex-model-1.5.5 → trex-model-1.5.7}/README.md +0 -0
  14. {trex-model-1.5.5 → trex-model-1.5.7}/setup.cfg +0 -0
  15. {trex-model-1.5.5 → trex-model-1.5.7}/trex_model.egg-info/SOURCES.txt +0 -0
  16. {trex-model-1.5.5 → trex-model-1.5.7}/trex_model.egg-info/dependency_links.txt +0 -0
  17. {trex-model-1.5.5 → trex-model-1.5.7}/trex_model.egg-info/requires.txt +0 -0
  18. {trex-model-1.5.5 → trex-model-1.5.7}/trex_model.egg-info/top_level.txt +0 -0
  19. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/__init__.py +0 -0
  20. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/conf.py +0 -0
  21. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/__init__.py +0 -0
  22. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/__init__.py +0 -0
  23. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/admin_models.py +0 -0
  24. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/analytic_models.py +0 -0
  25. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/app_models.py +0 -0
  26. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/coporate_models.py +0 -0
  27. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/customer_model_helpers.py +0 -0
  28. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/fb_subsriber_models.py +0 -0
  29. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/import_models.py +0 -0
  30. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/inventory_model.py +0 -0
  31. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/lucky_draw_models.py +0 -0
  32. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/marketing_models.py +0 -0
  33. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/membership_models.py +0 -0
  34. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/message_model_helper.py +0 -0
  35. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/message_models.py +0 -0
  36. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/model_decorators.py +0 -0
  37. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/pos_models.py +0 -0
  38. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/prepaid_models.py +0 -0
  39. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/product_models.py +0 -0
  40. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/rating_models.py +0 -0
  41. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/recruit_models.py +0 -0
  42. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/redeem_models.py +0 -0
  43. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/redemption_catalogue_models.py +0 -0
  44. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/referral_program_model.py +0 -0
  45. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/reward_model_helpers.py +0 -0
  46. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/spending_base_program_model.py +0 -0
  47. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/system_models.py +0 -0
  48. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/task_models.py +0 -0
  49. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/test_models.py +0 -0
  50. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/transaction_models.py +0 -0
  51. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/user_models.py +0 -0
  52. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/datastore/voucher_models.py +0 -0
  53. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/model_decorator.py +0 -0
  54. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/models/prepaid_helpers.py +0 -0
  55. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/pos_conf.py +0 -0
  56. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/program_conf.py +0 -0
  57. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/utils/__init__.py +0 -0
  58. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/utils/gcloud/__init__.py +0 -0
  59. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/utils/gcloud/datastore_util.py +0 -0
  60. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/utils/model/__init__.py +0 -0
  61. {trex-model-1.5.5 → trex-model-1.5.7}/trexmodel/utils/model/model_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: trex-model
3
- Version: 1.5.5
3
+ Version: 1.5.7
4
4
  Summary: TRex database module package
5
5
  Home-page: https://bitbucket.org/lokjac/trex-model
6
6
  Author: Jack Lok
@@ -3,7 +3,7 @@ with open("README.md", "r") as fh:
3
3
  long_description = fh.read()
4
4
  setuptools.setup(
5
5
  name='trex-model',
6
- version='1.5.5',
6
+ version='1.5.7',
7
7
  author="Jack Lok",
8
8
  author_email="sglok77@gmail.com",
9
9
  description="TRex database module package",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: trex-model
3
- Version: 1.5.5
3
+ Version: 1.5.7
4
4
  Summary: TRex database module package
5
5
  Home-page: https://bitbucket.org/lokjac/trex-model
6
6
  Author: Jack Lok
@@ -277,6 +277,14 @@ class Customer(BaseNModel, DictModel, FullTextSearchable):
277
277
  ticket.patch_prize_image_base_url()
278
278
  Customer.update_ticket_into_lucky_draw_ticket_summary(customer_acct, ticket.to_configuration())
279
279
 
280
+ @staticmethod
281
+ def list_by_customer_key_list(customer_keys_list):
282
+ ndb_keys_list = []
283
+ for k in customer_keys_list:
284
+ ndb_keys_list.append(ndb.Key(urlsafe=k))
285
+
286
+ return Customer.fetch_multi(ndb_keys_list)
287
+
280
288
  @classmethod
281
289
  def get_by_reference_code(cls, reference_code, merchant_acct):
282
290
  return cls.query(ndb.AND(cls.reference_code==reference_code, cls.merchant_acct==merchant_acct.create_ndb_key())).get()
@@ -375,6 +383,29 @@ class Customer(BaseNModel, DictModel, FullTextSearchable):
375
383
 
376
384
  return created_customer
377
385
 
386
+ @classmethod
387
+ def list_last_active_customer_by_range(cls, merchant_acct, last_active_date_since, last_active_date_end,
388
+ offset=0, limit=conf.MAX_FETCH_RECORD, start_cursor=None, return_with_cursor=False):
389
+ query = cls.query(ndb.AND(
390
+ cls.merchant_acct==merchant_acct.create_ndb_key(),
391
+ cls.last_transact_datetime>=last_active_date_since,
392
+ cls.last_transact_datetime<last_active_date_end,
393
+
394
+ )).order(-cls.last_transact_datetime)
395
+
396
+ return cls.list_all_with_condition_query(query, offset=offset, limit=limit, start_cursor=start_cursor, return_with_cursor=return_with_cursor)
397
+
398
+ @classmethod
399
+ def count_last_active_customer_by_range(cls, merchant_acct, last_active_date_since, last_active_date_end, limit=conf.MAX_FETCH_RECORD,):
400
+ query = cls.query(ndb.AND(
401
+ cls.merchant_acct==merchant_acct.create_ndb_key(),
402
+ cls.last_transact_datetime>=last_active_date_since,
403
+ cls.last_transact_datetime<=last_active_date_end,
404
+
405
+ ))
406
+
407
+ return cls.count_with_condition_query(query)
408
+
378
409
  @classmethod
379
410
  def list(cls, offset=0, limit=conf.MAX_FETCH_RECORD, start_cursor=None, return_with_cursor=False, keys_only=False):
380
411
  query = cls.query()
@@ -787,6 +818,24 @@ class CustomerMembership(BaseNModel, DictModel):
787
818
  ), ancestor=customer.create_ndb_key()).get()
788
819
 
789
820
 
821
+ @staticmethod
822
+ def count_merchant_customer_membership(merchant_acct):
823
+ if merchant_acct:
824
+ query = CustomerMembership.query(ndb.AND(CustomerMembership.merchant_acct==merchant_acct.create_ndb_key()))
825
+ else:
826
+ query = CustomerMembership.query()
827
+
828
+ return CustomerMembership.count_with_condition_query(query)
829
+
830
+ @staticmethod
831
+ def list_merchant_customer_membership(merchant_acct, limit=conf.MAX_FETCH_RECORD, start_cursor=None, return_with_cursor=False):
832
+ if merchant_acct:
833
+ query = CustomerMembership.query(ndb.AND(CustomerMembership.merchant_acct==merchant_acct.create_ndb_key()))
834
+ else:
835
+ query = CustomerMembership.query()
836
+
837
+ return CustomerMembership.list_all_with_condition_query(query, limit=limit, start_cursor=start_cursor, return_with_cursor=return_with_cursor, keys_only=False)
838
+
790
839
  @staticmethod
791
840
  def list_all_by_customer(customer, limit = conf.MAX_FETCH_RECORD, offset=0, keys_only=False):
792
841
  return CustomerMembership.query(ancestor=customer.create_ndb_key()).fetch(offset=offset, limit=limit, keys_only=keys_only)
@@ -20,18 +20,23 @@ class LoyaltyDeviceSetting(BaseNModel,DictModel):
20
20
  '''
21
21
  merchant_acct as ancestor
22
22
  '''
23
- device_name = ndb.StringProperty(required=True)
24
- activation_code = ndb.StringProperty(required=True)
25
- device_id = ndb.StringProperty(required=False)
26
- activated = ndb.BooleanProperty(required=True, default=False)
27
- assigned_outlet = ndb.KeyProperty(name="assigned_outlet", kind=Outlet)
28
- created_datetime = ndb.DateTimeProperty(required=True, auto_now_add=True)
29
- activated_datetime = ndb.DateTimeProperty(required=False)
30
- testing = ndb.BooleanProperty(required=False, default=False)
31
- device_details = ndb.JsonProperty()
23
+ device_name = ndb.StringProperty(required=True)
24
+ activation_code = ndb.StringProperty(required=True)
25
+ device_id = ndb.StringProperty(required=False)
26
+ enable_lock_screen = ndb.BooleanProperty(required=True, default=False)
27
+ lock_screen_code = ndb.StringProperty(required=False, default='')
28
+ lock_screen_length_in_second = ndb.IntegerProperty(required=False, default=30)
29
+ activated = ndb.BooleanProperty(required=True, default=False)
30
+ assigned_outlet = ndb.KeyProperty(name="assigned_outlet", kind=Outlet)
31
+ created_datetime = ndb.DateTimeProperty(required=True, auto_now_add=True)
32
+ activated_datetime = ndb.DateTimeProperty(required=False)
33
+ testing = ndb.BooleanProperty(required=False, default=False)
34
+ device_details = ndb.JsonProperty()
32
35
 
33
36
  dict_properties = ['device_name', 'activation_code', 'device_id', 'activated', 'assigned_outlet_key',
34
- 'activated_datetime', 'created_datetime', 'device_details']
37
+ 'activated_datetime', 'created_datetime', 'device_details',
38
+ 'enable_lock_screen', 'lock_screen_code', 'lock_screen_length_in_second'
39
+ ]
35
40
 
36
41
  @property
37
42
  def device_tokens_list(self):
@@ -61,7 +66,11 @@ class LoyaltyDeviceSetting(BaseNModel,DictModel):
61
66
  return self.assigned_outlet_entity.merchant_acct_entity
62
67
 
63
68
  @staticmethod
64
- def create(device_name, merchant_acct, assign_outlet):
69
+ def create(device_name, merchant_acct, assign_outlet,
70
+ enable_lock_screen,
71
+ lock_screen_code,
72
+ lock_screen_length_in_second,
73
+ ):
65
74
  activation_code = random_number(16)
66
75
  checking_activation_device_setting = LoyaltyDeviceSetting.get_by_activation_code(activation_code)
67
76
  regenerate_activation_code = False
@@ -77,10 +86,13 @@ class LoyaltyDeviceSetting(BaseNModel,DictModel):
77
86
 
78
87
 
79
88
  device_setting = LoyaltyDeviceSetting(
80
- parent = merchant_acct.create_ndb_key(),
81
- device_name = device_name,
82
- activation_code = activation_code,
83
- assigned_outlet = assign_outlet.create_ndb_key(),
89
+ parent = merchant_acct.create_ndb_key(),
90
+ device_name = device_name,
91
+ activation_code = activation_code,
92
+ assigned_outlet = assign_outlet.create_ndb_key(),
93
+ enable_lock_screen = enable_lock_screen,
94
+ lock_screen_code = lock_screen_code,
95
+ lock_screen_length_in_second = lock_screen_length_in_second,
84
96
 
85
97
  )
86
98
 
@@ -88,10 +100,17 @@ class LoyaltyDeviceSetting(BaseNModel,DictModel):
88
100
  return device_setting
89
101
 
90
102
  @staticmethod
91
- def update(pos_setting_key, device_name, assigned_outlet):
92
- checking_device_setting = LoyaltyDeviceSetting.fetch(pos_setting_key)
93
- checking_device_setting.device_name = device_name
94
- checking_device_setting.assigned_outlet = assigned_outlet.create_ndb_key()
103
+ def update(pos_setting_key, device_name, assigned_outlet,
104
+ enable_lock_screen,
105
+ lock_screen_code,
106
+ lock_screen_length_in_second,
107
+ ):
108
+ checking_device_setting = LoyaltyDeviceSetting.fetch(pos_setting_key)
109
+ checking_device_setting.device_name = device_name
110
+ checking_device_setting.assigned_outlet = assigned_outlet.create_ndb_key()
111
+ checking_device_setting.enable_lock_screen = enable_lock_screen
112
+ checking_device_setting.lock_screen_code = lock_screen_code
113
+ checking_device_setting.lock_screen_length_in_second = lock_screen_length_in_second
95
114
  checking_device_setting.put()
96
115
 
97
116
  return checking_device_setting
@@ -152,7 +171,15 @@ class LoyaltyDeviceSetting(BaseNModel,DictModel):
152
171
  if self.device_details:
153
172
  found_device_details_list_by_platform = self.device_details.get(platform)
154
173
  if found_device_details_list_by_platform:
174
+ self.device_details[platform] = {
175
+ 'device_token' : device_token,
176
+ 'last_updated_datetime' : datetime.utcnow().strftime("%d-%m-%Y %H:%M:%S"),
177
+ }
178
+
179
+
180
+ '''
155
181
  is_found = False
182
+
156
183
  for device_details_by_platform in found_device_details_list_by_platform:
157
184
  device_token_by_platform = device_details_by_platform.get('device_token')
158
185
  if device_token_by_platform:
@@ -168,21 +195,18 @@ class LoyaltyDeviceSetting(BaseNModel,DictModel):
168
195
  }
169
196
  )
170
197
 
171
-
198
+ '''
172
199
  else:
173
- self.device_details[platform] = [
174
- {
175
- 'device_token' : device_token,
176
- 'last_updated_datetime' : datetime.utcnow().strftime("%d-%m-%Y %H:%M:%S"),
177
- }
178
- ]
200
+ self.device_details[platform] = {
201
+ 'device_token' : device_token,
202
+ 'last_updated_datetime' : datetime.utcnow().strftime("%d-%m-%Y %H:%M:%S"),
203
+ }
179
204
  else:
180
205
  self.device_details = {
181
- platform : [
182
- {
206
+ platform : {
183
207
  'device_token' : device_token,
184
208
  'last_updated_datetime' : datetime.utcnow().strftime("%d-%m-%Y %H:%M:%S"),
185
209
  }
186
- ]
210
+
187
211
  }
188
212
  self.put()
@@ -18,6 +18,7 @@ from trexconf import conf, program_conf
18
18
  from trexmodel.models.datastore.system_models import Tagging
19
19
  from trexmodel.models.datastore.model_decorators import model_transactional
20
20
  from trexmodel.program_conf import LOYALTY_PACKAGE_LITE, LOYALTY_PRODUCT
21
+ import pytz
21
22
 
22
23
  logger = logging.getLogger('model')
23
24
  #logger = logging.getLogger('debug')
@@ -63,6 +64,7 @@ class MerchantAcct(MerchantMin):
63
64
  api_key = ndb.StringProperty(required=False)
64
65
 
65
66
  account_plan = ndb.JsonProperty()
67
+ setup_progress = ndb.JsonProperty()
66
68
  outlet_count = ndb.IntegerProperty(default=0)
67
69
 
68
70
  published_program_configuration = ndb.JsonProperty()
@@ -91,7 +93,7 @@ class MerchantAcct(MerchantMin):
91
93
  dict_properties = ['company_name', 'brand_name', 'contact_name', 'business_reg_no', 'mobile_phone',
92
94
  'office_phone', 'fax_phone', 'email', 'account_code', 'country',
93
95
  'registered_datetime', 'modified_datetime', 'plan_start_date', 'plan_end_date', 'currency_code',
94
- 'timezone', 'effective_referral_program_count',
96
+ 'timezone', 'effective_referral_program_count', 'gmt_hour',
95
97
  'published_program_configuration', 'published_tier_program_configuration', 'published_referral_program_configuration',
96
98
  'published_voucher_configuration', 'published_news_configuration', 'membership_configuration',
97
99
  'tier_membership_configuration', 'prepaid_configuration', 'lucky_draw_configuration', 'product_modifier_configuration',
@@ -101,6 +103,22 @@ class MerchantAcct(MerchantMin):
101
103
  ]
102
104
 
103
105
 
106
+ @property
107
+ def gmt_hour(self):
108
+ if self.timezone:
109
+ now = datetime.utcnow()
110
+ timezone = pytz.timezone(self.timezone)
111
+ #timezone_time = now.astimezone(self.timezone)
112
+ return timezone.utcoffset(now).total_seconds() / 3600
113
+ return conf.DEFAULT_GMT_HOURS
114
+
115
+ def update_setup_progress(self, setup_step):
116
+ if self.setup_progress is None:
117
+ self.setup_progress = {
118
+ }
119
+ elif self.setup_progress.get(setup_step) is None:
120
+ self.setup_progress[setup_step] = True
121
+
104
122
  def to_login_dict(self):
105
123
  return {
106
124
  'account_code' : self.account_code,
@@ -247,6 +247,10 @@ class BaseNModel(DictModel, NDBModel):
247
247
  @property
248
248
  def key_in_str(self):
249
249
  return self.key.urlsafe().decode('utf-8')
250
+
251
+ @property
252
+ def key_in_urlsafe(self):
253
+ return self.key.urlsafe()
250
254
 
251
255
  @property
252
256
  def key_name(self):
@@ -278,6 +282,17 @@ class BaseNModel(DictModel, NDBModel):
278
282
 
279
283
  return None
280
284
 
285
+ @classmethod
286
+ def fetch_multi(cls, model_keys_list):
287
+ try:
288
+ if model_keys_list:
289
+ return ndb.get_multi(model_keys_list)
290
+
291
+ except:
292
+ logger.error('Failed to fetch entity due to %s', get_tracelog())
293
+
294
+ return None
295
+
281
296
  @classmethod
282
297
  def count(cls, limit=model_conf.MAX_FETCH_RECORD):
283
298
  query = cls.query()
@@ -13,6 +13,7 @@ from trexconf import conf, program_conf
13
13
  from datetime import datetime
14
14
  from trexmodel.models.datastore.model_decorators import model_transactional
15
15
  from trexlib.utils.common.common_util import sort_list, sort_dict_list
16
+ from _datetime import timedelta
16
17
 
17
18
 
18
19
 
@@ -127,6 +128,24 @@ class BaseProgram(BaseNModel, DictModel):
127
128
  if self.program_settings and self.program_settings.get('scheme'):
128
129
  return self.program_settings.get('scheme').get('is_recurring_scheme')
129
130
  return False
131
+
132
+ @property
133
+ def limit_to_specific_day(self):
134
+ try:
135
+ if self.program_settings and self.program_settings.get('scheme'):
136
+ return self.program_settings.get('scheme').get('limit_to_specific_day')
137
+ except:
138
+ pass
139
+ return False
140
+
141
+ @property
142
+ def specified_days_list(self):
143
+ try:
144
+ if self.program_settings and self.program_settings.get('scheme'):
145
+ return self.program_settings.get('scheme').get('specified_days_list')
146
+ except:
147
+ pass
148
+ return []
130
149
 
131
150
  @property
132
151
  def giveaway_system_condition(self):
@@ -231,7 +250,6 @@ class BaseProgram(BaseNModel, DictModel):
231
250
 
232
251
  remove_schedule_program(program)
233
252
 
234
-
235
253
  @classmethod
236
254
  @model_transactional(desc="enable program")
237
255
  def enable(cls, program, modified_by=None):
@@ -582,7 +600,7 @@ class MerchantProgram(BasicRewardProgram):
582
600
  'created_datetime', 'modified_datetime', 'enabled','completed_status','is_enabled', 'is_disabled', 'is_review_state',
583
601
  'is_published', 'archived', 'is_reward_amount_required', 'completed_progress_in_percentage', 'completed_status_index',
584
602
  'exclusive_tags_list', 'exclusive_memberships_list', 'exclusive_tier_memberships_list',
585
- 'is_recurring_scheme',
603
+ 'is_recurring_scheme', 'limit_to_specific_day', 'specified_days_list',
586
604
  'expiration_type', 'expiration_date', 'expiration_value', 'is_expiration_date_type',
587
605
  'giveaway_reward_when', 'giveaway_reward_advance_in_day',
588
606
  'giveaway_system_condition', 'giveaway_system_condition_memberships_list', 'giveaway_system_condition_tier_memberships_list',
@@ -630,7 +648,9 @@ class MerchantProgram(BasicRewardProgram):
630
648
  program_settings = {
631
649
  'exclusivity' : exclusivity_configuration,
632
650
  'scheme' : {
633
- 'is_recurring_scheme': True,
651
+ 'is_recurring_scheme' : True,
652
+ 'limit_to_specific_day' : False,
653
+ 'specified_days_list' : [],
634
654
  }
635
655
  }
636
656
 
@@ -653,6 +653,12 @@ class CustomerEntitledTierRewardSummary(BaseNModel, DictModel):
653
653
  @staticmethod
654
654
  def list_all_by_customer(customer, limit = conf.MAX_FETCH_RECORD, offset=0):
655
655
  return CustomerEntitledTierRewardSummary.query(ancestor=customer.create_ndb_key()).fetch(offset=offset, limit=limit)
656
+
657
+ @staticmethod
658
+ def delete_all_by_customer(customer):
659
+ result = CustomerEntitledTierRewardSummary.query(ancestor=customer.create_ndb_key()).fetch(limit=conf.MAX_FETCH_RECORD)
660
+ for r in result:
661
+ r.delete()
656
662
 
657
663
  @staticmethod
658
664
  def list_tier_reward_summary_by_customer(customer_acct):
@@ -247,8 +247,11 @@ def construct_setting_by_outlet(outlet, device_setting=None):
247
247
  'membership_configurations' : merchant_acct.membership_configuration,
248
248
  }
249
249
  if device_setting:
250
- setting['activation_code'] = device_setting.activation_code
251
- setting['device_name'] = device_setting.device_name
252
- setting['device_id'] = device_setting.device_id
250
+ setting['activation_code'] = device_setting.activation_code
251
+ setting['device_name'] = device_setting.device_name
252
+ setting['device_id'] = device_setting.device_id
253
+ setting['enable_lock_screen'] = device_setting.enable_lock_screen
254
+ setting['lock_screen_code'] = device_setting.lock_screen_code
255
+ setting['lock_screen_length_in_second'] = device_setting.lock_screen_length_in_second
253
256
 
254
257
  return setting
File without changes
File without changes
File without changes
File without changes
File without changes