trex-model 0.2.17__tar.gz → 1.0.1__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.
- {trex-model-0.2.17/trex_model.egg-info → trex-model-1.0.1}/PKG-INFO +1 -1
- {trex-model-0.2.17 → trex-model-1.0.1}/setup.py +1 -1
- {trex-model-0.2.17 → trex-model-1.0.1/trex_model.egg-info}/PKG-INFO +1 -1
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/customer_models.py +43 -10
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/merchant_models.py +22 -2
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/redeem_models.py +1 -1
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/transaction_models.py +124 -43
- {trex-model-0.2.17 → trex-model-1.0.1}/LICENSE +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/MANIFEST.in +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/README.md +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/setup.cfg +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trex_model.egg-info/SOURCES.txt +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trex_model.egg-info/dependency_links.txt +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trex_model.egg-info/requires.txt +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trex_model.egg-info/top_level.txt +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/__init__.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/conf.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/__init__.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/__init__.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/admin_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/analytic_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/coporate_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/customer_model_helpers.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/fb_subsriber_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/inventory_model.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/loyalty_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/membership_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/model_decorators.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/ndb_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/pos_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/prepaid_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/product_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/program_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/reward_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/spending_base_program_model.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/system_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/task_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/test_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/user_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/voucher_models.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/merchant_helpers.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/model_decorator.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/prepaid_helpers.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/pos_conf.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/program_conf.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/utils/__init__.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/utils/gcloud/__init__.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/utils/gcloud/datastore_util.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/utils/model/__init__.py +0 -0
- {trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/utils/model/model_util.py +0 -0
|
@@ -586,6 +586,10 @@ class CustomerMembership(BaseNModel, DictModel):
|
|
|
586
586
|
def merchant_membership_key(self):
|
|
587
587
|
return self.merchant_membership.urlsafe().decode('utf-8')
|
|
588
588
|
|
|
589
|
+
@property
|
|
590
|
+
def merchant_acct_entity(self):
|
|
591
|
+
return MerchantAcct.fetch(self.merchant_acct.urlsafe())
|
|
592
|
+
|
|
589
593
|
@property
|
|
590
594
|
def merchant_membership_entity(self):
|
|
591
595
|
return MerchantMembership.fetch(self.merchant_membership.urlsafe())
|
|
@@ -685,10 +689,11 @@ class CustomerMembership(BaseNModel, DictModel):
|
|
|
685
689
|
|
|
686
690
|
expiry_date = merchant_membership.calc_expiry_date(start_date=entitled_datetime)
|
|
687
691
|
logger.debug('expiry_date=%s', expiry_date)
|
|
688
|
-
|
|
692
|
+
merchant_acct = merchant_membership.merchant_acct
|
|
689
693
|
customer_membership = CustomerMembership(
|
|
690
694
|
parent = customer.create_ndb_key(),
|
|
691
695
|
merchant_membership = merchant_membership.create_ndb_key(),
|
|
696
|
+
merchant_acct = merchant_acct.create_ndb_key(),
|
|
692
697
|
entitled_datetime = entitled_datetime,
|
|
693
698
|
entitled_date = entitled_datetime.date(),
|
|
694
699
|
expiry_date = expiry_date,
|
|
@@ -705,22 +710,50 @@ class CustomerMembership(BaseNModel, DictModel):
|
|
|
705
710
|
|
|
706
711
|
|
|
707
712
|
@staticmethod
|
|
708
|
-
def renew(customer, merchant_membership, renewed_datetime=None):
|
|
713
|
+
def renew(customer, merchant_membership, renewed_datetime=None, renewed_outlet=None, renewed_by=None):
|
|
709
714
|
|
|
710
715
|
customer_membership = CustomerMembership.get_by_customer_and_merchant_membership(customer, merchant_membership)
|
|
711
716
|
if customer_membership is not None:
|
|
712
717
|
if renewed_datetime is None:
|
|
713
718
|
renewed_datetime = datetime.utcnow()
|
|
714
|
-
|
|
715
|
-
customer_membership.renewed_datetime = renewed_datetime
|
|
716
|
-
customer_membership.renewed_date = renewed_datetime.date()
|
|
717
|
-
customer_membership.previous_expiry_date = customer_membership.expiry_date
|
|
718
|
-
customer_membership.expiry_date = merchant_membership.calc_expiry_date(start_date=renewed_datetime)
|
|
719
|
-
customer_membership.put()
|
|
720
719
|
|
|
721
|
-
|
|
720
|
+
merchant_acct = merchant_membership.merchant_acct
|
|
721
|
+
expiry_date = customer_membership.expiry_date
|
|
722
|
+
renewed_date = renewed_datetime.date()
|
|
723
|
+
valid_to_renew = False
|
|
724
|
+
|
|
725
|
+
day_difference = (expiry_date - renewed_date).days
|
|
726
|
+
logger.debug('day_difference=%s', day_difference)
|
|
727
|
+
if day_difference>=0:
|
|
728
|
+
logger.debug('advance renew')
|
|
729
|
+
if day_difference<merchant_acct.membership_renew_advance_day:
|
|
730
|
+
logger.debug('within configured advance renew')
|
|
731
|
+
valid_to_renew = True
|
|
732
|
+
else:
|
|
733
|
+
logger.debug('not within configured advance renew')
|
|
734
|
+
else:
|
|
735
|
+
logger.debug('late renew')
|
|
736
|
+
if abs(day_difference)<merchant_acct.membership_renew_late_day:
|
|
737
|
+
logger.debug('within configured late renew')
|
|
738
|
+
valid_to_renew = True
|
|
739
|
+
else:
|
|
740
|
+
logger.debug('not within configured late renew')
|
|
741
|
+
|
|
742
|
+
if valid_to_renew:
|
|
743
|
+
customer_membership.renewed_datetime = renewed_datetime
|
|
744
|
+
customer_membership.renewed_date = renewed_datetime.date()
|
|
745
|
+
customer_membership.previous_expiry_date = customer_membership.expiry_date
|
|
746
|
+
customer_membership.expiry_date = merchant_membership.calc_expiry_date(start_date=renewed_datetime)
|
|
747
|
+
customer_membership.renewed_outlet = renewed_outlet.create_ndb_key()
|
|
748
|
+
customer_membership.renewed_by = renewed_by.create_ndb_key()
|
|
749
|
+
customer_membership.renewed_by_username = renewed_by.username
|
|
750
|
+
customer_membership.put()
|
|
751
|
+
|
|
752
|
+
return customer_membership
|
|
753
|
+
else:
|
|
754
|
+
raise Exception('Renewal not within configured advance date or late date')
|
|
722
755
|
else:
|
|
723
|
-
|
|
756
|
+
raise Exception('Membership is not found')
|
|
724
757
|
|
|
725
758
|
def revert_renewal(self):
|
|
726
759
|
|
|
@@ -96,7 +96,10 @@ class MerchantAcct(MerchantMin):
|
|
|
96
96
|
|
|
97
97
|
@property
|
|
98
98
|
def program_configuration_list(self):
|
|
99
|
-
|
|
99
|
+
if is_not_empty(self.published_program_configuration):
|
|
100
|
+
return self.published_program_configuration.get('programs')
|
|
101
|
+
else:
|
|
102
|
+
return []
|
|
100
103
|
|
|
101
104
|
|
|
102
105
|
@property
|
|
@@ -104,12 +107,29 @@ class MerchantAcct(MerchantMin):
|
|
|
104
107
|
return is_not_empty(self.tier_membership_configuration)
|
|
105
108
|
|
|
106
109
|
|
|
110
|
+
@property
|
|
111
|
+
def days_of_return_policy(self):
|
|
112
|
+
return self.program_settings.get('days_of_return_policy') or MerchantAcct.default_program_settings().get('days_of_return_policy')
|
|
113
|
+
|
|
114
|
+
@property
|
|
115
|
+
def days_of_repeat_purchase_measurement(self):
|
|
116
|
+
return self.program_settings.get('days_of_repeat_purchase_measurement') or MerchantAcct.default_program_settings().get('days_of_repeat_purchase_measurement')
|
|
117
|
+
|
|
118
|
+
@property
|
|
119
|
+
def membership_renew_advance_day(self):
|
|
120
|
+
return self.program_settings.get('membership_renew_advance_day') or MerchantAcct.default_program_settings().get('membership_renew_advance_day')
|
|
121
|
+
|
|
122
|
+
@property
|
|
123
|
+
def membership_renew_late_day(self):
|
|
124
|
+
return self.program_settings.get('membership_renew_late_day') or MerchantAcct.default_program_settings().get('membership_renew_late_day')
|
|
125
|
+
|
|
107
126
|
@staticmethod
|
|
108
127
|
def default_program_settings():
|
|
109
128
|
return {
|
|
110
129
|
'days_of_return_policy' : 3,
|
|
111
130
|
'days_of_repeat_purchase_measurement' : 7,
|
|
112
|
-
|
|
131
|
+
'membership_renew_advance_day' : 7,
|
|
132
|
+
'membership_renew_late_day' : 30,
|
|
113
133
|
}
|
|
114
134
|
|
|
115
135
|
|
|
@@ -76,7 +76,7 @@ class CustomerRedemption(BaseNModel, DictModel):
|
|
|
76
76
|
reverted_by_username = ndb.StringProperty(required=False)
|
|
77
77
|
|
|
78
78
|
is_tier_program_redemption = ndb.BooleanProperty(required=False, default=False)
|
|
79
|
-
tier_program_transaction_id = ndb.StringProperty(required=
|
|
79
|
+
tier_program_transaction_id = ndb.StringProperty(required=False)
|
|
80
80
|
|
|
81
81
|
|
|
82
82
|
dict_properties = ['transaction_id', 'invoice_id', 'remarks', 'redeemed_amount', 'reward_format',
|
|
@@ -25,17 +25,17 @@ from trexmodel.models.datastore.reward_models import CustomerPointReward,\
|
|
|
25
25
|
|
|
26
26
|
logger = logging.getLogger('model')
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
class CustomerTransaction(BaseNModel, DictModel):
|
|
30
|
-
'''
|
|
31
|
-
|
|
32
|
-
'''
|
|
28
|
+
class SalesTransaction(BaseNModel, DictModel):
|
|
33
29
|
transact_merchant = ndb.KeyProperty(name="transact_merchant", kind=MerchantAcct)
|
|
34
30
|
transact_outlet = ndb.KeyProperty(name="transact_outlet", kind=Outlet)
|
|
35
31
|
|
|
36
32
|
transact_datetime = ndb.DateTimeProperty(required=True)
|
|
37
33
|
created_datetime = ndb.DateTimeProperty(required=True, auto_now=True)
|
|
38
34
|
|
|
35
|
+
reverted_datetime = ndb.DateTimeProperty(required=False)
|
|
36
|
+
reverted_by = ndb.KeyProperty(name="reverted_by", kind=MerchantUser)
|
|
37
|
+
reverted_by_username = ndb.StringProperty(required=False)
|
|
38
|
+
|
|
39
39
|
transact_timestamp = ndb.FloatProperty(required=False)
|
|
40
40
|
|
|
41
41
|
transaction_id = ndb.StringProperty(required=True)
|
|
@@ -51,6 +51,117 @@ class CustomerTransaction(BaseNModel, DictModel):
|
|
|
51
51
|
|
|
52
52
|
sales_channel = ndb.StringProperty(required=False)
|
|
53
53
|
|
|
54
|
+
is_revert = ndb.BooleanProperty(required=False, default=False)
|
|
55
|
+
is_sales_transaction = ndb.BooleanProperty(required=False, default=True)
|
|
56
|
+
allow_to_revert = ndb.BooleanProperty(required=False, default=True)
|
|
57
|
+
|
|
58
|
+
reward_expiry_date = ndb.DateProperty(required=False)
|
|
59
|
+
|
|
60
|
+
dict_properties = [
|
|
61
|
+
'transaction_id', 'invoice_id', 'remarks', 'system_remarks', 'tax_amount', 'transact_amount',
|
|
62
|
+
'transact_customer_acct', 'transact_outlet_details', 'transact_merchant_acct',
|
|
63
|
+
'transact_datetime', 'created_datetime', 'transact_outlet_key',
|
|
64
|
+
'is_sales_transaction', 'allow_to_revert', 'reward_expiry_date',
|
|
65
|
+
'transact_by', 'transact_by_username',
|
|
66
|
+
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
@property
|
|
70
|
+
def transact_customer_key(self):
|
|
71
|
+
return ''
|
|
72
|
+
|
|
73
|
+
@property
|
|
74
|
+
def transact_merchant_acct(self):
|
|
75
|
+
return MerchantAcct.fetch(self.transact_merchant.urlsafe())
|
|
76
|
+
|
|
77
|
+
@property
|
|
78
|
+
def transact_outlet_key(self):
|
|
79
|
+
if self.transact_outlet:
|
|
80
|
+
return self.transact_outlet.urlsafe().decode('utf-8')
|
|
81
|
+
|
|
82
|
+
@property
|
|
83
|
+
def transact_merchant_acct_key(self):
|
|
84
|
+
return self.transact_merchant.urlsafe().decode('utf-8')
|
|
85
|
+
|
|
86
|
+
@property
|
|
87
|
+
def transact_by_user(self):
|
|
88
|
+
if self.transact_by:
|
|
89
|
+
return MerchantUser.fetch(self.transact_by.urlsafe())
|
|
90
|
+
|
|
91
|
+
@property
|
|
92
|
+
def transact_user_acct_key(self):
|
|
93
|
+
return self.transact_by.urlsafe()
|
|
94
|
+
|
|
95
|
+
@property
|
|
96
|
+
def after_deduct_tax_sales_amount(self):
|
|
97
|
+
if self.tax_amount:
|
|
98
|
+
return self.transact_amount - self.tax_amount
|
|
99
|
+
else:
|
|
100
|
+
return self.transact_amount
|
|
101
|
+
|
|
102
|
+
@classmethod
|
|
103
|
+
def get_by_invoice_id(cls, invoice_id):
|
|
104
|
+
return cls.query(cls.invoice_id==invoice_id).get()
|
|
105
|
+
|
|
106
|
+
@staticmethod
|
|
107
|
+
def create(transact_amount=.0, tax_amount=.0, invoice_id=None, remarks=None, system_remarks=None,
|
|
108
|
+
transact_outlet=None, transact_by=None, transact_datetime=None,
|
|
109
|
+
|
|
110
|
+
):
|
|
111
|
+
|
|
112
|
+
transact_by_username = None
|
|
113
|
+
|
|
114
|
+
if is_not_empty(transact_by):
|
|
115
|
+
if isinstance(transact_by, MerchantUser):
|
|
116
|
+
transact_by_username = transact_by.username
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
transaction_id = generate_transaction_id()
|
|
120
|
+
|
|
121
|
+
if transact_datetime is None:
|
|
122
|
+
transact_datetime = datetime.utcnow()
|
|
123
|
+
|
|
124
|
+
logger.debug('generated transaction_id=%s', transaction_id)
|
|
125
|
+
logger.debug('invoice_id=%s', invoice_id)
|
|
126
|
+
logger.debug('tax_amount=%s', tax_amount)
|
|
127
|
+
logger.debug('transact_amount=%s', transact_amount)
|
|
128
|
+
logger.debug('transact_datetime=%s', transact_datetime)
|
|
129
|
+
logger.debug('transact_by_username=%s', transact_by_username)
|
|
130
|
+
logger.debug('system_remarks=%s', system_remarks)
|
|
131
|
+
|
|
132
|
+
customer_transaction = SalesTransaction(
|
|
133
|
+
transact_merchant = transact_outlet.merchant_acct_entity.create_ndb_key(),
|
|
134
|
+
transact_outlet = transact_outlet.create_ndb_key() if transact_outlet else None,
|
|
135
|
+
|
|
136
|
+
tax_amount = tax_amount,
|
|
137
|
+
transact_amount = transact_amount,
|
|
138
|
+
|
|
139
|
+
transaction_id = transaction_id,
|
|
140
|
+
invoice_id = invoice_id,
|
|
141
|
+
remarks = remarks,
|
|
142
|
+
system_remarks = system_remarks,
|
|
143
|
+
|
|
144
|
+
transact_by = transact_by.create_ndb_key() if transact_by else None,
|
|
145
|
+
transact_by_username = transact_by_username,
|
|
146
|
+
|
|
147
|
+
transact_datetime = transact_datetime,
|
|
148
|
+
|
|
149
|
+
is_sales_transaction = True,
|
|
150
|
+
allow_to_revert = True,
|
|
151
|
+
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
customer_transaction.put()
|
|
155
|
+
#customer.put()
|
|
156
|
+
|
|
157
|
+
return customer_transaction
|
|
158
|
+
|
|
159
|
+
class CustomerTransaction(SalesTransaction):
|
|
160
|
+
'''
|
|
161
|
+
Customer as ancestor
|
|
162
|
+
'''
|
|
163
|
+
|
|
164
|
+
|
|
54
165
|
entitled_reward_summary = ndb.JsonProperty()
|
|
55
166
|
entitled_voucher_summary = ndb.JsonProperty()
|
|
56
167
|
entitled_prepaid_summary = ndb.JsonProperty()
|
|
@@ -58,16 +169,13 @@ class CustomerTransaction(BaseNModel, DictModel):
|
|
|
58
169
|
|
|
59
170
|
reward_giveaway_method = ndb.StringProperty(required=False, default=program_conf.PROGRAM_REWARD_GIVEAWAY_METHOD_SYSTEM)
|
|
60
171
|
|
|
61
|
-
allow_to_revert = ndb.BooleanProperty(required=False, default=True)
|
|
62
172
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
reverted_by = ndb.KeyProperty(name="reverted_by", kind=MerchantUser)
|
|
66
|
-
reverted_by_username = ndb.StringProperty(required=False)
|
|
173
|
+
|
|
174
|
+
is_from_instant_transaction = ndb.BooleanProperty(required=False, default=False)
|
|
67
175
|
|
|
68
176
|
is_reward_redeemed = ndb.BooleanProperty(required=False, default=False)
|
|
69
177
|
|
|
70
|
-
|
|
178
|
+
|
|
71
179
|
|
|
72
180
|
is_membership_purchase = ndb.BooleanProperty(required=False, default=False)
|
|
73
181
|
is_membership_renew = ndb.BooleanProperty(required=False, default=False)
|
|
@@ -120,23 +228,6 @@ class CustomerTransaction(BaseNModel, DictModel):
|
|
|
120
228
|
def transact_customer_acct(self):
|
|
121
229
|
return Customer.fetch(self.key.parent().urlsafe())
|
|
122
230
|
|
|
123
|
-
@property
|
|
124
|
-
def transact_user_acct_key(self):
|
|
125
|
-
return Customer.fetch(self.key.parent().urlsafe()).registered_user_acct_key
|
|
126
|
-
|
|
127
|
-
@property
|
|
128
|
-
def transact_merchant_acct(self):
|
|
129
|
-
return MerchantAcct.fetch(self.transact_merchant.urlsafe())
|
|
130
|
-
|
|
131
|
-
@property
|
|
132
|
-
def transact_outlet_key(self):
|
|
133
|
-
if self.transact_outlet:
|
|
134
|
-
return self.transact_outlet.urlsafe().decode('utf-8')
|
|
135
|
-
|
|
136
|
-
@property
|
|
137
|
-
def transact_merchant_acct_key(self):
|
|
138
|
-
return self.transact_merchant.urlsafe().decode('utf-8')
|
|
139
|
-
|
|
140
231
|
@property
|
|
141
232
|
def transact_customer_key(self):
|
|
142
233
|
return self.key.parent().urlsafe().decode('utf-8')
|
|
@@ -146,22 +237,16 @@ class CustomerTransaction(BaseNModel, DictModel):
|
|
|
146
237
|
if self.transact_outlet:
|
|
147
238
|
return Outlet.fetch(self.transact_outlet.urlsafe())
|
|
148
239
|
|
|
149
|
-
@property
|
|
150
|
-
def transact_by_user(self):
|
|
151
|
-
if self.transact_by:
|
|
152
|
-
return MerchantUser.fetch(self.transact_by.urlsafe())
|
|
153
|
-
|
|
154
|
-
@property
|
|
155
|
-
def after_deduct_tax_sales_amount(self):
|
|
156
|
-
if self.tax_amount:
|
|
157
|
-
return self.transact_amount - self.tax_amount
|
|
158
|
-
else:
|
|
159
|
-
return self.transact_amount
|
|
160
240
|
|
|
161
241
|
@property
|
|
162
242
|
def purchased_merchant_membership_key(self):
|
|
163
243
|
if self.purchased_merchant_membership:
|
|
164
244
|
return self.purchased_merchant_membership.urlsafe().decode('utf-8')
|
|
245
|
+
|
|
246
|
+
@property
|
|
247
|
+
def purchased_merchant_membership_entity(self):
|
|
248
|
+
if self.purchased_merchant_membership:
|
|
249
|
+
return MerchantMembership.fetch(self.purchased_merchant_membership.urlsafe())
|
|
165
250
|
|
|
166
251
|
@property
|
|
167
252
|
def purchased_customer_membership_entity(self):
|
|
@@ -453,10 +538,6 @@ class CustomerTransaction(BaseNModel, DictModel):
|
|
|
453
538
|
def get_by_transaction_id(transaction_id):
|
|
454
539
|
return CustomerTransaction.query(CustomerTransaction.transaction_id==transaction_id).get()
|
|
455
540
|
|
|
456
|
-
@staticmethod
|
|
457
|
-
def get_by_invoice_id(invoice_id):
|
|
458
|
-
return CustomerTransaction.query(CustomerTransaction.invoice_id==invoice_id).get()
|
|
459
|
-
|
|
460
541
|
@staticmethod
|
|
461
542
|
def list_transaction_by_date(transact_date, transact_outlet=None, including_reverted_transaction=True, offset=0, limit=conf.PAGINATION_SIZE, start_cursor=None, return_with_cursor=False):
|
|
462
543
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{trex-model-0.2.17 → trex-model-1.0.1}/trexmodel/models/datastore/spending_base_program_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|