trex-model 1.5.18__tar.gz → 1.5.19__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 (63) hide show
  1. {trex-model-1.5.18 → trex-model-1.5.19}/PKG-INFO +1 -1
  2. {trex-model-1.5.18 → trex-model-1.5.19}/setup.py +1 -1
  3. {trex-model-1.5.18 → trex-model-1.5.19}/trex_model.egg-info/PKG-INFO +1 -1
  4. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/helper/reward_transaction_helper.py +10 -10
  5. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/marketing_models.py +1 -1
  6. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/merchant_models.py +5 -1
  7. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/pos_models.py +51 -9
  8. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/rating_models.py +63 -2
  9. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/transaction_models.py +11 -7
  10. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/merchant_helpers.py +1 -0
  11. {trex-model-1.5.18 → trex-model-1.5.19}/LICENSE +0 -0
  12. {trex-model-1.5.18 → trex-model-1.5.19}/MANIFEST.in +0 -0
  13. {trex-model-1.5.18 → trex-model-1.5.19}/README.md +0 -0
  14. {trex-model-1.5.18 → trex-model-1.5.19}/setup.cfg +0 -0
  15. {trex-model-1.5.18 → trex-model-1.5.19}/trex_model.egg-info/SOURCES.txt +0 -0
  16. {trex-model-1.5.18 → trex-model-1.5.19}/trex_model.egg-info/dependency_links.txt +0 -0
  17. {trex-model-1.5.18 → trex-model-1.5.19}/trex_model.egg-info/requires.txt +0 -0
  18. {trex-model-1.5.18 → trex-model-1.5.19}/trex_model.egg-info/top_level.txt +0 -0
  19. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/__init__.py +0 -0
  20. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/conf.py +0 -0
  21. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/__init__.py +0 -0
  22. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/__init__.py +0 -0
  23. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/admin_models.py +0 -0
  24. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/analytic_models.py +0 -0
  25. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/app_models.py +0 -0
  26. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/coporate_models.py +0 -0
  27. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/customer_model_helpers.py +0 -0
  28. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/customer_models.py +0 -0
  29. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/fb_subsriber_models.py +0 -0
  30. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/helper/__init__.py +0 -0
  31. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/helper/reward_model_helpers.py +0 -0
  32. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/import_models.py +0 -0
  33. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/inventory_model.py +0 -0
  34. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/loyalty_models.py +0 -0
  35. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/lucky_draw_models.py +0 -0
  36. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/membership_models.py +0 -0
  37. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/message_model_helper.py +0 -0
  38. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/message_models.py +0 -0
  39. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/model_decorators.py +0 -0
  40. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/ndb_models.py +0 -0
  41. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/prepaid_models.py +0 -0
  42. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/product_models.py +0 -0
  43. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/program_models.py +0 -0
  44. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/recruit_models.py +0 -0
  45. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/redeem_models.py +0 -0
  46. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/redemption_catalogue_models.py +0 -0
  47. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/referral_program_model.py +0 -0
  48. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/reward_models.py +0 -0
  49. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/spending_base_program_model.py +0 -0
  50. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/system_models.py +0 -0
  51. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/task_models.py +0 -0
  52. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/test_models.py +0 -0
  53. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/user_models.py +0 -0
  54. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/datastore/voucher_models.py +0 -0
  55. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/model_decorator.py +0 -0
  56. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/models/prepaid_helpers.py +0 -0
  57. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/pos_conf.py +0 -0
  58. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/program_conf.py +0 -0
  59. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/utils/__init__.py +0 -0
  60. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/utils/gcloud/__init__.py +0 -0
  61. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/utils/gcloud/datastore_util.py +0 -0
  62. {trex-model-1.5.18 → trex-model-1.5.19}/trexmodel/utils/model/__init__.py +0 -0
  63. {trex-model-1.5.18 → trex-model-1.5.19}/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.18
3
+ Version: 1.5.19
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.18',
6
+ version='1.5.19',
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.18
3
+ Version: 1.5.19
4
4
  Summary: TRex database module package
5
5
  Home-page: https://bitbucket.org/lokjac/trex-model
6
6
  Author: Jack Lok
@@ -194,21 +194,21 @@ def create_reward_transaction(customer, transact_outlet=None, sales_amount=.0, t
194
194
 
195
195
  return __start_transaction_for_customer_transaction()
196
196
 
197
- def give_reward_from_sales_transaction(customer, sales_transaction):
197
+ def give_reward_from_sales_transaction(customer, sales_transaction, for_testing=False):
198
198
 
199
199
  logger.debug('---give_reward_from_sales_transaction---')
200
200
 
201
201
  @model_transactional(desc='give_reward_from_sales_transaction')
202
202
  def __start_transaction(customer, sales_transaction):
203
- customer_transaction = CustomerTransaction.create_from_sales_transaction(customer, sales_transaction)
204
-
205
- trigger_check_reward_success = trigger_spending_reward_for_transaction(customer_transaction)
206
-
207
- logger.debug('trigger_check_reward_success=%s', trigger_check_reward_success)
208
-
209
- if trigger_check_reward_success:
210
- create_transaction_message(customer_transaction)
211
- create_merchant_customer_transaction_upstream_for_merchant(customer_transaction, streamed_datetime=sales_transaction.transact_datetime)
203
+ customer_transaction = CustomerTransaction.create_from_sales_transaction(customer, sales_transaction, for_testing=for_testing)
204
+ if for_testing==False:
205
+ trigger_check_reward_success = trigger_spending_reward_for_transaction(customer_transaction)
206
+
207
+ logger.debug('trigger_check_reward_success=%s', trigger_check_reward_success)
208
+
209
+ if trigger_check_reward_success:
210
+ create_transaction_message(customer_transaction)
211
+ create_merchant_customer_transaction_upstream_for_merchant(customer_transaction, streamed_datetime=sales_transaction.transact_datetime)
212
212
 
213
213
  return customer_transaction
214
214
 
@@ -390,7 +390,7 @@ class MerchantNewsFile(BaseNModel, DictModel):
390
390
  merchant_news.start_date = start_date
391
391
  merchant_news.end_date = end_date
392
392
  merchant_news.completed_status = program_conf.MERCHANT_NEWS_STATUS_BASE
393
- merchant_news.modified_by = modified_by
393
+ merchant_news.modified_by = modified_by.create_ndb_key()
394
394
  merchant_news.modified_by_username = modified_by_username
395
395
  merchant_news.modified_datetime = datetime.utcnow()
396
396
 
@@ -300,6 +300,10 @@ class MerchantAcct(MerchantMin):
300
300
  return self.program_settings.get('referral_program').get('referee_promote_image')
301
301
 
302
302
 
303
+ @property
304
+ def is_rating_review_enabled(self):
305
+ return self.program_settings.get('rating_review', False)
306
+
303
307
  @staticmethod
304
308
  def default_program_settings():
305
309
  return {
@@ -307,7 +311,7 @@ class MerchantAcct(MerchantMin):
307
311
  'days_of_repeat_purchase_measurement' : 7,
308
312
  'membership_renew_advance_day' : 7,
309
313
  'membership_renew_late_day' : 30,
310
-
314
+ 'rating_review' : False,
311
315
  }
312
316
 
313
317
  def update_referrer_program_promote_text(self,
@@ -17,18 +17,34 @@ class POSSetting(BaseNModel,DictModel):
17
17
  '''
18
18
  merchant_acct as ancestor
19
19
  '''
20
- device_name = ndb.StringProperty(required=True)
21
- activation_code = ndb.StringProperty(required=True)
22
- device_id = ndb.StringProperty(required=False)
23
- activated = ndb.BooleanProperty(required=True, default=False)
24
- assigned_outlet = ndb.KeyProperty(name="assigned_outlet", kind=Outlet)
20
+ device_name = ndb.StringProperty(required=True)
21
+ activation_code = ndb.StringProperty(required=True)
22
+ device_id = ndb.StringProperty(required=False)
23
+ enable_lock_screen = ndb.BooleanProperty(required=True, default=False)
24
+ lock_screen_code = ndb.StringProperty(required=False, default='')
25
+ lock_screen_length_in_second = ndb.IntegerProperty(required=False, default=30)
26
+ activated = ndb.BooleanProperty(required=True, default=False)
27
+ assigned_outlet = ndb.KeyProperty(name="assigned_outlet", kind=Outlet)
25
28
  #assigned_catalogue = ndb.KeyProperty(name="assigned_outlet", kind=ProductCatalogue)
26
- created_datetime = ndb.DateTimeProperty(required=True, auto_now_add=True)
27
- activated_datetime = ndb.DateTimeProperty(required=False)
28
- testing = ndb.BooleanProperty(required=False, default=False)
29
+ created_datetime = ndb.DateTimeProperty(required=True, auto_now_add=True)
30
+ activated_datetime = ndb.DateTimeProperty(required=False)
31
+ testing = ndb.BooleanProperty(required=False, default=False)
32
+ device_details = ndb.JsonProperty()
29
33
 
30
34
  dict_properties = ['device_name', 'activation_code', 'device_id', 'activated', 'assigned_outlet_key',
31
- 'activated_datetime', 'created_datetime']
35
+ 'enable_lock_screen', 'lock_screen_code', 'lock_screen_length_in_second',
36
+ 'device_details', 'activated_datetime', 'created_datetime']
37
+
38
+ @property
39
+ def device_tokens_list(self):
40
+ _tokens_list = []
41
+
42
+ if self.device_details:
43
+
44
+ for k,v in self.device_details.items():
45
+ for dd in v:
46
+ _tokens_list.append(dd.get('device_token'))
47
+ return _tokens_list
32
48
 
33
49
  @property
34
50
  def is_test_setting(self):
@@ -83,6 +99,32 @@ class POSSetting(BaseNModel,DictModel):
83
99
 
84
100
  return pos_setting
85
101
 
102
+ def update_device_details(self, platform, device_token):
103
+ if self.device_details:
104
+ found_device_details_list_by_platform = self.device_details.get(platform)
105
+ if found_device_details_list_by_platform:
106
+ self.device_details[platform] = {
107
+ 'device_token' : device_token,
108
+ 'last_updated_datetime' : datetime.utcnow().strftime("%d-%m-%Y %H:%M:%S"),
109
+ }
110
+
111
+
112
+
113
+ else:
114
+ self.device_details[platform] = {
115
+ 'device_token' : device_token,
116
+ 'last_updated_datetime' : datetime.utcnow().strftime("%d-%m-%Y %H:%M:%S"),
117
+ }
118
+ else:
119
+ self.device_details = {
120
+ platform : {
121
+ 'device_token' : device_token,
122
+ 'last_updated_datetime' : datetime.utcnow().strftime("%d-%m-%Y %H:%M:%S"),
123
+ }
124
+
125
+ }
126
+ self.put()
127
+
86
128
  @staticmethod
87
129
  def get_by_activation_code(activation_code):
88
130
  pos_setting = POSSetting.query(POSSetting.activation_code ==activation_code).get()
@@ -10,6 +10,7 @@ from trexmodel.models.datastore.user_models import User
10
10
  from trexconf import conf
11
11
  from datetime import datetime, timedelta
12
12
  import logging
13
+ from trexmodel.models.datastore.transaction_models import SalesTransaction
13
14
 
14
15
  logger = logging.getLogger('model')
15
16
 
@@ -65,10 +66,11 @@ class OutletRating(RatingBase):
65
66
  return OutletRating.query(ndb.AND(OutletRating.merchant_acct==merchant_acct.create_ndb_key(), OutletRating.updated==True, OutletRating.modified_datetime>checking_datetime_from)).fetch(limit=conf.MAX_FETCH_RECORD)
66
67
 
67
68
  @staticmethod
68
- def create(user_acct, outlet, service_rating=.5, ambience_rating=.5, food_rating=.5, value_rating=.5):
69
+ def create(user_acct, outlet, merchant_acct=None, service_rating=.5, ambience_rating=.5, food_rating=.5, value_rating=.5):
69
70
  outlet_rating = OutletRating.get_user_rating_by_outlet(user_acct, outlet)
70
71
  if outlet_rating is None:
71
- merchant_acct = outlet.merchant_acct_entity
72
+ if merchant_acct is None:
73
+ merchant_acct = outlet.merchant_acct_entity
72
74
  outlet_rating = OutletRating(
73
75
  user_acct = user_acct.create_ndb_key(),
74
76
  merchant_acct = merchant_acct.create_ndb_key(),
@@ -133,6 +135,65 @@ class OutletRating(RatingBase):
133
135
 
134
136
  return OutletRating.__calculate_rating(merchant_rating_list)
135
137
 
138
+ class TransactionRating(RatingBase):
139
+ outlet = ndb.KeyProperty(name="outlet", kind=Outlet)
140
+ merchant_acct = ndb.KeyProperty(name="merchant_acct", kind=MerchantAcct)
141
+ transaction_id = ndb.StringProperty(required=True)
142
+ service_rating = ndb.FloatProperty(required=True, default=.0)
143
+ ambience_rating = ndb.FloatProperty(required=True, default=.0)
144
+ food_rating = ndb.FloatProperty(required=True, default=.0)
145
+ value_rating = ndb.FloatProperty(required=True, default=.0)
146
+ created_datetime = ndb.DateTimeProperty(required=True, auto_now_add=True)
147
+
148
+ dict_properties = ['transaction_id','service_rating', 'ambience_rating', 'food_rating','value_rating',
149
+ ]
150
+
151
+ @staticmethod
152
+ def create(user_acct, transaction_id, service_rating=.5, ambience_rating=.5, food_rating=.5, value_rating=.5, for_testing=False):
153
+ sales_transaction = SalesTransaction.get_by_transaction_id(transaction_id)
154
+ if sales_transaction is not None:
155
+ outlet = sales_transaction.transact_outlet_entity
156
+ merchant_acct = sales_transaction.transact_merchant_acct
157
+
158
+ transaction_rating = TransactionRating.get_by_transaction_id(transaction_id)
159
+ if transaction_rating is None:
160
+ transaction_rating = TransactionRating(
161
+ user_acct = user_acct.create_ndb_key(),
162
+ merchant_acct = merchant_acct.create_ndb_key(),
163
+ outlet = outlet.create_ndb_key(),
164
+ transaction_id = transaction_id,
165
+
166
+ service_rating = service_rating,
167
+ ambience_rating = ambience_rating,
168
+ food_rating = food_rating,
169
+ value_rating = value_rating,
170
+
171
+ )
172
+
173
+ else:
174
+ transaction_rating.service_rating = service_rating
175
+ transaction_rating.ambience_rating = ambience_rating
176
+ transaction_rating.food_rating = food_rating
177
+ transaction_rating.value_rating = value_rating
178
+
179
+ if for_testing==False:
180
+ transaction_rating.put()
181
+
182
+ OutletRating.create(user_acct, outlet,
183
+ merchant_acct = merchant_acct,
184
+ service_rating = service_rating,
185
+ ambience_rating = ambience_rating,
186
+ food_rating = food_rating,
187
+ value_rating = value_rating,
188
+ )
189
+ MerchantRatingResult.update(merchant_acct)
190
+
191
+
192
+ @staticmethod
193
+ def get_by_transaction_id(transaction_id):
194
+ return TransactionRating.query(ndb.AND(TransactionRating.transaction_id==transaction_id)).get()
195
+
196
+
136
197
  class RatingResult(BaseNModel, DictModel):
137
198
  total_rating_count = ndb.IntegerProperty(required=True, default=0)
138
199
  rating_result = ndb.JsonProperty()
@@ -185,7 +185,7 @@ class CustomerTransaction(SalesTransaction):
185
185
 
186
186
  is_from_instant_transaction = ndb.BooleanProperty(required=False, default=False)
187
187
  is_reward_redeemed = ndb.BooleanProperty(required=False, default=False)
188
-
188
+ is_rating_review_enabled = ndb.BooleanProperty(required=False, default=False)
189
189
 
190
190
 
191
191
  is_membership_purchase = ndb.BooleanProperty(required=False, default=False)
@@ -204,6 +204,7 @@ class CustomerTransaction(SalesTransaction):
204
204
  'transact_datetime', 'created_datetime', 'transact_outlet_key', 'is_revert', 'reverted_datetime', 'reverted_by_username',
205
205
  'transact_by', 'transact_by_username', 'is_reward_redeemed', 'is_sales_transaction', 'allow_to_revert',
206
206
  'is_membership_purchase', 'purchased_merchant_membership_key', 'is_tier_membership_upgraded', 'upgraded_merchant_tier_membership_key',
207
+ 'is_rating_review_enabled',
207
208
  ]
208
209
 
209
210
  def to_transaction_details_json(self):
@@ -337,12 +338,14 @@ class CustomerTransaction(SalesTransaction):
337
338
  )
338
339
 
339
340
  @staticmethod
340
- def create_from_sales_transaction(customer, sales_transaction):
341
+ def create_from_sales_transaction(customer, sales_transaction, for_testing=False):
341
342
  if sales_transaction:
343
+ merchant_acct = customer.registered_merchant_acct
344
+ is_rating_review_enabled = merchant_acct.is_rating_review_enabled
342
345
  customer_transaction = CustomerTransaction(
343
346
  parent = customer.create_ndb_key(),
344
347
 
345
- transact_merchant = customer.registered_merchant_acct.create_ndb_key(),
348
+ transact_merchant = merchant_acct.create_ndb_key(),
346
349
  transact_outlet = sales_transaction.transact_outlet,
347
350
 
348
351
  tax_amount = sales_transaction.tax_amount,
@@ -358,7 +361,7 @@ class CustomerTransaction(SalesTransaction):
358
361
 
359
362
  transact_datetime = sales_transaction.transact_datetime,
360
363
  is_from_instant_transaction = True,
361
-
364
+ is_rating_review_enabled = is_rating_review_enabled
362
365
  #is_sales_transaction = True,
363
366
  #allow_to_revert = True,
364
367
  #is_membership_purchase = False,
@@ -368,9 +371,10 @@ class CustomerTransaction(SalesTransaction):
368
371
  )
369
372
 
370
373
 
371
- customer_transaction.put()
372
- sales_transaction.used = True
373
- sales_transaction.put()
374
+ if for_testing==False:
375
+ customer_transaction.put()
376
+ sales_transaction.used = True
377
+ sales_transaction.put()
374
378
  return customer_transaction
375
379
 
376
380
  @staticmethod
@@ -246,6 +246,7 @@ def construct_setting_by_outlet(outlet, device_setting=None, is_pos_device=False
246
246
  'outlet_details' : outlet_details,
247
247
  'program_configurations' : program_configurations,
248
248
  'membership_configurations' : merchant_acct.membership_configuration,
249
+ 'rating_review' : merchant_acct.program_settings.get('rating_review', False),
249
250
  }
250
251
  if device_setting:
251
252
  setting['activation_code'] = device_setting.activation_code
File without changes
File without changes
File without changes
File without changes