trex-model 1.5.15__tar.gz → 1.5.18__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.15 → trex-model-1.5.18}/PKG-INFO +10 -5
  2. {trex-model-1.5.15 → trex-model-1.5.18}/setup.py +1 -1
  3. {trex-model-1.5.15 → trex-model-1.5.18}/trex_model.egg-info/PKG-INFO +10 -5
  4. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/customer_models.py +2 -2
  5. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/helper/reward_transaction_helper.py +9 -1
  6. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/lucky_draw_models.py +3 -3
  7. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/merchant_models.py +8 -2
  8. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/prepaid_models.py +30 -0
  9. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/redeem_models.py +45 -15
  10. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/reward_models.py +39 -5
  11. {trex-model-1.5.15 → trex-model-1.5.18}/LICENSE +0 -0
  12. {trex-model-1.5.15 → trex-model-1.5.18}/MANIFEST.in +0 -0
  13. {trex-model-1.5.15 → trex-model-1.5.18}/README.md +0 -0
  14. {trex-model-1.5.15 → trex-model-1.5.18}/setup.cfg +0 -0
  15. {trex-model-1.5.15 → trex-model-1.5.18}/trex_model.egg-info/SOURCES.txt +0 -0
  16. {trex-model-1.5.15 → trex-model-1.5.18}/trex_model.egg-info/dependency_links.txt +0 -0
  17. {trex-model-1.5.15 → trex-model-1.5.18}/trex_model.egg-info/requires.txt +0 -0
  18. {trex-model-1.5.15 → trex-model-1.5.18}/trex_model.egg-info/top_level.txt +0 -0
  19. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/__init__.py +0 -0
  20. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/conf.py +0 -0
  21. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/__init__.py +0 -0
  22. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/__init__.py +0 -0
  23. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/admin_models.py +0 -0
  24. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/analytic_models.py +0 -0
  25. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/app_models.py +0 -0
  26. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/coporate_models.py +0 -0
  27. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/customer_model_helpers.py +0 -0
  28. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/fb_subsriber_models.py +0 -0
  29. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/helper/__init__.py +0 -0
  30. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/helper/reward_model_helpers.py +0 -0
  31. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/import_models.py +0 -0
  32. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/inventory_model.py +0 -0
  33. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/loyalty_models.py +0 -0
  34. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/marketing_models.py +0 -0
  35. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/membership_models.py +0 -0
  36. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/message_model_helper.py +0 -0
  37. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/message_models.py +0 -0
  38. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/model_decorators.py +0 -0
  39. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/ndb_models.py +0 -0
  40. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/pos_models.py +0 -0
  41. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/product_models.py +0 -0
  42. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/program_models.py +0 -0
  43. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/rating_models.py +0 -0
  44. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/recruit_models.py +0 -0
  45. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/redemption_catalogue_models.py +0 -0
  46. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/referral_program_model.py +0 -0
  47. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/spending_base_program_model.py +0 -0
  48. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/system_models.py +0 -0
  49. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/task_models.py +0 -0
  50. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/test_models.py +0 -0
  51. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/transaction_models.py +0 -0
  52. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/user_models.py +0 -0
  53. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/datastore/voucher_models.py +0 -0
  54. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/merchant_helpers.py +0 -0
  55. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/model_decorator.py +0 -0
  56. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/models/prepaid_helpers.py +0 -0
  57. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/pos_conf.py +0 -0
  58. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/program_conf.py +0 -0
  59. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/utils/__init__.py +0 -0
  60. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/utils/gcloud/__init__.py +0 -0
  61. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/utils/gcloud/datastore_util.py +0 -0
  62. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/utils/model/__init__.py +0 -0
  63. {trex-model-1.5.15 → trex-model-1.5.18}/trexmodel/utils/model/model_util.py +0 -0
@@ -1,15 +1,20 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: trex-model
3
- Version: 1.5.15
3
+ Version: 1.5.18
4
4
  Summary: TRex database module package
5
5
  Home-page: https://bitbucket.org/lokjac/trex-model
6
6
  Author: Jack Lok
7
7
  Author-email: sglok77@gmail.com
8
- License: UNKNOWN
9
- Description: This is database modelusing google datastore mode module
10
-
11
- Platform: UNKNOWN
12
8
  Classifier: Programming Language :: Python :: 3
13
9
  Classifier: License :: OSI Approved :: MIT License
14
10
  Classifier: Operating System :: OS Independent
15
11
  Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+ Requires-Dist: google-cloud-firestore
14
+ Requires-Dist: google_cloud_datastore
15
+ Requires-Dist: google-cloud-ndb
16
+ Requires-Dist: six
17
+ Requires-Dist: trex-lib
18
+ Requires-Dist: flask-login==0.6.2
19
+
20
+ This is database modelusing google datastore mode module
@@ -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.15',
6
+ version='1.5.18',
7
7
  author="Jack Lok",
8
8
  author_email="sglok77@gmail.com",
9
9
  description="TRex database module package",
@@ -1,15 +1,20 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: trex-model
3
- Version: 1.5.15
3
+ Version: 1.5.18
4
4
  Summary: TRex database module package
5
5
  Home-page: https://bitbucket.org/lokjac/trex-model
6
6
  Author: Jack Lok
7
7
  Author-email: sglok77@gmail.com
8
- License: UNKNOWN
9
- Description: This is database modelusing google datastore mode module
10
-
11
- Platform: UNKNOWN
12
8
  Classifier: Programming Language :: Python :: 3
13
9
  Classifier: License :: OSI Approved :: MIT License
14
10
  Classifier: Operating System :: OS Independent
15
11
  Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+ Requires-Dist: google-cloud-firestore
14
+ Requires-Dist: google_cloud_datastore
15
+ Requires-Dist: google-cloud-ndb
16
+ Requires-Dist: six
17
+ Requires-Dist: trex-lib
18
+ Requires-Dist: flask-login==0.6.2
19
+
20
+ This is database modelusing google datastore mode module
@@ -768,7 +768,7 @@ class CustomerMembership(BaseNModel, DictModel):
768
768
  renewed_outlet = ndb.KeyProperty(name="renewed_outlet", kind=Outlet)
769
769
 
770
770
  dict_properties =[
771
- 'customer', 'merchant_membership_entity', 'entitled_date', 'expiry_date'
771
+ 'customer', 'merchant_membership_entity', 'entitled_date', 'expiry_date', 'merchant_membership_key'
772
772
  ]
773
773
 
774
774
  @property
@@ -1001,7 +1001,7 @@ class CustomerTierMembership(BaseNModel, DictModel):
1001
1001
  valid = ndb.BooleanProperty(required=True, default=True)
1002
1002
 
1003
1003
  dict_properties =[
1004
- 'customer', 'merchant_tier_membership_entity', 'entitled_date', 'expiry_date', 'valid'
1004
+ 'customer', 'merchant_tier_membership_entity', 'entitled_date', 'expiry_date', 'valid', 'merchant_tier_membership_key',
1005
1005
  ]
1006
1006
 
1007
1007
 
@@ -24,7 +24,9 @@ from trexanalytics.bigquery_upstream_data_config import create_merchant_customer
24
24
  create_merchant_customer_redemption_upstream_for_merchant,\
25
25
  create_merchant_customer_prepaid_upstream_for_merchant,\
26
26
  create_merchant_customer_redemption_reverted_upstream_for_merchant,\
27
- create_revert_entitled_customer_voucher_upstream_for_merchant
27
+ create_revert_entitled_customer_voucher_upstream_for_merchant,\
28
+ create_entitled_customer_voucher_upstream_for_merchant,\
29
+ create_redeemed_customer_voucher_to_upstream_for_merchant
28
30
  from trexmodel.models.datastore.membership_models import MerchantTierMembership
29
31
  from trexmodel.models.datastore.transaction_models import CustomerTransaction,\
30
32
  SalesTransaction
@@ -695,6 +697,12 @@ def redeem_reward_transaction(customer, redeem_outlet=None, reward_format=None,
695
697
  if customer_redemption:
696
698
  create_redemption_message(customer_redemption)
697
699
  create_merchant_customer_redemption_upstream_for_merchant(customer_redemption, streamed_datetime=redeemed_datetime)
700
+ if reward_format == program_conf.REWARD_FORMAT_VOUCHER:
701
+ for voucher_key in redeemed_voucher_keys_list:
702
+ customer_voucher = CustomerEntitledVoucher.fetch(voucher_key)
703
+ if customer_voucher:
704
+ create_redeemed_customer_voucher_to_upstream_for_merchant(customer_voucher)
705
+
698
706
 
699
707
  return customer_redemption
700
708
 
@@ -569,11 +569,11 @@ class LuckyDrawTicket(BaseNModel, DictModel):
569
569
  return LuckyDrawTicket.query(ndb.AND(LuckyDrawTicket.merchant_acct==merchant_acct.create_ndb_key())).count(limit=model_conf.MAX_FETCH_RECORD)
570
570
 
571
571
  @staticmethod
572
- def list_by_merchant_acct_with_cursor(merchant_acct, offset=0, limit=50, start_cursor=None):
572
+ def list_by_merchant_acct(merchant_acct, offset=0, limit=50, start_cursor=None, return_with_cursor=True):
573
573
  query = LuckyDrawTicket.query(ndb.AND(LuckyDrawTicket.merchant_acct==merchant_acct.create_ndb_key(),))
574
- (result, next_cursor) = LuckyDrawTicket.list_all_with_condition_query(query, start_cursor=start_cursor, return_with_cursor=True, offset=offset, limit=limit)
574
+ return LuckyDrawTicket.list_all_with_condition_query(query, start_cursor=start_cursor, return_with_cursor=return_with_cursor, offset=offset, limit=limit)
575
+
575
576
 
576
- return (result, next_cursor)
577
577
 
578
578
  @staticmethod
579
579
  def create_for_customer_from_sales_amount(customer_acct, sales_amount=None, merchant_acct=None, transact_outlet=None):
@@ -1328,8 +1328,14 @@ class MerchantAcct(MerchantMin):
1328
1328
 
1329
1329
 
1330
1330
  @staticmethod
1331
- def list(offset=0, limit=10):
1332
- return MerchantAcct.query().order(-MerchantAcct.registered_datetime).fetch(offset=offset, limit=limit)
1331
+ def list(offset=None, start_cursor=None, return_with_cursor=False, limit = model_conf.MAX_FETCH_RECORD):
1332
+ if return_with_cursor:
1333
+ query = MerchantAcct.query()
1334
+ (result, next_cursor) = MerchantAcct.list_all_with_condition_query(query, start_cursor=start_cursor, return_with_cursor=True, limit=limit)
1335
+
1336
+ return (result, next_cursor)
1337
+ else:
1338
+ return MerchantAcct.query().order(-MerchantAcct.registered_datetime).fetch(offset=offset, limit=limit)
1333
1339
 
1334
1340
  def delete_and_related(self):
1335
1341
 
@@ -640,4 +640,34 @@ class CustomerPrepaidReward(BaseNModel,DictModel):
640
640
  def delete_all_by_customer(customer):
641
641
  query = CustomerPrepaidReward.query(ancestor=customer.create_ndb_key())
642
642
  CustomerPrepaidReward.delete_multiples(query)
643
+
644
+ @staticmethod
645
+ def list_by_merchant_acct(merchant_acct, datetime_range_start=None, datetime_range_end=None, offset=0, limit=50, start_cursor=None, return_with_cursor=True):
646
+ if is_not_empty(datetime_range_start) and is_not_empty(datetime_range_end):
647
+ query = CustomerPrepaidReward.query(ndb.AND(
648
+ CustomerPrepaidReward.merchant_acct==merchant_acct.create_ndb_key(),
649
+ CustomerPrepaidReward.topup_datetime>=datetime_range_start,
650
+ CustomerPrepaidReward.topup_datetime<datetime_range_end,
651
+ ))
652
+ else:
653
+ query = CustomerPrepaidReward.query(ndb.AND(
654
+ CustomerPrepaidReward.merchant_acct==merchant_acct.create_ndb_key(),
655
+ ))
656
+
657
+ return CustomerPrepaidReward.list_all_with_condition_query(query, start_cursor=start_cursor, return_with_cursor=return_with_cursor, offset=offset, limit=limit)
658
+
659
+ @staticmethod
660
+ def count_by_merchant_acct(merchant_acct, datetime_range_start=None, datetime_range_end=None, limit=conf.MAX_FETCH_RECORD,):
661
+ if is_not_empty(datetime_range_start) and is_not_empty(datetime_range_end):
662
+ query = CustomerPrepaidReward.query(ndb.AND(
663
+ CustomerPrepaidReward.merchant_acct==merchant_acct.create_ndb_key(),
664
+ CustomerPrepaidReward.topup_datetime>=datetime_range_start,
665
+ CustomerPrepaidReward.topup_datetime<datetime_range_end,
666
+ ))
667
+ else:
668
+ query = CustomerPrepaidReward.query(ndb.AND(
669
+ CustomerPrepaidReward.merchant_acct==merchant_acct.create_ndb_key(),
670
+ ))
671
+
672
+ return CustomerPrepaidReward.count_with_condition_query(query, limit)
643
673
 
@@ -20,6 +20,7 @@ from trexmodel.models.datastore.transaction_models import CustomerTransaction
20
20
  from trexmodel.models.datastore.prepaid_models import CustomerPrepaidReward
21
21
  from trexmodel.models.datastore.redemption_catalogue_models import RedemptionCatalogue
22
22
  from trexmodel.models.datastore import user_models
23
+ from _ast import Is
23
24
 
24
25
 
25
26
  logger = logging.getLogger('debug')
@@ -188,18 +189,47 @@ class CustomerRedemption(BaseNModel, DictModel):
188
189
 
189
190
  def to_voucher_upstream_info_list(self):
190
191
  upstream_info_list = []
191
- for merchant_voucher_key, voucher_redeemed_details in self.redeemed_summary.get(program_conf.REWARD_FORMAT_VOUCHER).get('vouchers').items():
192
- upstream_info_list.append(CustomerRedeemedItemUpstream(
193
- customer_key = self.redeemed_customer_key,
194
- merchant_key = self.redeemed_merchant_acct_key,
195
- redeemed_outlet_key = self.redeemed_outlet_key,
196
- transaction_id = self.transaction_id,
197
- reward_format = self.reward_format,
198
- redeemed_datetime = self.redeemed_datetime,
199
- redeemed_amount = voucher_redeemed_details.get('amount'),
200
- voucher_key = merchant_voucher_key,
201
- ))
202
- return upstream_info_list
192
+ try:
193
+ if self.redeemed_summary.get(program_conf.REWARD_FORMAT_VOUCHER) is not None:
194
+
195
+ for merchant_voucher_key, voucher_redeemed_details in self.redeemed_summary.get(program_conf.REWARD_FORMAT_VOUCHER).get('vouchers').items():
196
+ amount = 1
197
+ if isinstance(voucher_redeemed_details, int):
198
+ amount = voucher_redeemed_details
199
+ elif isinstance(voucher_redeemed_details, dict):
200
+ amount = voucher_redeemed_details.get('amount')
201
+
202
+
203
+ upstream_info_list.append(CustomerRedeemedItemUpstream(
204
+ customer_key = self.redeemed_customer_key,
205
+ merchant_key = self.redeemed_merchant_acct_key,
206
+ redeemed_outlet_key = self.redeemed_outlet_key,
207
+ transaction_id = self.transaction_id,
208
+ reward_format = self.reward_format,
209
+ redeemed_datetime = self.redeemed_datetime,
210
+ redeemed_amount = amount,
211
+ voucher_key = merchant_voucher_key,
212
+ ))
213
+ else:
214
+ for merchant_voucher_key, amount in self.redeemed_summary.get('vouchers').items():
215
+ upstream_info_list.append(CustomerRedeemedItemUpstream(
216
+ customer_key = self.redeemed_customer_key,
217
+ merchant_key = self.redeemed_merchant_acct_key,
218
+ redeemed_outlet_key = self.redeemed_outlet_key,
219
+ transaction_id = self.transaction_id,
220
+ reward_format = self.reward_format,
221
+ redeemed_datetime = self.redeemed_datetime,
222
+ redeemed_amount = amount,
223
+ voucher_key = merchant_voucher_key,
224
+ ))
225
+
226
+ return upstream_info_list
227
+
228
+ except:
229
+ logger.error('failed to process redeem summary where self.redeemed_summary=%s', self.redeemed_summary)
230
+ raise
231
+
232
+
203
233
 
204
234
  def revert(self, reverted_by, reverted_datetime=None):
205
235
  self.status = program_conf.REWARD_STATUS_REVERTED
@@ -244,7 +274,7 @@ class CustomerRedemption(BaseNModel, DictModel):
244
274
  return result
245
275
 
246
276
  @staticmethod
247
- def list_by_merchant_acct_with_cursor(merchant_acct, datetime_ranage_start=None, datetime_range_end=None, offset=0, limit=50, start_cursor=None):
277
+ def list_by_merchant_acct(merchant_acct, datetime_ranage_start=None, datetime_range_end=None, offset=0, limit=50, start_cursor=None, return_with_cursor=True):
248
278
  if is_not_empty(datetime_ranage_start) and is_not_empty(datetime_range_end):
249
279
  query = CustomerRedemption.query(ndb.AND(
250
280
  CustomerRedemption.merchant_acct==merchant_acct.create_ndb_key(),
@@ -255,9 +285,9 @@ class CustomerRedemption(BaseNModel, DictModel):
255
285
  query = CustomerRedemption.query(ndb.AND(
256
286
  CustomerRedemption.merchant_acct==merchant_acct.create_ndb_key(),
257
287
  ))
258
- (result, next_cursor) = CustomerRedemption.list_all_with_condition_query(query, start_cursor=start_cursor, return_with_cursor=True, offset=offset, limit=limit)
288
+ return CustomerRedemption.list_all_with_condition_query(query, start_cursor=start_cursor, return_with_cursor=return_with_cursor, offset=offset, limit=limit)
259
289
 
260
- return (result, next_cursor)
290
+ #return (result, next_cursor)
261
291
 
262
292
  @staticmethod
263
293
  def list_merchant_transaction(merchant_acct, offset=0, limit=conf.PAGINATION_SIZE, start_cursor=None, return_with_cursor=False, reverse_order=True):
@@ -151,6 +151,37 @@ class CustomerEntitledReward(RewardEntitlement):
151
151
  def delete_all_by_customer(cls, customer):
152
152
  query = cls.query(ancestor=customer.create_ndb_key())
153
153
  cls.delete_multiples(query)
154
+
155
+ @staticmethod
156
+ def count_by_merchant_acct(cls, merchant_acct, datetime_ranage_start=None, datetime_range_end=None):
157
+ if datetime_ranage_start and datetime_range_end:
158
+ result = cls.query(ndb.AND(
159
+ cls.merchant_acct==merchant_acct.create_ndb_key(),
160
+ cls.rewarded_datetime>=datetime_ranage_start,
161
+ cls.rewarded_datetime<datetime_range_end,
162
+ )).count(limit=conf.MAX_FETCH_RECORD)
163
+ else:
164
+ result = cls.query(ndb.AND(
165
+ cls.merchant_acct==merchant_acct.create_ndb_key(),
166
+ )).count(limit=conf.MAX_FETCH_RECORD)
167
+
168
+
169
+ return result
170
+
171
+ @classmethod
172
+ def list_by_merchant_acct(cls, merchant_acct, datetime_range_start=None, datetime_range_end=None, offset=0, limit=50, start_cursor=None, return_with_cursor=True):
173
+ if is_not_empty(datetime_range_start) and is_not_empty(datetime_range_end):
174
+ query = cls.query(ndb.AND(
175
+ cls.merchant_acct==merchant_acct.create_ndb_key(),
176
+ cls.rewarded_datetime>=datetime_range_start,
177
+ cls.rewarded_datetime<datetime_range_end,
178
+ ))
179
+ else:
180
+ query = cls.query(ndb.AND(
181
+ cls.merchant_acct==merchant_acct.create_ndb_key(),
182
+ ))
183
+ return cls.list_all_with_condition_query(query, start_cursor=start_cursor, return_with_cursor=return_with_cursor, offset=offset, limit=limit)
184
+
154
185
 
155
186
  class CustomerCountableReward(CustomerEntitledReward):
156
187
  reward_amount = ndb.FloatProperty(required=True, default=0)
@@ -400,7 +431,7 @@ class CustomerEntitledVoucher(CustomerEntitledReward):
400
431
 
401
432
 
402
433
  return result
403
-
434
+ '''
404
435
  @staticmethod
405
436
  def list_by_merchant_acct(merchant_acct, datetime_range_start=None, datetime_range_end=None, offset=0, limit=50,):
406
437
  if is_not_empty(datetime_range_start) and is_not_empty(datetime_range_end):
@@ -417,7 +448,7 @@ class CustomerEntitledVoucher(CustomerEntitledReward):
417
448
 
418
449
 
419
450
  @staticmethod
420
- def list_by_merchant_acct_with_cursor(merchant_acct, datetime_range_start=None, datetime_range_end=None, offset=0, limit=50, start_cursor=None):
451
+ def list_by_merchant_acct_with_cursor(merchant_acct, datetime_range_start=None, datetime_range_end=None, offset=0, limit=50, start_cursor=None, return_with_cursor=True):
421
452
  if is_not_empty(datetime_range_start) and is_not_empty(datetime_range_end):
422
453
  query = CustomerEntitledVoucher.query(ndb.AND(
423
454
  CustomerEntitledVoucher.merchant_acct==merchant_acct.create_ndb_key(),
@@ -428,10 +459,10 @@ class CustomerEntitledVoucher(CustomerEntitledReward):
428
459
  query = CustomerEntitledVoucher.query(ndb.AND(
429
460
  CustomerEntitledVoucher.merchant_acct==merchant_acct.create_ndb_key(),
430
461
  ))
431
- (result, next_cursor) = CustomerEntitledVoucher.list_all_with_condition_query(query, start_cursor=start_cursor, return_with_cursor=True, offset=offset, limit=limit)
462
+ (result, next_cursor) = CustomerEntitledVoucher.list_all_with_condition_query(query, start_cursor=start_cursor, return_with_cursor=return_with_cursor, offset=offset, limit=limit)
432
463
 
433
464
  return (result, next_cursor)
434
-
465
+ '''
435
466
  @staticmethod
436
467
  def count_redeemed_by_merchant_voucher_and_passed_redeemed_datetime(customer, merchant_voucher, passed_redeemed_datetime):
437
468
 
@@ -560,7 +591,9 @@ class CustomerEntitledVoucher(CustomerEntitledReward):
560
591
  def create(merchant_voucher, customer_acct, transact_outlet=None,
561
592
  effective_date=None, expiry_date=None,
562
593
  transaction_id=None, invoice_id=None,
563
- rewarded_by=None, rewarded_datetime=None):
594
+ rewarded_by=None, rewarded_datetime=None,
595
+ program_key=None
596
+ ):
564
597
 
565
598
  redeem_code = random_string(program_conf.REDEEM_CODE_LENGTH, is_human_mistake_safe=True)
566
599
 
@@ -587,6 +620,7 @@ class CustomerEntitledVoucher(CustomerEntitledReward):
587
620
  rewarded_datetime = rewarded_datetime,
588
621
 
589
622
  user_acct = customer_acct.registered_user_acct.create_ndb_key(),
623
+ reward_program = string_to_key_property(program_key),
590
624
  )
591
625
 
592
626
  customer_entiteld_voucher.put()
File without changes
File without changes
File without changes
File without changes