mangopay4-python-sdk 4.0.0__py3-none-any.whl

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.
mangopay/resources.py ADDED
@@ -0,0 +1,3958 @@
1
+ import six
2
+
3
+ from mangopay.signals import pre_save, post_save
4
+ from mangopay.utils import Money, Address, Birthplace
5
+ from . import constants
6
+ from .base import BaseApiModel, BaseApiModelMethods
7
+ from .compat import python_2_unicode_compatible
8
+ from .fields import (PrimaryKeyField, EmailField, CharField,
9
+ BooleanField, DateTimeField, DateField,
10
+ ManyToManyField, ForeignKeyField,
11
+ MoneyField, IntegerField, DisputeReasonField, RelatedManager, DictField, AddressField,
12
+ DebitedBankAccountField,
13
+ ShippingAddressField, RefundReasonField, ListField, ReportTransactionsFiltersField,
14
+ ReportWalletsFiltersField, BillingField, SecurityInfoField, PlatformCategorizationField,
15
+ BirthplaceField, ApplepayPaymentDataField, GooglepayPaymentDataField, ScopeBlockedField,
16
+ BrowserInfoField, ShippingField, CurrentStateField, FallbackReasonField, InstantPayoutField,
17
+ CountryAuthorizationDataField, PayinsLinkedField, ConversionRateField, CardInfoField,
18
+ LocalAccountDetailsField, VirtualAccountCapabilitiesField, PaymentRefField, PendingUserActionField,
19
+ LegalRepresentativeField, IndividualRecipientField, BusinessRecipientField,
20
+ RecipientPropertySchemaField, IndividualRecipientPropertySchemaField,
21
+ BusinessRecipientPropertySchemaField, CompanyNumberValidationField, ReportFilterField,
22
+ PayInIntentExternalDataField, PayInIntentBuyerField, SupportedBanksField, VerificationOfPayeeField,
23
+ PayInIntentRefundField, PayInIntentCaptureField, PayInIntentDisputeField, CustomFeesField,
24
+ UserMarginField, MarginsResponseField, ConsentScopeField, AuthenticationResultField,
25
+ FlowDescriptorField, SettlementFooterErrorsField, SettlementLinesErrorsField,
26
+ AccountFundingField, KycInformationField)
27
+ from .query import InsertQuery, UpdateQuery, SelectQuery, ActionQuery, DeleteQuery
28
+
29
+
30
+ class BaseModel(BaseApiModel):
31
+ id = PrimaryKeyField(api_name='Id')
32
+ tag = CharField(api_name='Tag')
33
+ update_date = DateTimeField(api_name='UpdateDate')
34
+
35
+
36
+ @python_2_unicode_compatible
37
+ class Client(BaseApiModel):
38
+ client_id = PrimaryKeyField(api_name='ClientId', required=True)
39
+ name = CharField(api_name='Name')
40
+ primary_theme_colour = CharField(api_name='PrimaryThemeColour')
41
+ primary_button_colour = CharField(api_name='PrimaryButtonColour')
42
+ logo = CharField(api_name='Logo')
43
+ tech_emails = ListField(api_name='TechEmails')
44
+ admin_email = ListField(api_name='AdminEmails')
45
+ fraud_emails = ListField(api_name='FraudEmails')
46
+ billing_emails = ListField(api_name='BillingEmails')
47
+ platform_description = ListField(api_name='PlatformDescription')
48
+ platform_categorization = PlatformCategorizationField(api_name='PlatformCategorization')
49
+ platform_url = CharField(api_name='PlatformURL')
50
+ headquarters_address = AddressField(api_name='HeadquartersAddress')
51
+ headquarters_phone_number = CharField(api_name='HeadquartersPhoneNumber')
52
+ tax_number = CharField(api_name='TaxNumber')
53
+ licensor = CharField(api_name='Licensor')
54
+
55
+ class Meta:
56
+ verbose_name = 'client'
57
+ verbose_name_plural = 'clients'
58
+ url = {
59
+ SelectQuery.identifier: '/clients',
60
+ UpdateQuery.identifier: '/clients'
61
+ }
62
+
63
+ @classmethod
64
+ def get(cls):
65
+ return super(Client, cls).get('')
66
+
67
+ def update(self, handler=None):
68
+ data = self.__dict__
69
+ update = UpdateQuery(self, '',
70
+ **data['_data']
71
+ )
72
+ return update.execute(handler)
73
+
74
+
75
+ class ClientLogo(BaseModel):
76
+ file = CharField(api_name='File')
77
+
78
+ class Meta:
79
+ verbose_name = 'client-logo'
80
+ verbose_name_plural = 'client-logos'
81
+ url = {
82
+ 'UPLOAD_CLIENT_LOGO': '/clients/logo/'
83
+ }
84
+
85
+ def upload(self, handler=None):
86
+ self._handler = handler or self.handler
87
+
88
+ action = ActionQuery(
89
+ ClientLogo,
90
+ self.get_pk(),
91
+ 'UPLOAD_CLIENT_LOGO',
92
+ **{'File': self.file}
93
+ )
94
+ return action.execute(handler)
95
+
96
+
97
+ @python_2_unicode_compatible
98
+ class User(BaseModel):
99
+ email = EmailField(api_name='Email', required=True)
100
+ kyc_level = CharField(api_name='KYCLevel', choices=constants.KYC_LEVEL, default=constants.KYC_LEVEL.light)
101
+ terms_and_conditions_accepted = BooleanField(api_name='TermsAndConditionsAccepted')
102
+ terms_and_conditions_accepted_date = DateTimeField(api_name='TermsAndConditionsAcceptedDate')
103
+ user_category = CharField(api_name='UserCategory')
104
+ user_status = CharField(api_name='UserStatus')
105
+
106
+ def fixed_kwargs(self):
107
+ return {"user_id": self.id}
108
+
109
+ class Meta:
110
+ verbose_name = 'user'
111
+ verbose_name_plural = 'users'
112
+ url = {
113
+ InsertQuery.identifier: '/users',
114
+ SelectQuery.identifier: '/users',
115
+ UpdateQuery.identifier: '/users',
116
+ 'USERS_GET_SCA': '/sca/users'
117
+ }
118
+
119
+ def __init__(self, *args, **kwargs):
120
+ super(User, self).__init__(*args, **kwargs)
121
+ self.disputes = RelatedManager(self, Dispute)
122
+
123
+ @classmethod
124
+ def cast(cls, result):
125
+ if 'PersonType' in result:
126
+ if result['PersonType'] == 'NATURAL':
127
+ if 'PendingUserAction' in result:
128
+ return NaturalUserSca
129
+ return NaturalUser
130
+ elif result['PersonType'] == 'LEGAL':
131
+ if 'PendingUserAction' in result:
132
+ return LegalUserSca
133
+ return LegalUser
134
+
135
+ return cls
136
+
137
+ @staticmethod
138
+ def get_sca(user_id, *args, **kwargs):
139
+ select = SelectQuery(User, *args, **kwargs)
140
+ select.identifier = 'USERS_GET_SCA'
141
+ return select.get(user_id, *args, **kwargs)
142
+
143
+ @staticmethod
144
+ def enroll_sca(user_id, idempotency_key=None):
145
+ insert = InsertQuery(ScaEnrollment, idempotency_key)
146
+ insert.insert_query['id'] = user_id
147
+ insert.identifier = 'USERS_ENROLL_SCA'
148
+ result = insert.execute()
149
+ return ScaEnrollment(**result)
150
+
151
+ @staticmethod
152
+ def manage_consent(user_id, idempotency_key=None):
153
+ insert = InsertQuery(UserConsent, idempotency_key)
154
+ insert.insert_query['id'] = user_id
155
+ insert.identifier = 'USERS_MANAGE_CONSENT'
156
+ result = insert.execute()
157
+ return UserConsent(**result)
158
+
159
+ def get_emoney(self, *args, **kwargs):
160
+ kwargs['user_id'] = self.id
161
+ select = SelectQuery(EMoney, *args, **kwargs)
162
+ if kwargs.__contains__('month') and kwargs.__contains__('year'):
163
+ select.identifier = 'FOR_MONTH'
164
+ elif kwargs.__contains__('year'):
165
+ select.identifier = 'FOR_YEAR'
166
+ else:
167
+ select.identifier = 'ALL'
168
+ return select.all(*args, **kwargs)
169
+
170
+ def get_pre_authorizations(self, *args, **kwargs):
171
+ kwargs['id'] = self.id
172
+ select = SelectQuery(PreAuthorization, *args, **kwargs)
173
+ select.identifier = 'USER_GET_PREAUTHORIZATIONS'
174
+ return select.all(*args, **kwargs)
175
+
176
+ def get_block_status(self, *args, **kwargs):
177
+ kwargs['user_id'] = self.id
178
+ select = SelectQuery(UserBlockStatus, *args, **kwargs)
179
+ select.identifier = 'USERS_BLOCK_STATUS'
180
+ return select.get("", *args, **kwargs)
181
+
182
+ def get_regulatory(self, *args, **kwargs):
183
+ kwargs['user_id'] = self.id
184
+ select = SelectQuery(UserBlockStatus, *args, **kwargs)
185
+ select.identifier = 'USERS_REGULATORY'
186
+ return select.get("", *args, **kwargs)
187
+
188
+ def __str__(self):
189
+ return '%s' % self.email
190
+
191
+
192
+ @python_2_unicode_compatible
193
+ class ScaEnrollment(BaseModel):
194
+ pending_user_action = PendingUserActionField(api_name='PendingUserAction')
195
+
196
+ class Meta:
197
+ verbose_name = 'sca_enrollment'
198
+ verbose_name_plural = 'sca_enrollments'
199
+ url = {
200
+ 'USERS_ENROLL_SCA': '/sca/users/%(id)s/enrollment'
201
+ }
202
+
203
+
204
+ @python_2_unicode_compatible
205
+ class UserConsent(BaseModel):
206
+ pending_user_action = PendingUserActionField(api_name='PendingUserAction')
207
+
208
+ class Meta:
209
+ verbose_name = 'user_consent'
210
+ verbose_name_plural = 'user_consents'
211
+ url = {
212
+ 'USERS_MANAGE_CONSENT': '/sca/users/%(id)s/consent'
213
+ }
214
+
215
+
216
+ @python_2_unicode_compatible
217
+ class NaturalUser(User):
218
+ """
219
+ .. deprecated::
220
+ The non-SCA natural user endpoints are deprecated. Use :class:`NaturalUserSca`
221
+ (create/update via ``/sca/users/natural``) and :meth:`User.get_sca` for
222
+ retrieval instead. Kept for backward compatibility; will be removed in a
223
+ future major version.
224
+ """
225
+ person_type = CharField(api_name='PersonType',
226
+ choices=constants.USER_TYPE_CHOICES,
227
+ default=constants.USER_TYPE_CHOICES.natural,
228
+ required=True)
229
+ first_name = CharField(api_name='FirstName', required=True)
230
+ last_name = CharField(api_name='LastName', required=True)
231
+ address = AddressField(api_name='Address')
232
+ birthday = DateField(api_name='Birthday')
233
+ nationality = CharField(api_name='Nationality')
234
+ country_of_residence = CharField(api_name='CountryOfResidence')
235
+ occupation = CharField(api_name='Occupation')
236
+ income_range = CharField(api_name='IncomeRange')
237
+ proof_of_identity = CharField(api_name='ProofOfIdentity')
238
+ proof_of_address = CharField(api_name='ProofOfAddress')
239
+ capacity = CharField(api_name='Capacity', choices=constants.NATURAL_USER_CAPACITY_CHOICES)
240
+
241
+ class Meta:
242
+ verbose_name = 'user'
243
+ verbose_name_plural = 'users'
244
+ url = '/users/natural'
245
+
246
+ @classmethod
247
+ def close(cls, *args, **kwargs):
248
+ return DeleteQuery(cls, *args, **kwargs).execute()
249
+
250
+ def __str__(self):
251
+ return '%s' % self.email
252
+
253
+
254
+ @python_2_unicode_compatible
255
+ class NaturalUserSca(User):
256
+ creation_date = DateTimeField(api_name='CreationDate')
257
+ terms_and_conditions_accepted = BooleanField(api_name='TermsAndConditionsAccepted', required=True)
258
+ user_category = CharField(api_name='UserCategory', required=True)
259
+ person_type = CharField(api_name='PersonType',
260
+ choices=constants.USER_TYPE_CHOICES,
261
+ default=constants.USER_TYPE_CHOICES.natural)
262
+ first_name = CharField(api_name='FirstName', required=True)
263
+ last_name = CharField(api_name='LastName', required=True)
264
+ birthday = DateField(api_name='Birthday')
265
+ nationality = CharField(api_name='Nationality')
266
+ country_of_residence = CharField(api_name='CountryOfResidence')
267
+ occupation = CharField(api_name='Occupation')
268
+ income_range = CharField(api_name='IncomeRange')
269
+ proof_of_identity = CharField(api_name='ProofOfIdentity')
270
+ proof_of_address = CharField(api_name='ProofOfAddress')
271
+ capacity = CharField(api_name='Capacity', choices=constants.NATURAL_USER_CAPACITY_CHOICES)
272
+ phone_number = CharField(api_name='PhoneNumber')
273
+ phone_number_country = CharField(api_name='PhoneNumberCountry')
274
+ address = AddressField(api_name='Address')
275
+ pending_user_action = PendingUserActionField(api_name='PendingUserAction')
276
+ sca_context = CharField(api_name='ScaContext')
277
+
278
+ class Meta:
279
+ verbose_name = 'sca_user'
280
+ verbose_name_plural = 'sca_users'
281
+ url = {
282
+ InsertQuery.identifier: '/sca/users/natural',
283
+ SelectQuery.identifier: '/sca/users/natural',
284
+ UpdateQuery.identifier: '/sca/users/natural',
285
+ DeleteQuery.identifier: '/users/natural',
286
+ 'USERS_NATURAL_SCA_CATEGORIZE': '/sca/users/natural/%(id)s/category'
287
+ }
288
+
289
+ def __str__(self):
290
+ return '%s' % self.email
291
+
292
+ def categorize(self, **kwargs):
293
+ update = UpdateQuery(NaturalUserSca, '', **kwargs)
294
+ update.identifier = 'USERS_NATURAL_SCA_CATEGORIZE'
295
+
296
+ if kwargs == {}:
297
+ update.update_query = self.__dict__['_data']
298
+
299
+ return update.execute(self.handler)
300
+
301
+ @classmethod
302
+ def close(cls, *args, **kwargs):
303
+ return DeleteQuery(cls, *args, **kwargs).execute()
304
+
305
+
306
+ @python_2_unicode_compatible
307
+ class LegalUser(User):
308
+ """
309
+ .. deprecated::
310
+ The non-SCA legal user endpoints are deprecated. Use :class:`LegalUserSca`
311
+ (create/update via ``/sca/users/legal``) and :meth:`User.get_sca` for
312
+ retrieval instead. Kept for backward compatibility; will be removed in a
313
+ future major version.
314
+ """
315
+ person_type = CharField(api_name='PersonType',
316
+ choices=constants.USER_TYPE_CHOICES,
317
+ default=constants.USER_TYPE_CHOICES.legal,
318
+ required=True)
319
+ name = CharField(api_name='Name', required=True)
320
+ legal_person_type = CharField(api_name='LegalPersonType',
321
+ choices=constants.LEGAL_USER_TYPE_CHOICES)
322
+ headquarters_address = AddressField(api_name='HeadquartersAddress')
323
+ legal_representative_first_name = CharField(api_name='LegalRepresentativeFirstName', required=True)
324
+ legal_representative_last_name = CharField(api_name='LegalRepresentativeLastName', required=True)
325
+ legal_representative_address = AddressField(api_name='LegalRepresentativeAddress')
326
+ legal_representative_email = EmailField(api_name='LegalRepresentativeEmail')
327
+ legal_representative_birthday = DateField(api_name='LegalRepresentativeBirthday')
328
+ legal_representative_nationality = CharField(api_name='LegalRepresentativeNationality')
329
+ legal_representative_country_of_residence = CharField(api_name='LegalRepresentativeCountryOfResidence')
330
+ legal_representative_proof_of_identity = CharField(api_name='LegalRepresentativeProofOfIdentity')
331
+ statute = CharField(api_name='Statute')
332
+ proof_of_registration = CharField(api_name='ProofOfRegistration')
333
+ shareholder_declaration = CharField(api_name='ShareholderDeclaration')
334
+ company_number = CharField(api_name='CompanyNumber')
335
+
336
+ class Meta:
337
+ verbose_name = 'user'
338
+ verbose_name_plural = 'users'
339
+ url = '/users/legal'
340
+
341
+ def __str__(self):
342
+ return '%s' % self.email
343
+
344
+ @classmethod
345
+ def close(cls, *args, **kwargs):
346
+ return DeleteQuery(cls, *args, **kwargs).execute()
347
+
348
+
349
+ @python_2_unicode_compatible
350
+ class LegalUserSca(User):
351
+ creation_date = DateTimeField(api_name='CreationDate')
352
+ person_type = CharField(api_name='PersonType',
353
+ choices=constants.USER_TYPE_CHOICES,
354
+ default=constants.USER_TYPE_CHOICES.legal)
355
+ name = CharField(api_name='Name', required=True)
356
+ legal_person_type = CharField(api_name='LegalPersonType',
357
+ choices=constants.LEGAL_USER_TYPE_CHOICES,
358
+ required=True)
359
+ legal_representative = LegalRepresentativeField(api_name='LegalRepresentative', required=True)
360
+ proof_of_registration = CharField(api_name='ProofOfRegistration')
361
+ shareholder_declaration = CharField(api_name='ShareholderDeclaration')
362
+ statute = CharField(api_name='Statute')
363
+ company_number = CharField(api_name='CompanyNumber')
364
+ pending_user_action = PendingUserActionField(api_name='PendingUserAction')
365
+ headquarters_address = AddressField(api_name='HeadquartersAddress')
366
+ terms_and_conditions_accepted = BooleanField(api_name='TermsAndConditionsAccepted', required=True)
367
+ user_category = CharField(api_name='UserCategory', required=True)
368
+ legal_representative_address = AddressField(api_name='LegalRepresentativeAddress')
369
+ sca_context = CharField(api_name='ScaContext')
370
+
371
+ class Meta:
372
+ verbose_name = 'sca_user'
373
+ verbose_name_plural = 'sca_users'
374
+ url = {
375
+ InsertQuery.identifier: '/sca/users/legal',
376
+ SelectQuery.identifier: '/sca/users/legal',
377
+ UpdateQuery.identifier: '/sca/users/legal',
378
+ DeleteQuery.identifier: '/users/legal',
379
+ 'USERS_LEGAL_SCA_CATEGORIZE': '/sca/users/legal/%(id)s/category'
380
+ }
381
+
382
+ def __str__(self):
383
+ return '%s' % self.email
384
+
385
+ def categorize(self, **kwargs):
386
+ update = UpdateQuery(LegalUserSca, '', **kwargs)
387
+ update.identifier = 'USERS_LEGAL_SCA_CATEGORIZE'
388
+
389
+ if kwargs == {}:
390
+ update.update_query = self.__dict__['_data']
391
+
392
+ return update.execute(self.handler)
393
+
394
+ @classmethod
395
+ def close(cls, *args, **kwargs):
396
+ return DeleteQuery(cls, *args, **kwargs).execute()
397
+
398
+
399
+ @python_2_unicode_compatible
400
+ class EMoney(BaseModel):
401
+ user = ForeignKeyField(User, api_name='UserId', related_name='emoney')
402
+ credited_emoney = MoneyField(api_name='CreditedEMoney')
403
+ debited_emoney = MoneyField(api_name='DebitedEMoney')
404
+
405
+ class Meta:
406
+ verbose_name = 'emoney'
407
+ url = {
408
+ 'ALL': '/users/%(user_id)s/emoney',
409
+ 'FOR_YEAR': '/users/%(user_id)s/emoney/%(year)s',
410
+ 'FOR_MONTH': '/users/%(user_id)s/emoney/%(year)s/%(month)s'
411
+ }
412
+
413
+ def __str__(self):
414
+ return 'EMoney for user %s' % self.user_id
415
+
416
+
417
+ @python_2_unicode_compatible
418
+ class Wallet(BaseModel):
419
+ owners = ManyToManyField(User, api_name='Owners', related_name='wallets', required=True)
420
+ description = CharField(api_name='Description', required=True)
421
+ currency = CharField(api_name='Currency', required=True)
422
+ balance = MoneyField(api_name='Balance')
423
+ creation_date = DateTimeField(api_name='CreationDate')
424
+
425
+ class Meta:
426
+ verbose_name = 'wallet'
427
+ verbose_name_plural = 'wallets'
428
+ url = {
429
+ InsertQuery.identifier: '/wallets',
430
+ SelectQuery.identifier: '/wallets',
431
+ UpdateQuery.identifier: '/wallets',
432
+ 'GET_ALL_FOR_USER': '/users/%(user_id)s/wallets'
433
+ }
434
+
435
+ def __init__(self, *args, **kwargs):
436
+ super(Wallet, self).__init__(*args, **kwargs)
437
+ self.disputes = RelatedManager(self, Dispute)
438
+
439
+ def __str__(self):
440
+ return 'Wallet n.%s' % self.id
441
+
442
+ @classmethod
443
+ def is_client_wallet(cls, obj):
444
+ if isinstance(obj, Wallet) or isinstance(obj, ClientWallet):
445
+ test_id = obj.id
446
+ elif isinstance(obj, str):
447
+ test_id = obj
448
+ else:
449
+ return False
450
+ if test_id.startswith('FEES_') or \
451
+ test_id.startswith('DEFAULT_') or \
452
+ test_id.startswith('CREDIT_'):
453
+ return True
454
+ return False
455
+
456
+ @classmethod
457
+ def get(cls, *args, **kwargs):
458
+ if len(args) == 1 and cls.is_client_wallet(args[0]):
459
+ return ClientWallet.get(*tuple(args[0].split('_')), **kwargs)
460
+ return super(Wallet, cls).get(with_query_params=True, *args, **kwargs)
461
+
462
+ @staticmethod
463
+ def get_all_for_user(user_id, *args, **kwargs):
464
+ kwargs['user_id'] = user_id
465
+ select = SelectQuery(Wallet, *args, **kwargs)
466
+ select.identifier = 'GET_ALL_FOR_USER'
467
+ return select.all(*args, **kwargs)
468
+
469
+
470
+ @python_2_unicode_compatible
471
+ class ConversionRate(BaseModel):
472
+ debited_currency = CharField(api_name='DebitedCurrency', required=True)
473
+ credited_currency = CharField(api_name='CreditedCurrency', required=True)
474
+ client_rate = CharField(api_name='ClientRate')
475
+ market_rate = CharField(api_name='MarketRate')
476
+
477
+ def get_conversion_rate(self, *args, **kwargs):
478
+ kwargs['debited_currency'] = self.debited_currency
479
+ kwargs['credited_currency'] = self.credited_currency
480
+ select = SelectQuery(ConversionRate, *args, **kwargs)
481
+ select.identifier = 'GET_CONVERSION_RATE'
482
+ return select.all(*args, **kwargs)
483
+
484
+ class Meta:
485
+ verbose_name = 'conversion_rate'
486
+ verbose_name_plural = 'conversion_rates'
487
+ url = {
488
+ 'GET_CONVERSION_RATE': '/conversions/rate/%(debited_currency)s/%(credited_currency)s'
489
+ }
490
+
491
+
492
+ class ConversionQuote(BaseModel):
493
+ expiration_date = DateTimeField(api_name='ExpirationDate')
494
+ status = CharField(api_name='Status', choices=constants.STATUS_CHOICES, default=None)
495
+ duration = IntegerField(api_name='Duration')
496
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
497
+ credited_funds = MoneyField(api_name='CreditedFunds', required=True)
498
+ conversion_rate = ConversionRateField(api_name='ConversionRateResponse')
499
+ fees = CustomFeesField(api_name="Fees")
500
+ requested_fees = CustomFeesField(api_name="RequestedFees")
501
+ user_margin = UserMarginField(api_name="UserMargin")
502
+ margins_response = MarginsResponseField(api_name='MarginsResponse')
503
+
504
+ def create_conversion_quote(self, **kwargs):
505
+ insert = InsertQuery(self, **kwargs)
506
+ insert.insert_query = self.get_field_dict()
507
+ insert.identifier = 'CREATE_CONVERSION_QUOTE'
508
+ return insert.execute()
509
+
510
+ @staticmethod
511
+ def get_conversion_quote(id, *args, **kwargs):
512
+ kwargs['id'] = id
513
+ select = SelectQuery(ConversionQuote, *args, **kwargs)
514
+ select.identifier = 'GET_CONVERSION_QUOTE'
515
+ return select.all(*args, **kwargs)
516
+
517
+ class Meta:
518
+ verbose_name = 'conversion_quote'
519
+ verbose_name_plural = 'conversions'
520
+ url = {
521
+ 'CREATE_CONVERSION_QUOTE': '/conversions/quote',
522
+ 'GET_CONVERSION_QUOTE': '/conversions/quote/%(id)s'
523
+ }
524
+
525
+
526
+ @python_2_unicode_compatible
527
+ class Conversion(BaseModel):
528
+ quote_id = ForeignKeyField(ConversionQuote, api_name='QuoteId', default=None)
529
+ type = CharField(api_name='Type', choices=constants.TRANSACTION_TYPE_CHOICES, default=None)
530
+ nature = CharField(api_name='Nature', choices=constants.NATURE_CHOICES, default=None)
531
+ status = CharField(api_name='Status', choices=constants.STATUS_CHOICES, default=None)
532
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
533
+ debited_wallet = ForeignKeyField(Wallet, api_name='DebitedWalletId', required=True)
534
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
535
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
536
+ credited_funds = MoneyField(api_name='CreditedFunds', required=True)
537
+ fees = MoneyField(api_name="Fees", required=True)
538
+ requested_fees = CustomFeesField(api_name="RequestedFees")
539
+ result_code = CharField(api_name='ResultCode')
540
+ result_message = CharField(api_name='ResultMessage')
541
+ execution_date = DateTimeField(api_name='ExecutionDate')
542
+ conversion_rate = ConversionRateField(api_name='ConversionRate')
543
+ creation_date = DateTimeField(api_name='CreationDate')
544
+ margins_response = MarginsResponseField(api_name='MarginsResponse')
545
+
546
+ @staticmethod
547
+ def get_conversion(id, *args, **kwargs):
548
+ kwargs['id'] = id
549
+ select = SelectQuery(Conversion, *args, **kwargs)
550
+ select.identifier = 'GET_CONVERSION'
551
+ return select.all(*args, **kwargs)
552
+
553
+ class Meta:
554
+ verbose_name = 'conversion'
555
+ verbose_name_plural = 'conversions'
556
+ url = {
557
+ 'GET_CONVERSION': '/conversions/%(id)s'
558
+ }
559
+
560
+
561
+ class QuotedConversion(BaseModel):
562
+ quote = ForeignKeyField(ConversionQuote, api_name='QuoteId')
563
+ author = ForeignKeyField(User, api_name="AuthorId")
564
+ debited_wallet = ForeignKeyField(Wallet, api_name="DebitedWalletId")
565
+ credited_wallet = ForeignKeyField(Wallet, api_name="CreditedWalletId")
566
+ tag = CharField(api_name="Tag")
567
+
568
+ def save(self, **kwargs):
569
+ insert = InsertQuery(self, **kwargs)
570
+ insert.insert_query = self.get_field_dict()
571
+ insert.identifier = InsertQuery.identifier
572
+ return insert.execute(model_klass=Conversion)
573
+
574
+ class Meta:
575
+ verbose_name = 'quoted_conversion'
576
+ verbose_name_plural = 'quoted_conversions'
577
+ url = {
578
+ InsertQuery.identifier: '/conversions/quoted-conversion'
579
+ }
580
+
581
+
582
+ class ClientWalletsQuotedConversion(BaseModel):
583
+ quote = ForeignKeyField(ConversionQuote, api_name='QuoteId', required=True)
584
+ debited_wallet_type = CharField(Wallet, api_name="DebitedWalletType", required=True)
585
+ credited_wallet_type = CharField(Wallet, api_name="CreditedWalletType", required=True)
586
+ tag = CharField(api_name="Tag")
587
+
588
+ def save(self, **kwargs):
589
+ insert = InsertQuery(self, **kwargs)
590
+ insert.insert_query = self.get_field_dict()
591
+ insert.identifier = InsertQuery.identifier
592
+ return insert.execute(model_klass=Conversion)
593
+
594
+ class Meta:
595
+ verbose_name = 'client_wallet_quoted_conversion'
596
+ verbose_name_plural = 'client_wallet_quoted_conversions'
597
+ url = {
598
+ InsertQuery.identifier: '/clients/conversions/quoted-conversion'
599
+ }
600
+
601
+
602
+ class InstantConversion(BaseModel):
603
+ author = ForeignKeyField(User, api_name="AuthorId")
604
+ debited_wallet = ForeignKeyField(Wallet, api_name="DebitedWalletId")
605
+ credited_wallet = ForeignKeyField(Wallet, api_name="CreditedWalletId")
606
+ debited_funds = MoneyField(api_name="DebitedFunds")
607
+ credited_funds = MoneyField(api_name="CreditedFunds")
608
+ fees = CustomFeesField(api_name="Fees")
609
+ tag = CharField(api_name="Tag")
610
+ user_margin = UserMarginField(api_name="UserMargin")
611
+
612
+ def save(self, **kwargs):
613
+ insert = InsertQuery(self, **kwargs)
614
+ insert.insert_query = self.get_field_dict()
615
+ insert.identifier = 'INSTANT_CONVERSION'
616
+ return insert.execute(model_klass=Conversion)
617
+
618
+ class Meta:
619
+ verbose_name = 'instant_conversion'
620
+ verbose_name_plural = 'instant_conversions'
621
+ url = {
622
+ 'INSTANT_CONVERSION': '/conversions/instant-conversion'
623
+ }
624
+
625
+
626
+ class ClientWalletsInstantConversion(BaseModel):
627
+ debited_wallet_type = CharField(Wallet, api_name="DebitedWalletType", required=True)
628
+ credited_wallet_type = CharField(Wallet, api_name="CreditedWalletType", required=True)
629
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
630
+ credited_funds = MoneyField(api_name='CreditedFunds', required=True)
631
+ tag = CharField(api_name="Tag")
632
+
633
+ def save(self, **kwargs):
634
+ insert = InsertQuery(self, **kwargs)
635
+ insert.insert_query = self.get_field_dict()
636
+ insert.identifier = InsertQuery.identifier
637
+ return insert.execute(model_klass=Conversion)
638
+
639
+ class Meta:
640
+ verbose_name = 'client_wallet_instant_conversion'
641
+ verbose_name_plural = 'client_wallet_instant_conversions'
642
+ url = {
643
+ InsertQuery.identifier: '/clients/conversions/instant-conversion'
644
+ }
645
+
646
+
647
+ @python_2_unicode_compatible
648
+ class Transfer(BaseModel):
649
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
650
+ credited_user = ForeignKeyField(User, api_name='CreditedUserId', required=True, related_name='credited_users')
651
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
652
+ fees = MoneyField(api_name='Fees', required=True)
653
+ debited_wallet = ForeignKeyField(Wallet, api_name='DebitedWalletId')
654
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
655
+ creation_date = DateTimeField(api_name='CreationDate')
656
+ credited_funds = MoneyField(api_name='CreditedFunds')
657
+ status = CharField(api_name='Status',
658
+ choices=constants.STATUS_CHOICES,
659
+ default=None)
660
+ result_code = CharField(api_name='ResultCode')
661
+ result_message = CharField(api_name='ResultMessage')
662
+ execution_date = DateTimeField(api_name='ExecutionDate')
663
+ sca_context = CharField(api_name='ScaContext')
664
+ pending_user_action = PendingUserActionField(api_name='PendingUserAction')
665
+
666
+ def get_refunds(self, *args, **kwargs):
667
+ kwargs['id'] = self.id
668
+ select = SelectQuery(Refund, *args, **kwargs)
669
+ select.identifier = 'TRANSFER_GET_REFUNDS'
670
+ return select.all(*args, **kwargs)
671
+
672
+ class Meta:
673
+ verbose_name = 'transfer'
674
+ verbose_name_plural = 'transfers'
675
+ url = '/transfers'
676
+
677
+ def __str__(self):
678
+ return 'Transfer from wallet %s to wallet %s' % (self.debited_wallet_id, self.credited_wallet_id)
679
+
680
+
681
+ @python_2_unicode_compatible
682
+ class Card(BaseModel):
683
+ creation_date = DateTimeField(api_name='CreationDate')
684
+ expiration_date = CharField(api_name='ExpirationDate')
685
+ alias = CharField(api_name='Alias')
686
+ card_provider = CharField(api_name='CardProvider')
687
+ card_type = CharField(api_name='CardType',
688
+ choices=constants.CARD_TYPE_CHOICES,
689
+ default=None)
690
+ country = CharField(api_name='Country')
691
+ product = CharField(api_name='Product')
692
+ bank_code = CharField(api_name='BankCode')
693
+ active = BooleanField(api_name='Active')
694
+ currency = CharField(api_name='Currency')
695
+ validity = CharField(api_name='Validity',
696
+ choices=constants.VALIDITY_CHOICES,
697
+ default=constants.VALIDITY_CHOICES.unknown)
698
+ user = ForeignKeyField(User, api_name='UserId', required=True, related_name='cards')
699
+ fingerprint = CharField(api_name='Fingerprint')
700
+ card_holder_name = CharField(api_name='CardHolderName')
701
+
702
+ @classmethod
703
+ def get_by_fingerprint(cls, fingerprint, *args, **kwargs):
704
+ kwargs['fingerprint'] = fingerprint
705
+ select = SelectQuery(cls, *args, **kwargs)
706
+ select.identifier = 'CARDS_FOR_FINGERPRINT'
707
+ return select.all(*args, **kwargs)
708
+
709
+ def get_pre_authorizations(self, *args, **kwargs):
710
+ kwargs['id'] = self.id
711
+ select = SelectQuery(PreAuthorization, *args, **kwargs)
712
+ select.identifier = 'CARD_PRE_AUTHORIZATIONS'
713
+ return select.all(*args, **kwargs)
714
+
715
+ def get_transactions(self, *args, **kwargs):
716
+ kwargs['id'] = self.id
717
+ select = SelectQuery(Transaction, *args, **kwargs)
718
+ select.identifier = 'CARD_GET_TRANSACTIONS'
719
+ return select.all(*args, **kwargs)
720
+
721
+ @classmethod
722
+ def get_transactions_by_fingerprint(cls, fingerprint, *args, **kwargs):
723
+ kwargs['fingerprint'] = fingerprint
724
+ select = SelectQuery(Transaction, *args, **kwargs)
725
+ select.identifier = 'TRANSACTIONS_FOR_FINGERPRINT'
726
+ return select.all(*args, **kwargs)
727
+
728
+ class Meta:
729
+ verbose_name = 'card'
730
+ verbose_name_plural = 'cards'
731
+ url = {
732
+ SelectQuery.identifier: '/cards',
733
+ UpdateQuery.identifier: '/cards',
734
+ 'CARDS_FOR_FINGERPRINT': '/cards/fingerprints/%(fingerprint)s'
735
+ }
736
+
737
+ def __str__(self):
738
+ return '%s of user %s' % (self.card_type, self.user_id)
739
+
740
+
741
+ class CardValidation(BaseModel):
742
+ creation_date = DateTimeField(api_name='CreationDate')
743
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
744
+ ip_address = CharField(api_name='IpAddress', required=True)
745
+ browser_info = BrowserInfoField(api_name='BrowserInfo', required=True)
746
+ secure_mode_return_url = CharField(api_name='SecureModeReturnURL', required=True)
747
+ secure_mode_redirect_url = CharField(api_name='SecureModeRedirectURL')
748
+ secure_mode_needed = BooleanField(api_name='SecureModeNeeded')
749
+ secure_mode = CharField(api_name='SecureMode',
750
+ choices=constants.SECURE_MODE_CHOICES)
751
+ validity = CharField(api_name='Validity',
752
+ choices=constants.VALIDITY_CHOICES,
753
+ default=constants.VALIDITY_CHOICES.unknown)
754
+ type = CharField(api_name='Type', choices=constants.TRANSACTION_TYPE_CHOICES, default=None)
755
+ applied_3ds_version = CharField(api_name='Applied3DSVersion')
756
+ status = CharField(api_name='Status',
757
+ choices=constants.STATUS_CHOICES,
758
+ default=None)
759
+ result_code = CharField(api_name='ResultCode')
760
+ result_message = CharField(api_name='ResultMessage')
761
+ preferred_card_network = CharField(api_name='PreferredCardNetwork')
762
+ authorization_date = DateTimeField(api_name='AuthorizationDate')
763
+ card_info = CardInfoField(api_name='CardInfo')
764
+ payment_category = CharField(api_name='PaymentCategory')
765
+ authentication_result = AuthenticationResultField(api_name='AuthenticationResult')
766
+
767
+ def validate(self, card_id, **kwargs):
768
+ insert = InsertQuery(self, **kwargs)
769
+ insert.insert_query = self.get_field_dict()
770
+ insert.insert_query['id'] = card_id
771
+ insert.identifier = 'CARD_VALIDATE'
772
+ return insert.execute()
773
+
774
+ def get_card_validation(self, card_id, *args, **kwargs):
775
+ kwargs['card_id'] = card_id
776
+ kwargs['id'] = self.id
777
+ select = SelectQuery(CardValidation, *args, **kwargs)
778
+ select.identifier = 'GET_CARD_VALIDATION'
779
+ return select.all(*args, **kwargs)
780
+
781
+ @classmethod
782
+ def get(cls, card_validation_id, card_id, *args, **kwargs):
783
+ kwargs['card_id'] = card_id
784
+ kwargs['id'] = card_validation_id
785
+ select = SelectQuery(CardValidation, *args, **kwargs)
786
+ select.identifier = 'GET'
787
+ return select.get("", *args, **kwargs)
788
+
789
+ class Meta:
790
+ verbose_name = 'card_validation'
791
+ verbose_name_plural = 'card_validations'
792
+ url = {
793
+ 'CARD_VALIDATE': '/cards/%(id)s/validation',
794
+ 'GET_CARD_VALIDATION': '/cards/%(card_id)s/validation/%(id)s',
795
+ 'GET': '/cards/%(card_id)s/validation/%(id)s'
796
+ }
797
+
798
+
799
+ class CardRegistration(BaseModel):
800
+ user = ForeignKeyField(User, api_name='UserId', required=True, related_name='card_registrations')
801
+ currency = CharField(api_name='Currency', required=True)
802
+ card_type = CharField(api_name='CardType', choices=constants.CARD_TYPE_CHOICES, default=None)
803
+ card_registration_url = CharField(api_name='CardRegistrationURL')
804
+ access_key = CharField(api_name='AccessKey')
805
+ preregistration_data = CharField(api_name='PreregistrationData')
806
+ registration_data = CharField(api_name='RegistrationData')
807
+ card = ForeignKeyField(Card, api_name='CardId')
808
+ result_code = CharField(api_name='ResultCode')
809
+ result_message = CharField(api_name='ResultMessage')
810
+ status = CharField(api_name='Status', choices=constants.CARD_STATUS_CHOICES, default=None)
811
+ creation_date = DateTimeField(api_name='CreationDate')
812
+ card_holder_name = CharField(api_name='CardHolderName')
813
+
814
+ class Meta:
815
+ verbose_name = 'cardregistration'
816
+ verbose_name_plural = 'cardregistrations'
817
+ url = '/cardregistrations'
818
+
819
+
820
+ class Mandate(BaseModel):
821
+ user = ForeignKeyField(User, api_name='UserId', related_name='mandates')
822
+ bank_account_id = CharField(api_name='BankAccountId', required=True)
823
+ return_url = CharField(api_name='ReturnURL')
824
+ redirect_url = CharField(api_name='RedirectURL')
825
+ document_url = CharField(api_name='DocumentURL')
826
+ culture = CharField(api_name='Culture')
827
+ bank_reference = CharField(api_name='BankReference')
828
+
829
+ scheme = CharField(api_name='Scheme', choices=constants.MANDATE_SCHEME_CHOICES, default=None)
830
+
831
+ status = CharField(api_name='Status',
832
+ choices=constants.MANDATE_STATUS_CHOICES,
833
+ default=None)
834
+
835
+ result_code = CharField(api_name='ResultCode')
836
+ result_message = CharField(api_name='ResultMessage')
837
+
838
+ execution_type = CharField(api_name='ExecutionType', choices=constants.EXECUTION_TYPE_CHOICES, default=None)
839
+ mandate_type = CharField(api_name='MandateType', choiced=constants.MANDATE_TYPE_CHOICES, default=None)
840
+
841
+ creation_date = DateTimeField(api_name='CreationDate')
842
+
843
+ def get_transactions(self, *args, **kwargs):
844
+ kwargs['id'] = self.id
845
+ select = SelectQuery(Transaction, *args, **kwargs)
846
+ select.identifier = 'MANDATE_GET_TRANSACTIONS'
847
+ return select.all(*args, **kwargs)
848
+
849
+ class Meta:
850
+ verbose_name = 'mandate'
851
+ verbose_name_plural = 'mandates'
852
+ url = {
853
+ SelectQuery.identifier: '/mandates',
854
+ InsertQuery.identifier: '/mandates/directdebit/web',
855
+ 'CANCEL_MANDATE': '/mandates/%(id)s/cancel/',
856
+ 'MANDATES_FOR_BANKACCOUNT': '/users/%(user_id)s/bankaccounts/%(id)s/mandates/'
857
+ }
858
+
859
+ def __str__(self):
860
+ return 'Mandate n.%s' % self.id
861
+
862
+ def cancel(self, handler=None):
863
+ self._handler = handler or self.handler
864
+
865
+ if self.status not in ('SUBMITTED', 'ACTIVE'):
866
+ raise TypeError('Mandate status must be SUBMITTED or ACTIVE')
867
+
868
+ action = ActionQuery(
869
+ Mandate,
870
+ self.get_pk(),
871
+ 'CANCEL_MANDATE'
872
+ )
873
+ return action.execute(handler)
874
+
875
+
876
+ class PayIn(BaseModel):
877
+ credited_user = ForeignKeyField(User, api_name='CreditedUserId', related_name='credited_users')
878
+ credited_funds = MoneyField(api_name='CreditedFunds')
879
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId')
880
+ debited_wallet = ForeignKeyField(Wallet, api_name='DebitedWalletId')
881
+ status = CharField(api_name='Status', choices=constants.STATUS_CHOICES, default=None)
882
+ result_code = CharField(api_name='ResultCode')
883
+ result_message = CharField(api_name='ResultMessage')
884
+ execution_date = DateTimeField(api_name='ExecutionDate')
885
+ type = CharField(api_name='Type', choices=constants.TRANSACTION_TYPE_CHOICES, default=None)
886
+ nature = CharField(api_name='Nature', choices=constants.NATURE_CHOICES, default=None)
887
+ payment_type = CharField(api_name='PaymentType', choices=constants.PAYIN_PAYMENT_TYPE, default=None)
888
+ execution_type = CharField(api_name='ExecutionType', choices=constants.EXECUTION_TYPE_CHOICES, default=None)
889
+ profiling_attempt_reference = CharField(api_name='ProfilingAttemptReference')
890
+ authentication_result = AuthenticationResultField(api_name='AuthenticationResult')
891
+ flow_descriptor = FlowDescriptorField(api_name='FlowDescriptor')
892
+
893
+ def get_refunds(self, *args, **kwargs):
894
+ kwargs['id'] = self.id
895
+ select = SelectQuery(Refund, args, kwargs)
896
+ select.identifier = 'PAYIN_GET_REFUNDS'
897
+ return select.all(*args, **kwargs)
898
+
899
+ class Meta:
900
+ verbose_name = 'payin'
901
+ verbose_name_plural = 'payins'
902
+ url = '/payins'
903
+
904
+ def __init__(self, *args, **kwargs):
905
+ super(PayIn, self).__init__(*args, **kwargs)
906
+ self.disputes = RelatedManager(self, Dispute)
907
+
908
+ @classmethod
909
+ def cast(cls, result):
910
+ if cls.__name__ == "RecurringPayInCIT":
911
+ return RecurringPayInCIT
912
+
913
+ if cls.__name__ == "RecurringPayInMIT":
914
+ return RecurringPayInMIT
915
+
916
+ if cls.__name__ == "RecurringPayPalPayInCIT":
917
+ return RecurringPayPalPayInCIT
918
+
919
+ if cls.__name__ == "RecurringPayPalPayInMIT":
920
+ return RecurringPayPalPayInMIT
921
+
922
+ if cls.__name__ == "RecurringPayPalPayIn":
923
+ return RecurringPayPalPayIn
924
+
925
+ if cls.__name__ == "RecurringCardPayIn":
926
+ return RecurringCardPayIn
927
+
928
+ if cls.__name__ == "RecurringApplePayPayIn":
929
+ return RecurringApplePayPayIn
930
+
931
+ if cls.__name__ == "RecurringGooglePayPayIn":
932
+ return RecurringGooglePayPayIn
933
+
934
+ payment_type = result.get('PaymentType')
935
+ execution_type = result.get('ExecutionType')
936
+
937
+ types = {
938
+ ("CARD", "DIRECT"): DirectPayIn,
939
+ ("CARD", "WEB"): CardWebPayIn,
940
+ ("DIRECT_DEBIT", "DIRECT"): DirectDebitDirectPayIn,
941
+ ("DIRECT_DEBIT", "WEB"): DirectDebitWebPayIn,
942
+ ("PREAUTHORIZED", "DIRECT"): PreAuthorizedPayIn,
943
+ ("BANK_WIRE", "DIRECT"): BankWirePayIn,
944
+ ("BANK_WIRE", "EXTERNAL_INSTRUCTION"): BankWirePayInExternalInstruction,
945
+ ("APPLEPAY", "DIRECT"): ApplepayPayIn,
946
+ ("GOOGLEPAY", "DIRECT"): GooglepayPayIn,
947
+ ("GOOGLE_PAY", "DIRECT"): GooglePayDirectPayIn,
948
+ ("MBWAY", "WEB"): MbwayPayIn,
949
+ ("PAYPAL", "WEB"): PayPalWebPayIn,
950
+ ("MULTIBANCO", "WEB"): MultibancoPayIn,
951
+ ("SATISPAY", "WEB"): SatispayPayIn,
952
+ ("BLIK", "WEB"): BlikPayIn,
953
+ ("KLARNA", "WEB"): KlarnaPayIn,
954
+ ("IDEAL", "WEB"): IdealPayIn,
955
+ ("GIROPAY", "WEB"): GiropayPayIn,
956
+ ("BANCONTACT", "WEB"): BancontactPayIn,
957
+ ("BIZUM", "WEB"): BizumPayIn,
958
+ ("SWISH", "WEB"): SwishPayIn,
959
+ }
960
+
961
+ return types.get((payment_type, execution_type), cls)
962
+
963
+
964
+ @python_2_unicode_compatible
965
+ class RecurringPayInRegistration(BaseModel):
966
+ author = ForeignKeyField(User, api_name='AuthorId')
967
+ card = ForeignKeyField(Card, api_name='CardId')
968
+ user = ForeignKeyField(User, api_name='CreditedUserId')
969
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId')
970
+ first_transaction_debited_funds = MoneyField(api_name='FirstTransactionDebitedFunds')
971
+ first_transaction_fees = MoneyField(api_name='FirstTransactionFees')
972
+ billing = BillingField(api_name='Billing')
973
+ shipping = ShippingField(api_name='Shipping')
974
+ end_date = DateField(api_name='EndDate')
975
+ frequency = CharField(api_name='Frequency')
976
+ fixed_next_amount = BooleanField(api_name='FixedNextAmount')
977
+ fractioned_payment = BooleanField(api_name='FractionedPayment')
978
+ migration = BooleanField(api_name='Migration')
979
+ next_transaction_debited_funds = MoneyField(api_name='NextTransactionDebitedFunds')
980
+ next_transaction_fees = MoneyField(api_name='NextTransactionFees')
981
+ free_cycles = IntegerField(api_name='FreeCycles')
982
+ cycle_number = IntegerField(api_name='CycleNumber')
983
+ total_amount = MoneyField(api_name='TotalAmount')
984
+ recurring_type = CharField(api_name='RecurringType')
985
+ current_state = CurrentStateField(api_name='CurrentState')
986
+ status = CharField(api_name='Status', choices=constants.STATUS_CHOICES, default=None)
987
+ payment_type = CharField(api_name='PaymentType', choices=constants.RECURRING_PAYIN_REGISTRATION_PAYMENT_TYPE,
988
+ default=None)
989
+ profiling_attempt_reference = CharField(api_name='ProfilingAttemptReference')
990
+ flow_descriptor = FlowDescriptorField(api_name='FlowDescriptor')
991
+
992
+ def get_read_only_properties(self):
993
+ read_only = ["Id", "FreeCycles", "CycleNumber", "TotalAmount", "RecurringType", "Status", "CurrentState"]
994
+ return read_only
995
+
996
+ class Meta:
997
+ verbose_name = 'recurring_registration_payin'
998
+ verbose_name_plural = 'recurring_registration_payins'
999
+ url = {
1000
+ InsertQuery.identifier: '/recurringpayinregistrations',
1001
+ SelectQuery.identifier: '/recurringpayinregistrations',
1002
+ UpdateQuery.identifier: '/recurringpayinregistrations'
1003
+ }
1004
+
1005
+
1006
+ @python_2_unicode_compatible
1007
+ class RecurringApplePayPayInRegistration(RecurringPayInRegistration):
1008
+ payment_data = ApplepayPaymentDataField(api_name='PaymentData', required=True)
1009
+
1010
+ class Meta:
1011
+ url = {
1012
+ InsertQuery.identifier: '/recurringpayinregistrations',
1013
+ SelectQuery.identifier: '/recurringpayinregistrations',
1014
+ UpdateQuery.identifier: '/recurringpayinregistrations'
1015
+ }
1016
+
1017
+
1018
+ @python_2_unicode_compatible
1019
+ class RecurringGooglePayPayInRegistration(RecurringPayInRegistration):
1020
+ payment_data = CharField(api_name='PaymentData', required=True)
1021
+
1022
+ class Meta:
1023
+ url = {
1024
+ InsertQuery.identifier: '/recurringpayinregistrations',
1025
+ SelectQuery.identifier: '/recurringpayinregistrations',
1026
+ UpdateQuery.identifier: '/recurringpayinregistrations'
1027
+ }
1028
+
1029
+
1030
+ @python_2_unicode_compatible
1031
+ class RecurringPayInCIT(PayIn):
1032
+ """
1033
+ .. deprecated::
1034
+ Use :class:`RecurringCardPayIn` instead.
1035
+ """
1036
+ recurring_payin_registration_id = CharField(api_name='RecurringPayinRegistrationId', required=True)
1037
+ browser_info = BrowserInfoField(api_name='BrowserInfo', required=True)
1038
+ ip_address = CharField(api_name='IpAddress', required=True)
1039
+ secure_mode_return_url = CharField(api_name='SecureModeReturnURL', required=True)
1040
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1041
+ debited_funds = MoneyField(api_name='DebitedFunds')
1042
+ fees = MoneyField(api_name='Fees')
1043
+ applied_3ds_version = CharField(api_name='Applied3DSVersion')
1044
+ author = ForeignKeyField(User, api_name='AuthorId')
1045
+ billing = BillingField(api_name='Billing')
1046
+ card = ForeignKeyField(Card, api_name='CardId')
1047
+ creation_date = DateTimeField(api_name='CreationDate')
1048
+ culture = CharField(api_name='Culture')
1049
+ secure_mode_needed = BooleanField(api_name='SecureModeNeeded')
1050
+ secure_mode = CharField(api_name='SecureMode',
1051
+ choices=constants.SECURE_MODE_CHOICES)
1052
+ secure_mode_redirect_url = CharField(api_name='SecureModeRedirectURL')
1053
+ security_info = SecurityInfoField(api_name='SecurityInfo')
1054
+ shipping = ShippingField(api_name='Shipping')
1055
+ card_info = CardInfoField(api_name='CardInfo')
1056
+ payment_category = CharField(api_name='PaymentCategory')
1057
+
1058
+ def get_read_only_properties(self):
1059
+ read_only = ["AuthorId", "Applied3DSVersion", "CardId", "CreationDate", "Culture", "SecureModeNeeded"
1060
+ , "SecureMode", "SecureModeRedirectURL", "SecurityInfo"]
1061
+ return read_only
1062
+
1063
+ class Meta:
1064
+ verbose_name = 'recurring_payin'
1065
+ verbose_name_plural = 'recurring_payins'
1066
+ url = {
1067
+ InsertQuery.identifier: '/payins/recurring/card/direct',
1068
+ SelectQuery.identifier: '/payins'
1069
+ }
1070
+
1071
+
1072
+ @python_2_unicode_compatible
1073
+ class RecurringPayInMIT(PayIn):
1074
+ """
1075
+ .. deprecated::
1076
+ Use :class:`RecurringCardPayIn` instead.
1077
+ """
1078
+ recurring_payin_registration_id = CharField(api_name='RecurringPayinRegistrationId', required=True)
1079
+ debited_funds = MoneyField(api_name='DebitedFunds')
1080
+ fees = MoneyField(api_name='Fees')
1081
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1082
+ browser_info = BrowserInfoField(api_name='BrowserInfo')
1083
+ ip_address = CharField(api_name='IpAddress')
1084
+ secure_mode_return_url = CharField(api_name='SecureModeReturnURL')
1085
+ applied_3ds_version = CharField(api_name='Applied3DSVersion')
1086
+ author = ForeignKeyField(User, api_name='AuthorId')
1087
+ billing = BillingField(api_name='Billing')
1088
+ card = ForeignKeyField(Card, api_name='CardId')
1089
+ creation_date = DateTimeField(api_name='CreationDate')
1090
+ culture = CharField(api_name='Culture')
1091
+ secure_mode_needed = BooleanField(api_name='SecureModeNeeded')
1092
+ secure_mode = CharField(api_name='SecureMode',
1093
+ choices=constants.SECURE_MODE_CHOICES)
1094
+ secure_mode_redirect_url = CharField(api_name='SecureModeRedirectURL')
1095
+ security_info = SecurityInfoField(api_name='SecurityInfo')
1096
+ shipping = ShippingField(api_name='Shipping')
1097
+ card_info = CardInfoField(api_name='CardInfo')
1098
+ payment_category = CharField(api_name='PaymentCategory')
1099
+
1100
+ def get_read_only_properties(self):
1101
+ read_only = ["AuthorId", "Applied3DSVersion", "CardId", "CreationDate", "Culture", "SecureModeNeeded"
1102
+ , "SecureMode", "SecureModeRedirectURL", "SecurityInfo", "DebitedFunds", "Fees",
1103
+ "StatementDescriptor", "BrowserInfo", "IpAddress", "SecureModeReturnURL"]
1104
+ return read_only
1105
+
1106
+ class Meta:
1107
+ verbose_name = 'recurring_payin'
1108
+ verbose_name_plural = 'recurring_payins'
1109
+ url = {
1110
+ InsertQuery.identifier: '/payins/recurring/card/direct',
1111
+ SelectQuery.identifier: '/payins'
1112
+ }
1113
+
1114
+
1115
+ @python_2_unicode_compatible
1116
+ class RecurringCardPayIn(PayIn):
1117
+ recurring_payin_registration_id = CharField(api_name='RecurringPayinRegistrationId', required=True)
1118
+ browser_info = BrowserInfoField(api_name='BrowserInfo')
1119
+ ip_address = CharField(api_name='IpAddress')
1120
+ preferred_card_network = CharField(api_name='PreferredCardNetwork')
1121
+ secure_mode_return_url = CharField(api_name='SecureModeReturnURL')
1122
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1123
+ debited_funds = MoneyField(api_name='DebitedFunds')
1124
+ fees = MoneyField(api_name='Fees')
1125
+ requested_3ds_version = CharField(api_name='Requested3DSVersion')
1126
+ applied_3ds_version = CharField(api_name='Applied3DSVersion')
1127
+ author = ForeignKeyField(User, api_name='AuthorId')
1128
+ billing = BillingField(api_name='Billing')
1129
+ card = ForeignKeyField(Card, api_name='CardId')
1130
+ creation_date = DateTimeField(api_name='CreationDate')
1131
+ culture = CharField(api_name='Culture')
1132
+ secure_mode_needed = BooleanField(api_name='SecureModeNeeded')
1133
+ secure_mode = CharField(api_name='SecureMode',
1134
+ choices=constants.SECURE_MODE_CHOICES)
1135
+ secure_mode_redirect_url = CharField(api_name='SecureModeRedirectURL')
1136
+ security_info = SecurityInfoField(api_name='SecurityInfo')
1137
+ shipping = ShippingField(api_name='Shipping')
1138
+ card_info = CardInfoField(api_name='CardInfo')
1139
+ payment_category = CharField(api_name='PaymentCategory')
1140
+
1141
+ class Meta:
1142
+ verbose_name = 'recurring_card_payin'
1143
+ verbose_name_plural = 'recurring_card_payins'
1144
+ url = {
1145
+ InsertQuery.identifier: '/payins/recurring/card/direct',
1146
+ SelectQuery.identifier: '/payins'
1147
+ }
1148
+
1149
+
1150
+ @python_2_unicode_compatible
1151
+ class RecurringPayPalPayInCIT(PayIn):
1152
+ """
1153
+ .. deprecated::
1154
+ Use :class:`RecurringPayPalPayIn` instead.
1155
+ """
1156
+ creation_date = DateTimeField(api_name='CreationDate')
1157
+ debited_funds = MoneyField(api_name='DebitedFunds')
1158
+ fees = MoneyField(api_name='Fees')
1159
+ author = ForeignKeyField(User, api_name='AuthorId')
1160
+ return_url = CharField(api_name='ReturnURL', required=True)
1161
+ redirect_url = CharField(api_name='RedirectURL')
1162
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1163
+ shipping = ShippingField(api_name='Shipping')
1164
+ line_items = ListField(api_name='LineItems', required=True)
1165
+ culture = CharField(api_name='Culture')
1166
+ shipping_preference = CharField(api_name='ShippingPreference', choices=constants.SHIPPING_PREFERENCE_CHOICES,
1167
+ default=None)
1168
+ buyer_account_email = CharField(api_name="PaypalBuyerAccountEmail")
1169
+ reference = CharField(api_name='Reference')
1170
+ trackings = ListField(api_name='Trackings')
1171
+ cancel_url = CharField(api_name='CancelURL')
1172
+ paypal_order_id = CharField(api_name='PaypalOrderID')
1173
+ buyer_country = CharField(api_name='BuyerCountry')
1174
+ buyer_first_name = CharField(api_name='BuyerFirstname')
1175
+ buyer_last_name = CharField(api_name='BuyerLastname')
1176
+ buyer_phone = CharField(api_name='BuyerPhone')
1177
+ paypal_payer_id = CharField(api_name='PaypalPayerID')
1178
+ recurring_payin_registration_id = CharField(api_name='RecurringPayinRegistrationId', required=True)
1179
+ data_collection_id = CharField(api_name='DataCollectionId')
1180
+
1181
+ class Meta:
1182
+ verbose_name = 'recurring_paypal_payin'
1183
+ verbose_name_plural = 'recurring_paypal_payins'
1184
+ url = {
1185
+ InsertQuery.identifier: '/payins/payment-methods/paypal/recurring',
1186
+ SelectQuery.identifier: '/payins'
1187
+ }
1188
+
1189
+
1190
+ @python_2_unicode_compatible
1191
+ class RecurringPayPalPayInMIT(PayIn):
1192
+ """
1193
+ .. deprecated::
1194
+ Use :class:`RecurringPayPalPayIn` instead.
1195
+ """
1196
+ creation_date = DateTimeField(api_name='CreationDate')
1197
+ debited_funds = MoneyField(api_name='DebitedFunds')
1198
+ fees = MoneyField(api_name='Fees')
1199
+ author = ForeignKeyField(User, api_name='AuthorId')
1200
+ return_url = CharField(api_name='ReturnURL', required=True)
1201
+ redirect_url = CharField(api_name='RedirectURL')
1202
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1203
+ shipping = ShippingField(api_name='Shipping')
1204
+ line_items = ListField(api_name='LineItems', required=True)
1205
+ culture = CharField(api_name='Culture')
1206
+ shipping_preference = CharField(api_name='ShippingPreference', choices=constants.SHIPPING_PREFERENCE_CHOICES,
1207
+ default=None)
1208
+ buyer_account_email = CharField(api_name="PaypalBuyerAccountEmail")
1209
+ reference = CharField(api_name='Reference')
1210
+ trackings = ListField(api_name='Trackings')
1211
+ cancel_url = CharField(api_name='CancelURL')
1212
+ paypal_order_id = CharField(api_name='PaypalOrderID')
1213
+ buyer_country = CharField(api_name='BuyerCountry')
1214
+ buyer_first_name = CharField(api_name='BuyerFirstname')
1215
+ buyer_last_name = CharField(api_name='BuyerLastname')
1216
+ buyer_phone = CharField(api_name='BuyerPhone')
1217
+ paypal_payer_id = CharField(api_name='PaypalPayerID')
1218
+ recurring_payin_registration_id = CharField(api_name='RecurringPayinRegistrationId', required=True)
1219
+ data_collection_id = CharField(api_name='DataCollectionId')
1220
+
1221
+ class Meta:
1222
+ verbose_name = 'recurring_paypal_payin'
1223
+ verbose_name_plural = 'recurring_paypal_payins'
1224
+ url = {
1225
+ InsertQuery.identifier: '/payins/payment-methods/paypal/recurring',
1226
+ SelectQuery.identifier: '/payins'
1227
+ }
1228
+
1229
+
1230
+ @python_2_unicode_compatible
1231
+ class RecurringPayPalPayIn(PayIn):
1232
+ recurring_payin_registration_id = CharField(api_name='RecurringPayinRegistrationId', required=True)
1233
+ return_url = CharField(api_name='ReturnURL', required=True)
1234
+ line_items = ListField(api_name='LineItems', required=True)
1235
+ creation_date = DateTimeField(api_name='CreationDate')
1236
+ debited_funds = MoneyField(api_name='DebitedFunds')
1237
+ fees = MoneyField(api_name='Fees')
1238
+ author = ForeignKeyField(User, api_name='AuthorId')
1239
+ redirect_url = CharField(api_name='RedirectURL')
1240
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1241
+ shipping = ShippingField(api_name='Shipping')
1242
+ culture = CharField(api_name='Culture')
1243
+ shipping_preference = CharField(api_name='ShippingPreference', choices=constants.SHIPPING_PREFERENCE_CHOICES,
1244
+ default=None)
1245
+ buyer_account_email = CharField(api_name="PaypalBuyerAccountEmail")
1246
+ reference = CharField(api_name='Reference')
1247
+ trackings = ListField(api_name='Trackings')
1248
+ cancel_url = CharField(api_name='CancelURL')
1249
+ paypal_order_id = CharField(api_name='PaypalOrderID')
1250
+ buyer_country = CharField(api_name='BuyerCountry')
1251
+ buyer_first_name = CharField(api_name='BuyerFirstname')
1252
+ buyer_last_name = CharField(api_name='BuyerLastname')
1253
+ buyer_phone = CharField(api_name='BuyerPhone')
1254
+ paypal_payer_id = CharField(api_name='PaypalPayerID')
1255
+ data_collection_id = CharField(api_name='DataCollectionId')
1256
+
1257
+ class Meta:
1258
+ verbose_name = 'recurring_paypal_payin'
1259
+ verbose_name_plural = 'recurring_paypal_payins'
1260
+ url = {
1261
+ InsertQuery.identifier: '/payins/payment-methods/paypal/recurring',
1262
+ SelectQuery.identifier: '/payins'
1263
+ }
1264
+
1265
+
1266
+ @python_2_unicode_compatible
1267
+ class RecurringApplePayPayIn(PayIn):
1268
+ recurring_payin_registration_id = CharField(api_name='RecurringPayinRegistrationId', required=True)
1269
+ payment_data = ApplepayPaymentDataField(api_name='PaymentData', required=True)
1270
+ creation_date = DateTimeField(api_name='CreationDate')
1271
+ debited_funds = MoneyField(api_name='DebitedFunds')
1272
+ fees = MoneyField(api_name='Fees')
1273
+ author = ForeignKeyField(User, api_name='AuthorId')
1274
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1275
+ shipping = ShippingField(api_name='Shipping')
1276
+ billing = BillingField(api_name='Billing')
1277
+ security_info = SecurityInfoField(api_name='SecurityInfo')
1278
+ card_info = CardInfoField(api_name='CardInfo')
1279
+
1280
+ class Meta:
1281
+ verbose_name = 'recurring_applepay_payin'
1282
+ verbose_name_plural = 'recurring_applepay_payins'
1283
+ url = {
1284
+ InsertQuery.identifier: '/payins/payment-methods/applepay/recurring',
1285
+ SelectQuery.identifier: '/payins'
1286
+ }
1287
+
1288
+
1289
+ @python_2_unicode_compatible
1290
+ class RecurringGooglePayPayIn(PayIn):
1291
+ recurring_payin_registration_id = CharField(api_name='RecurringPayinRegistrationId', required=True)
1292
+ payment_data = CharField(api_name='PaymentData', required=True)
1293
+ creation_date = DateTimeField(api_name='CreationDate')
1294
+ debited_funds = MoneyField(api_name='DebitedFunds')
1295
+ fees = MoneyField(api_name='Fees')
1296
+ author = ForeignKeyField(User, api_name='AuthorId')
1297
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1298
+ shipping = ShippingField(api_name='Shipping')
1299
+ billing = BillingField(api_name='Billing')
1300
+ security_info = SecurityInfoField(api_name='SecurityInfo')
1301
+ secure_mode_return_url = CharField(api_name='SecureModeReturnURL')
1302
+ secure_mode = CharField(api_name='SecureMode',
1303
+ choices=constants.SECURE_MODE_CHOICES,
1304
+ default=constants.SECURE_MODE_CHOICES.default)
1305
+ ip_address = CharField(api_name='IpAddress')
1306
+ browser_info = BrowserInfoField(api_name='BrowserInfo')
1307
+ card_info = CardInfoField(api_name='CardInfo')
1308
+ return_url = CharField(api_name='ReturnURL')
1309
+
1310
+ class Meta:
1311
+ verbose_name = 'recurring_googlepay_payin'
1312
+ verbose_name_plural = 'recurring_googlepay_payins'
1313
+ url = {
1314
+ InsertQuery.identifier: '/payins/payment-methods/googlepay/recurring',
1315
+ SelectQuery.identifier: '/payins'
1316
+ }
1317
+
1318
+
1319
+ @python_2_unicode_compatible
1320
+ class DirectPayIn(PayIn):
1321
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1322
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
1323
+ secure_mode_redirect_url = CharField(api_name='SecureModeRedirectURL')
1324
+ secure_mode_return_url = CharField(api_name='SecureModeReturnURL', required=True)
1325
+ card = ForeignKeyField(Card, api_name='CardId', required=True)
1326
+ secure_mode_needed = BooleanField(api_name='SecureModeNeeded')
1327
+ secure_mode = CharField(api_name='SecureMode',
1328
+ choices=constants.SECURE_MODE_CHOICES,
1329
+ default=constants.SECURE_MODE_CHOICES.default)
1330
+ creation_date = DateTimeField(api_name='CreationDate')
1331
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1332
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1333
+ fees = MoneyField(api_name='Fees', required=True)
1334
+ billing = BillingField(api_name='Billing')
1335
+ security_info = SecurityInfoField(api_name='SecurityInfo')
1336
+ culture = CharField(api_name='Culture')
1337
+ ip_address = CharField(api_name='IpAddress')
1338
+ browser_info = BrowserInfoField(api_name='BrowserInfo')
1339
+ shipping = ShippingField(api_name='Shipping')
1340
+ requested_3ds_version = CharField(api_name='Requested3DSVersion')
1341
+ applied_3ds_version = CharField(api_name='Applied3DSVersion')
1342
+ preferred_card_network = CharField(api_name='PreferredCardNetwork')
1343
+ card_info = CardInfoField(api_name='CardInfo')
1344
+ payment_category = CharField(api_name='PaymentCategory')
1345
+ account_funding = AccountFundingField(api_name='AccountFunding')
1346
+
1347
+ class Meta:
1348
+ verbose_name = 'payin'
1349
+ verbose_name_plural = 'payins'
1350
+ url = {
1351
+ InsertQuery.identifier: '/payins/card/direct',
1352
+ SelectQuery.identifier: '/payins'
1353
+ }
1354
+
1355
+ def __str__(self):
1356
+ return 'Direct Payin: %s to %s' % (self.author_id, self.credited_user_id)
1357
+
1358
+
1359
+ @python_2_unicode_compatible
1360
+ class BankWirePayIn(PayIn):
1361
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1362
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
1363
+ declared_debited_funds = MoneyField(api_name='DeclaredDebitedFunds', required=True)
1364
+ declared_fees = MoneyField(api_name='DeclaredFees', required=True)
1365
+ wire_reference = CharField(api_name='WireReference')
1366
+ bank_account = CharField(api_name='BankAccount')
1367
+ debited_funds = MoneyField(api_name='DebitedFunds')
1368
+ fees = MoneyField(api_name='Fees')
1369
+
1370
+ class Meta:
1371
+ verbose_name = 'payin'
1372
+ verbose_name_plural = 'payins'
1373
+ url = {
1374
+ InsertQuery.identifier: '/payins/bankwire/direct',
1375
+ SelectQuery.identifier: '/payins'
1376
+ }
1377
+
1378
+ def __str__(self):
1379
+ return 'Bank Wire Payin: %s to %s' % (self.author_id, self.credited_user_id)
1380
+
1381
+
1382
+ @python_2_unicode_compatible
1383
+ class BankWirePayInExternalInstruction(PayIn):
1384
+ banking_alias_id = CharField(api_name='BankingAliasId')
1385
+ wire_reference = CharField(api_name='WireReference')
1386
+ debited_bank_account = DebitedBankAccountField(api_name='DebitedBankAccount')
1387
+ debited_funds = MoneyField(api_name='DebitedFunds')
1388
+ fees = MoneyField(api_name='Fees')
1389
+
1390
+ class Meta:
1391
+ verbose_name = 'payin'
1392
+ verbose_name_plural = 'payins'
1393
+ url = {
1394
+ SelectQuery.identifier: '/payins'
1395
+ }
1396
+
1397
+ def __str__(self):
1398
+ return 'Bank Wire Payin External Instruction'
1399
+
1400
+
1401
+ @python_2_unicode_compatible
1402
+ class PayPalPayIn(PayIn):
1403
+ tag = CharField(api_name='Tag')
1404
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1405
+ credited_user = ForeignKeyField(User, api_name='CreditedUserId', related_name='credited_users')
1406
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1407
+ fees = MoneyField(api_name='Fees', required=True)
1408
+ return_url = CharField(api_name='ReturnURL', required=False)
1409
+ redirect_url = CharField(api_name='RedirectURL', required=False)
1410
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
1411
+ shipping_address = ShippingAddressField(api_name='ShippingAddress')
1412
+ buyer_account_email = CharField(api_name="PaypalBuyerAccountEmail", required=False)
1413
+
1414
+ class Meta:
1415
+ verbose_name = 'payin'
1416
+ verbose_name_plural = 'payins'
1417
+ url = {
1418
+ InsertQuery.identifier: '/payins/paypal/web',
1419
+ SelectQuery.identifier: '/payins'
1420
+ }
1421
+
1422
+
1423
+ @python_2_unicode_compatible
1424
+ class PayPalWebPayIn(PayIn):
1425
+ creation_date = DateTimeField(api_name='CreationDate')
1426
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1427
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1428
+ fees = MoneyField(api_name='Fees', required=True)
1429
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
1430
+ return_url = CharField(api_name='ReturnURL', required=True)
1431
+ redirect_url = CharField(api_name='RedirectURL')
1432
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1433
+ shipping = ShippingField(api_name='Shipping')
1434
+ line_items = ListField(api_name='LineItems', required=True)
1435
+ culture = CharField(api_name='Culture')
1436
+ shipping_preference = CharField(api_name='ShippingPreference', choices=constants.SHIPPING_PREFERENCE_CHOICES,
1437
+ default=None)
1438
+ reference = CharField(api_name='Reference')
1439
+ cancel_url = CharField(api_name='CancelURL')
1440
+ paypal_payer_id = CharField(api_name='PaypalPayerID')
1441
+ buyer_country = CharField(api_name='BuyerCountry')
1442
+ buyer_first_name = CharField(api_name='BuyerFirstname')
1443
+ buyer_last_name = CharField(api_name='BuyerLastname')
1444
+ buyer_phone = CharField(api_name='BuyerPhone')
1445
+ paypal_order_id = CharField(api_name='PaypalOrderID')
1446
+ trackings = ListField(api_name='Trackings')
1447
+ data_collection_id = CharField(api_name='DataCollectionId')
1448
+
1449
+ class Meta:
1450
+ verbose_name = 'payin'
1451
+ verbose_name_plural = 'payins'
1452
+ url = {
1453
+ InsertQuery.identifier: '/payins/payment-methods/paypal',
1454
+ SelectQuery.identifier: '/payins',
1455
+ 'ADD_TRACKING_INFORMATION': '/payins/%(id)s/trackings'
1456
+ }
1457
+
1458
+ @classmethod
1459
+ def add_tracking_information(cls, pay_in_id, tracking_information):
1460
+ action = ActionQuery(
1461
+ model=cls,
1462
+ reference=cls.id,
1463
+ identifier='ADD_TRACKING_INFORMATION',
1464
+ method='PUT',
1465
+ params={'id': pay_in_id}
1466
+ )
1467
+ action.action_query = tracking_information.to_api_json()
1468
+ return action.execute()
1469
+
1470
+
1471
+ class ApplepayPayIn(PayIn):
1472
+ tag = CharField(api_name='Tag')
1473
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1474
+ payment_data = ApplepayPaymentDataField(api_name='PaymentData', required=True)
1475
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1476
+ fees = MoneyField(api_name='Fees', required=True)
1477
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1478
+ card_info = CardInfoField(api_name='CardInfo')
1479
+
1480
+ class Meta:
1481
+ verbose_name = 'applepay_payin'
1482
+ verbose_name_plural = 'applepay_payins'
1483
+ url = {
1484
+ InsertQuery.identifier: '/payins/applepay/direct'
1485
+ }
1486
+
1487
+
1488
+ class GooglepayPayIn(PayIn):
1489
+ tag = CharField(api_name='Tag')
1490
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1491
+ payment_type = GooglepayPaymentDataField(api_name='PaymentData', required=True)
1492
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1493
+ fees = MoneyField(api_name='Fees', required=True)
1494
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1495
+
1496
+ class Meta:
1497
+ verbose_name = 'googlepay_payin'
1498
+ verbose_name_plural = 'googlepay_payins'
1499
+ url = {
1500
+ InsertQuery.identifier: '/payins/googlepay/direct'
1501
+ }
1502
+
1503
+
1504
+ class GooglePayDirectPayIn(PayIn):
1505
+ tag = CharField(api_name='Tag')
1506
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1507
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
1508
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1509
+ fees = MoneyField(api_name='Fees', required=True)
1510
+ secure_mode_return_url = CharField(api_name='SecureModeReturnURL', required=True)
1511
+ secure_mode_redirect_url = CharField(api_name='SecureModeRedirectURL')
1512
+ secure_mode = CharField(api_name='SecureMode',
1513
+ choices=constants.SECURE_MODE_CHOICES,
1514
+ default=constants.SECURE_MODE_CHOICES.default)
1515
+ ip_address = CharField(api_name='IpAddress', required=True)
1516
+ browser_info = BrowserInfoField(api_name='BrowserInfo', required=True)
1517
+ payment_data = CharField(api_name='PaymentData', required=True)
1518
+ shipping = ShippingField(api_name='Shipping')
1519
+ billing = BillingField(api_name='Billing')
1520
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1521
+ card_info = CardInfoField(api_name='CardInfo')
1522
+
1523
+ class Meta:
1524
+ verbose_name = 'googlepay_direct_payin'
1525
+ verbose_name_plural = 'googlepay_direct_payins'
1526
+ url = {
1527
+ InsertQuery.identifier: '/payins/payment-methods/googlepay',
1528
+ SelectQuery.identifier: '/payins'
1529
+ }
1530
+
1531
+
1532
+ class MbwayPayIn(PayIn):
1533
+ creation_date = DateTimeField(api_name='CreationDate')
1534
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1535
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1536
+ fees = MoneyField(api_name='Fees', required=True)
1537
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1538
+ phone = CharField(api_name='Phone', required=True)
1539
+
1540
+ class Meta:
1541
+ verbose_name = 'mbway_payin'
1542
+ verbose_name_plural = 'mbway_payins'
1543
+ url = {
1544
+ InsertQuery.identifier: '/payins/payment-methods/mbway',
1545
+ SelectQuery.identifier: '/payins'
1546
+ }
1547
+
1548
+
1549
+ class MultibancoPayIn(PayIn):
1550
+ creation_date = DateTimeField(api_name='CreationDate')
1551
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1552
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1553
+ fees = MoneyField(api_name='Fees', required=True)
1554
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1555
+ redirect_url = CharField(api_name='RedirectURL')
1556
+ return_url = CharField(api_name='ReturnURL', required=True)
1557
+
1558
+ class Meta:
1559
+ verbose_name = 'multibanco_payin'
1560
+ verbose_name_plural = 'multibanco_payins'
1561
+ url = {
1562
+ InsertQuery.identifier: '/payins/payment-methods/multibanco',
1563
+ SelectQuery.identifier: '/payins'
1564
+ }
1565
+
1566
+
1567
+ class SatispayPayIn(PayIn):
1568
+ creation_date = DateTimeField(api_name='CreationDate')
1569
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1570
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1571
+ fees = MoneyField(api_name='Fees', required=True)
1572
+ return_url = CharField(api_name='ReturnURL', required=True)
1573
+ redirect_url = CharField(api_name='RedirectURL')
1574
+ country = CharField(api_name='Country', required=True)
1575
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1576
+
1577
+ class Meta:
1578
+ verbose_name = 'satispay_payin'
1579
+ verbose_name_plural = 'satispay_payins'
1580
+ url = {
1581
+ InsertQuery.identifier: '/payins/payment-methods/satispay',
1582
+ SelectQuery.identifier: '/payins'
1583
+ }
1584
+
1585
+
1586
+ class BlikPayIn(PayIn):
1587
+ creation_date = DateTimeField(api_name='CreationDate')
1588
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1589
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1590
+ fees = MoneyField(api_name='Fees', required=True)
1591
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1592
+ return_url = CharField(api_name='ReturnURL', required=True)
1593
+ redirect_url = CharField(api_name='RedirectURL')
1594
+ code = CharField(api_name='Code')
1595
+ ip_address = CharField(api_name='IpAddress')
1596
+ browser_info = BrowserInfoField(api_name='BrowserInfo')
1597
+
1598
+ class Meta:
1599
+ verbose_name = 'blik_payin'
1600
+ verbose_name_plural = 'blik_payins'
1601
+ url = {
1602
+ InsertQuery.identifier: '/payins/payment-methods/blik',
1603
+ SelectQuery.identifier: '/payins'
1604
+ }
1605
+
1606
+
1607
+ class KlarnaPayIn(PayIn):
1608
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1609
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1610
+ fees = MoneyField(api_name='Fees', required=True)
1611
+ return_url = CharField(api_name='ReturnURL', required=True)
1612
+ line_items = ListField(api_name='LineItems', required=True)
1613
+ country = CharField(api_name='Country', required=True)
1614
+ phone = CharField(api_name='Phone', required=True)
1615
+ email = EmailField(api_name='Email', required=True)
1616
+ additional_data = CharField(api_name='AdditionalData', required=True)
1617
+ billing = BillingField(api_name='Billing', required=True)
1618
+ reference = CharField(api_name='Reference', required=True)
1619
+ culture = CharField(api_name='Culture', required=True)
1620
+ shipping = ShippingField(api_name='Shipping')
1621
+ creation_date = DateTimeField(api_name='CreationDate')
1622
+ credited_funds = MoneyField(api_name='CreditedFunds')
1623
+ redirect_url = CharField(api_name='RedirectURL')
1624
+ payment_method = CharField(api_name='PaymentMethod')
1625
+
1626
+ class Meta:
1627
+ verbose_name = 'klarna_payin'
1628
+ verbose_name_plural = 'klarna_payins'
1629
+ url = {
1630
+ InsertQuery.identifier: '/payins/payment-methods/klarna',
1631
+ SelectQuery.identifier: '/payins'
1632
+ }
1633
+
1634
+
1635
+ class IdealPayIn(PayIn):
1636
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1637
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
1638
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1639
+ fees = MoneyField(api_name='Fees', required=True)
1640
+ return_url = CharField(api_name='ReturnURL', required=True)
1641
+ bic = CharField(api_name='Bic', choices=constants.BIC_CHOICES, required=False)
1642
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1643
+ creation_date = DateTimeField(api_name='CreationDate')
1644
+ redirect_url = CharField(api_name='RedirectURL')
1645
+ bank_name = CharField(api_name='BankName', choices=constants.BANK_NAME_CHOICES)
1646
+
1647
+ class Meta:
1648
+ verbose_name = 'ideal_payin'
1649
+ verbose_name_plural = 'ideal_payins'
1650
+ url = {
1651
+ InsertQuery.identifier: '/payins/payment-methods/ideal',
1652
+ SelectQuery.identifier: '/payins'
1653
+ }
1654
+
1655
+
1656
+ class GiropayPayIn(PayIn):
1657
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1658
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
1659
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1660
+ fees = MoneyField(api_name='Fees', required=True)
1661
+ return_url = CharField(api_name='ReturnURL', required=True)
1662
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1663
+ creation_date = DateTimeField(api_name='CreationDate')
1664
+ redirect_url = CharField(api_name='RedirectURL')
1665
+
1666
+ class Meta:
1667
+ verbose_name = 'giropay_payin'
1668
+ verbose_name_plural = 'giropay_payins'
1669
+ url = {
1670
+ InsertQuery.identifier: '/payins/payment-methods/giropay',
1671
+ SelectQuery.identifier: '/payins'
1672
+ }
1673
+
1674
+
1675
+ class SwishPayIn(PayIn):
1676
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1677
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
1678
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1679
+ fees = MoneyField(api_name='Fees', required=True)
1680
+ return_url = CharField(api_name='ReturnURL', required=True)
1681
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1682
+ creation_date = DateTimeField(api_name='CreationDate')
1683
+ redirect_url = CharField(api_name='RedirectURL')
1684
+ deep_link_url = CharField(api_name='DeepLinkURL')
1685
+ qr_code_url = CharField(api_name='QRCodeURL')
1686
+ payment_flow = CharField(api_name='PaymentFlow')
1687
+
1688
+ class Meta:
1689
+ verbose_name = 'swish_payin'
1690
+ verbose_name_plural = 'swish_payins'
1691
+ url = {
1692
+ InsertQuery.identifier: '/payins/payment-methods/swish',
1693
+ SelectQuery.identifier: '/payins'
1694
+ }
1695
+
1696
+
1697
+ class TwintPayIn(PayIn):
1698
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1699
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
1700
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1701
+ fees = MoneyField(api_name='Fees', required=True)
1702
+ return_url = CharField(api_name='ReturnURL', required=True)
1703
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1704
+ creation_date = DateTimeField(api_name='CreationDate')
1705
+ redirect_url = CharField(api_name='RedirectURL')
1706
+
1707
+ class Meta:
1708
+ verbose_name = 'twint_payin'
1709
+ verbose_name_plural = 'twint_payins'
1710
+ url = {
1711
+ InsertQuery.identifier: '/payins/payment-methods/twint',
1712
+ SelectQuery.identifier: '/payins'
1713
+ }
1714
+
1715
+
1716
+ class BancontactPayIn(PayIn):
1717
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1718
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
1719
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1720
+ fees = MoneyField(api_name='Fees', required=True)
1721
+ return_url = CharField(api_name='ReturnURL', required=True)
1722
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1723
+ creation_date = DateTimeField(api_name='CreationDate')
1724
+ redirect_url = CharField(api_name='RedirectURL')
1725
+ recurring = BooleanField(api_name='Recurring')
1726
+ culture = CharField(api_name='Culture')
1727
+ deep_link_url = CharField(api_name='DeepLinkURL')
1728
+
1729
+ class Meta:
1730
+ verbose_name = 'gancontact_payin'
1731
+ verbose_name_plural = 'bancontact_payins'
1732
+ url = {
1733
+ InsertQuery.identifier: '/payins/payment-methods/bancontact',
1734
+ SelectQuery.identifier: '/payins'
1735
+ }
1736
+
1737
+
1738
+ class BizumPayIn(PayIn):
1739
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1740
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1741
+ fees = MoneyField(api_name='Fees', required=True)
1742
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
1743
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1744
+ return_url = CharField(api_name='ReturnURL')
1745
+ phone = CharField(api_name='Phone')
1746
+ tag = CharField(api_name='Tag')
1747
+
1748
+ class Meta:
1749
+ verbose_name = 'bizum_payin'
1750
+ verbose_name_plural = 'bizum_payins'
1751
+ url = {
1752
+ InsertQuery.identifier: '/payins/payment-methods/bizum',
1753
+ SelectQuery.identifier: '/payins'
1754
+ }
1755
+
1756
+
1757
+ class CardWebPayIn(PayIn):
1758
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1759
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
1760
+ return_url = CharField(api_name='ReturnURL')
1761
+ template_url_options = CharField(api_name='TemplateURLOptions')
1762
+ culture = CharField(api_name='Culture')
1763
+ card_type = CharField(api_name='CardType', choices=constants.CARD_TYPE_CHOICES, default=None)
1764
+ secure_mode = CharField(api_name='SecureMode',
1765
+ choices=constants.SECURE_MODE_CHOICES,
1766
+ default=constants.SECURE_MODE_CHOICES.default)
1767
+ redirect_url = CharField(api_name='RedirectURL')
1768
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1769
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1770
+ fees = MoneyField(api_name='Fees', required=True)
1771
+ shipping = ShippingField(api_name='Shipping')
1772
+ bic = CharField(api_name='Bic', choices=constants.BIC_CHOICES)
1773
+ bank_name = CharField(api_name='BankName', choices=constants.BANK_NAME_CHOICES)
1774
+
1775
+ class Meta:
1776
+ verbose_name = 'card_payin'
1777
+ verbose_name_plural = 'card_payins'
1778
+ url = {
1779
+ InsertQuery.identifier: '/payins/card/web',
1780
+ SelectQuery.identifier: '/payins'
1781
+ }
1782
+
1783
+
1784
+ class ExtendedCardWebPayIn(BaseModel):
1785
+ payment_type = CharField(api_name='PaymentType', choices=constants.PAYIN_PAYMENT_TYPE, default=None)
1786
+ execution_type = CharField(api_name='ExecutionType', choices=constants.EXECUTION_TYPE_CHOICES, default=None)
1787
+ expiration_date = DateTimeField(api_name='ExpirationDate')
1788
+ alias = CharField(api_name='Alias')
1789
+ card_type = CharField(api_name='CardType', choices=constants.CARD_TYPE_CHOICES, default=None)
1790
+ country = CharField(api_name='Country')
1791
+ fingerprint = CharField(api_name='Fingerprint')
1792
+
1793
+ class Meta:
1794
+ verbose_name = 'extended_card_payin'
1795
+ verbose_name_plural = 'extended_card_payins'
1796
+ url = {
1797
+ 'GET': '/payins/card/web/%(id)s/extended',
1798
+ }
1799
+
1800
+ @classmethod
1801
+ def get(cls, pay_in_id, *args, **kwargs):
1802
+ select = SelectQuery(ExtendedCardWebPayIn, *args, **kwargs)
1803
+ kwargs['id'] = pay_in_id
1804
+ select.identifier = 'GET'
1805
+ return select.get("", *args, **kwargs)
1806
+
1807
+
1808
+ class DirectDebitWebPayIn(PayIn):
1809
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1810
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
1811
+ return_url = CharField(api_name='ReturnURL')
1812
+ template_url_options = CharField(api_name='TemplateURLOptions')
1813
+ culture = CharField(api_name='Culture')
1814
+ direct_debit_type = CharField(api_name='DirectDebitType', choices=constants.DIRECT_DEBIT_TYPE_CHOICES, default=None)
1815
+ nature = CharField(api_name='Nature', choices=constants.NATURE_CHOICES, default=None)
1816
+ redirect_url = CharField(api_name='RedirectURL')
1817
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1818
+ fees = MoneyField(api_name='Fees', required=True)
1819
+
1820
+ class Meta:
1821
+ verbose_name = 'direct_debit_payin'
1822
+ verbose_name_plural = 'direct_debit_payins'
1823
+ url = {
1824
+ InsertQuery.identifier: '/payins/directdebit/web',
1825
+ SelectQuery.identifier: '/payins'
1826
+ }
1827
+
1828
+
1829
+ class DirectDebitDirectPayIn(PayIn):
1830
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1831
+ mandate = ForeignKeyField(Mandate, api_name='MandateId', required=True)
1832
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
1833
+ credited_user = ForeignKeyField(User, api_name='CreditedUserId', required=True, related_name='credited_users')
1834
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1835
+ fees = MoneyField(api_name='Fees', required=True)
1836
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1837
+ charge_date = CharField(api_name='ChargeDate')
1838
+ culture = CharField(api_name='Culture')
1839
+
1840
+ class Meta:
1841
+ verbose_name = 'direct_debit_direct_payin'
1842
+ verbose_name_plural = 'direct_debit_direct_payins'
1843
+ url = {
1844
+ InsertQuery.identifier: '/payins/directdebit/direct',
1845
+ SelectQuery.identifier: '/payins'
1846
+ }
1847
+
1848
+
1849
+ class CardPreAuthorizedDepositPayIn(BaseModel):
1850
+ """
1851
+ .. deprecated::
1852
+ Use :class:`PreAuthorizedDepositPayIn` instead. Kept unchanged for backward
1853
+ compatibility; will be removed in a future major version.
1854
+ """
1855
+ author_id = CharField(api_name='AuthorId')
1856
+ credited_wallet_id = CharField(api_name='CreditedWalletId')
1857
+ deposit_id = CharField(api_name='DepositId')
1858
+ result_code = CharField(api_name='ResultCode')
1859
+ result_message = CharField(api_name='ResultMessage')
1860
+ status = CharField(api_name='Status', choices=constants.STATUS_CHOICES, default=None)
1861
+ execution_date = DateTimeField(api_name='ExecutionDate')
1862
+ type = CharField(api_name='Type', choices=constants.TRANSACTION_TYPE_CHOICES, default=None)
1863
+ nature = CharField(api_name='Nature', choices=constants.NATURE_CHOICES, default=None)
1864
+ payment_type = CharField(api_name='PaymentType', choices=constants.PAYIN_PAYMENT_TYPE, default=None)
1865
+ execution_type = CharField(api_name='ExecutionType', choices=constants.EXECUTION_TYPE_CHOICES, default=None)
1866
+ debited_funds = MoneyField(api_name='DebitedFunds')
1867
+ credited_funds = MoneyField(api_name='CreditedFunds')
1868
+ fees = MoneyField(api_name='Fees')
1869
+ card_info = CardInfoField(api_name='CardInfo')
1870
+
1871
+ class Meta:
1872
+ verbose_name = 'card_preauthorized_deposit_payin'
1873
+ verbose_name_plural = 'card_preauthorized_deposit_payins'
1874
+ url = {
1875
+ InsertQuery.identifier: '/payins/deposit-preauthorized/direct/full-capture',
1876
+ SelectQuery.identifier: '/payins',
1877
+ 'CREATE_WITHOUT_COMPLEMENT': '/payins/deposit-preauthorized/direct/full-capture',
1878
+ 'CREATE_PRIOR_TO_COMPLEMENT': '/payins/deposit-preauthorized/direct/capture-with-complement',
1879
+ 'CREATE_COMPLEMENT': '/payins/deposit-preauthorized/direct/complement'
1880
+ }
1881
+
1882
+ def create_without_complement(self, idempotency_key=None, **kwargs):
1883
+ insert = InsertQuery(self, idempotency_key, **kwargs)
1884
+ insert.identifier = 'CREATE_WITHOUT_COMPLEMENT'
1885
+ insert.insert_query = self.get_field_dict()
1886
+ return insert.execute()
1887
+
1888
+ def create_prior_to_complement(self, idempotency_key=None, **kwargs):
1889
+ """
1890
+ .. deprecated::
1891
+ The capture-with-complement flow is deprecated and will be removed in a
1892
+ future major version. Use :meth:`create_without_complement` instead.
1893
+ """
1894
+ insert = InsertQuery(self, idempotency_key, **kwargs)
1895
+ insert.identifier = 'CREATE_PRIOR_TO_COMPLEMENT'
1896
+ insert.insert_query = self.get_field_dict()
1897
+ return insert.execute()
1898
+
1899
+ def create_complement(self, idempotency_key=None, **kwargs):
1900
+ """
1901
+ .. deprecated::
1902
+ The complement flow is deprecated and will be removed in a future major
1903
+ version. Use :meth:`create_without_complement` instead.
1904
+ """
1905
+ insert = InsertQuery(self, idempotency_key, **kwargs)
1906
+ insert.identifier = 'CREATE_COMPLEMENT'
1907
+ insert.insert_query = self.get_field_dict()
1908
+ return insert.execute()
1909
+
1910
+
1911
+ class PreAuthorizedDepositPayIn(BaseModel):
1912
+ author_id = CharField(api_name='AuthorId')
1913
+ credited_user_id = CharField(api_name='CreditedUserId')
1914
+ credited_wallet_id = CharField(api_name='CreditedWalletId')
1915
+ deposit_id = CharField(api_name='DepositId')
1916
+ creation_date = DateTimeField(api_name='CreationDate')
1917
+ result_code = CharField(api_name='ResultCode')
1918
+ result_message = CharField(api_name='ResultMessage')
1919
+ status = CharField(api_name='Status', choices=constants.STATUS_CHOICES, default=None)
1920
+ execution_date = DateTimeField(api_name='ExecutionDate')
1921
+ type = CharField(api_name='Type', choices=constants.TRANSACTION_TYPE_CHOICES, default=None)
1922
+ nature = CharField(api_name='Nature', choices=constants.NATURE_CHOICES, default=None)
1923
+ payment_type = CharField(api_name='PaymentType', choices=constants.PAYIN_PAYMENT_TYPE, default=None)
1924
+ execution_type = CharField(api_name='ExecutionType', choices=constants.EXECUTION_TYPE_CHOICES, default=None)
1925
+ debited_funds = MoneyField(api_name='DebitedFunds')
1926
+ credited_funds = MoneyField(api_name='CreditedFunds')
1927
+ fees = MoneyField(api_name='Fees')
1928
+ card_info = CardInfoField(api_name='CardInfo')
1929
+ authentication_result = AuthenticationResultField(api_name='AuthenticationResult')
1930
+ statement_descriptor = CharField(api_name='StatementDescriptor')
1931
+ tag = CharField(api_name='Tag')
1932
+
1933
+ class Meta:
1934
+ verbose_name = 'preauthorized_deposit_payin'
1935
+ verbose_name_plural = 'preauthorized_deposit_payins'
1936
+ url = {
1937
+ SelectQuery.identifier: '/payins',
1938
+ 'CREATE_WITHOUT_COMPLEMENT': '/payins/deposit-preauthorized/direct/full-capture',
1939
+ 'CREATE_PRIOR_TO_COMPLEMENT': '/payins/deposit-preauthorized/direct/capture-with-complement',
1940
+ 'CREATE_COMPLEMENT': '/payins/deposit-preauthorized/direct/complement'
1941
+ }
1942
+
1943
+ def create_without_complement(self, idempotency_key=None, **kwargs):
1944
+ insert = InsertQuery(self, idempotency_key, **kwargs)
1945
+ insert.identifier = 'CREATE_WITHOUT_COMPLEMENT'
1946
+ insert.insert_query = self.get_field_dict()
1947
+ return insert.execute()
1948
+
1949
+ def create_prior_to_complement(self, idempotency_key=None, **kwargs):
1950
+ """
1951
+ .. deprecated::
1952
+ The capture-with-complement flow is deprecated and will be removed in a
1953
+ future major version. Use :meth:`create_without_complement` instead.
1954
+ """
1955
+ insert = InsertQuery(self, idempotency_key, **kwargs)
1956
+ insert.identifier = 'CREATE_PRIOR_TO_COMPLEMENT'
1957
+ insert.insert_query = self.get_field_dict()
1958
+ return insert.execute()
1959
+
1960
+ def create_complement(self, idempotency_key=None, **kwargs):
1961
+ """
1962
+ .. deprecated::
1963
+ The complement flow is deprecated and will be removed in a future major
1964
+ version. Use :meth:`create_without_complement` instead.
1965
+ """
1966
+ insert = InsertQuery(self, idempotency_key, **kwargs)
1967
+ insert.identifier = 'CREATE_COMPLEMENT'
1968
+ insert.insert_query = self.get_field_dict()
1969
+ return insert.execute()
1970
+
1971
+
1972
+ class PaymentMethodMetadata(BaseModel):
1973
+ type = CharField(api_name='Type')
1974
+ bin = CharField(api_name='Bin')
1975
+ token = CharField(api_name='Token')
1976
+ token_format = CharField(api_name='TokenFormat')
1977
+ issuer_country_code = CharField(api_name='IssuerCountryCode')
1978
+ issuing_bank = CharField(api_name='IssuingBank')
1979
+ bin_data = ListField(api_name='BinData')
1980
+
1981
+ class Meta:
1982
+ verbose_name = 'payment_method_metadata'
1983
+ verbose_name_plural = 'payment_method_metadatas'
1984
+ url = {
1985
+ InsertQuery.identifier: '/payment-methods/metadata'
1986
+ }
1987
+
1988
+
1989
+ class PreAuthorization(BaseModel):
1990
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
1991
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
1992
+ remaining_funds = MoneyField(api_name='RemainingFunds')
1993
+ status = CharField(api_name='Status', choices=constants.STATUS_CHOICES, default=None)
1994
+ payment_status = CharField(api_name='PaymentStatus', choices=constants.PAYMENT_STATUS_CHOICES, default=None)
1995
+ result_code = CharField(api_name='ResultCode')
1996
+ result_message = CharField(api_name='ResultMessage')
1997
+ execution_type = CharField(api_name='ExecutionType', choices=constants.EXECUTION_TYPE_CHOICES, default=None)
1998
+ secure_mode = CharField(api_name='SecureMode',
1999
+ choices=constants.SECURE_MODE_CHOICES,
2000
+ default=constants.SECURE_MODE_CHOICES.default,
2001
+ required=True)
2002
+ card = ForeignKeyField(Card, api_name='CardId', required=True)
2003
+ secure_mode_needed = BooleanField(api_name='SecureModeNeeded')
2004
+ secure_mode_redirect_url = CharField(api_name='SecureModeRedirectURL')
2005
+ secure_mode_return_url = CharField(api_name='SecureModeReturnURL', required=True)
2006
+ expiration_date = DateTimeField(api_name='ExpirationDate')
2007
+ payin = ForeignKeyField(PayIn, api_name='PayInId')
2008
+ billing = BillingField(api_name='Billing')
2009
+ security_info = SecurityInfoField(api_name='SecurityInfo')
2010
+ multi_capture = BooleanField(api_name='MultiCapture')
2011
+ ip_address = CharField(api_name='IpAddress')
2012
+ browser_info = BrowserInfoField(api_name='BrowserInfo')
2013
+ shipping = ShippingField(api_name='Shipping')
2014
+ requested_3ds_version = CharField(api_name='Requested3DSVersion')
2015
+ applied_3ds_version = CharField(api_name='Applied3DSVersion')
2016
+ card_info = CardInfoField(api_name='CardInfo')
2017
+ payment_category = CharField(api_name='PaymentCategory')
2018
+ authentication_result = AuthenticationResultField(api_name='AuthenticationResult')
2019
+ flow_descriptor = FlowDescriptorField(api_name='FlowDescriptor')
2020
+
2021
+ def get_transactions(self, *args, **kwargs):
2022
+ kwargs['id'] = self.id
2023
+ select = SelectQuery(Transaction, *args, **kwargs)
2024
+ select.identifier = 'PRE_AUTHORIZATION_TRANSACTIONS'
2025
+ return select.all(*args, **kwargs)
2026
+
2027
+ class Meta:
2028
+ verbose_name = 'preauthorization'
2029
+ verbose_name_plural = 'preauthorizations'
2030
+ url = {
2031
+ InsertQuery.identifier: '/preauthorizations/card/direct',
2032
+ UpdateQuery.identifier: '/preauthorizations',
2033
+ SelectQuery.identifier: '/preauthorizations',
2034
+ 'USER_GET_PREAUTHORIZATIONS': '/users/%(id)s/preauthorizations',
2035
+ 'CARD_PRE_AUTHORIZATIONS': '/cards/%(id)s/preauthorizations'
2036
+ }
2037
+
2038
+
2039
+ class PreAuthorizedPayIn(PayIn):
2040
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
2041
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
2042
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
2043
+ secure_mode_return_url = CharField(api_name='SecureModeReturnURL')
2044
+ preauthorization = ForeignKeyField(PreAuthorization, api_name='PreauthorizationId', required=True)
2045
+ secure_mode = CharField(api_name='SecureMode',
2046
+ choices=constants.SECURE_MODE_CHOICES,
2047
+ default=constants.SECURE_MODE_CHOICES.default)
2048
+ statement_descriptor = CharField(api_name='StatementDescriptor')
2049
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
2050
+ fees = MoneyField(api_name='Fees', required=True)
2051
+ culture = CharField(api_name='Culture')
2052
+
2053
+ class Meta:
2054
+ verbose_name = 'preauthorized_payin'
2055
+ verbose_name_plural = 'preauthorized_payins'
2056
+ url = {
2057
+ InsertQuery.identifier: '/payins/PreAuthorized/direct',
2058
+ SelectQuery.identifier: '/payins'
2059
+ }
2060
+
2061
+
2062
+ class PayByBankPayIn(PayIn):
2063
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
2064
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId', required=True)
2065
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
2066
+ fees = MoneyField(api_name='Fees', required=True)
2067
+ return_url = CharField(api_name='ReturnURL', required=True)
2068
+ redirect_url = CharField(api_name='RedirectURL')
2069
+ statement_descriptor = CharField(api_name='StatementDescriptor')
2070
+ creation_date = DateTimeField(api_name='CreationDate')
2071
+ country = CharField(api_name='Country', required=True)
2072
+ bic = CharField(api_name='BIC')
2073
+ iban = CharField(api_name='IBAN')
2074
+ payment_flow = CharField(api_name='PaymentFlow')
2075
+ bank_name = CharField(api_name='BankName')
2076
+ culture = CharField(api_name='Culture')
2077
+ scheme = CharField(api_name='Scheme')
2078
+ processing_status = CharField(api_name='ProcessingStatus')
2079
+
2080
+ class Meta:
2081
+ verbose_name = 'pay_by_bank_payin'
2082
+ verbose_name_plural = 'pay_by_bank_payins'
2083
+ url = {
2084
+ InsertQuery.identifier: '/payins/payment-methods/openbanking',
2085
+ SelectQuery.identifier: '/payins'
2086
+ }
2087
+
2088
+
2089
+ class PayByBankSupportedBank(BaseModel):
2090
+ supported_banks = SupportedBanksField(api_name="SupportedBanks")
2091
+
2092
+ class Meta:
2093
+ verbose_name = 'pay_by_bank_supported_bank'
2094
+ verbose_name_plural = 'pay_by_bank_supported_banks'
2095
+ url = {
2096
+ 'GET': '/payment-methods/openbanking/metadata/supported-banks'
2097
+ }
2098
+
2099
+ @classmethod
2100
+ def get(cls, *args, **kwargs):
2101
+ select = SelectQuery(PayByBankSupportedBank, *args, **kwargs)
2102
+ select.identifier = 'GET'
2103
+ return select.get("", with_query_params=True, *args, **kwargs)
2104
+
2105
+
2106
+ @python_2_unicode_compatible
2107
+ class BankAccount(BaseModel):
2108
+ user = ForeignKeyField(User, api_name='UserId', related_name='bankaccounts')
2109
+ owner_name = CharField(api_name='OwnerName', required=True)
2110
+ owner_address = AddressField(api_name='OwnerAddress', required=True)
2111
+ creation_date = DateTimeField(api_name='CreationDate')
2112
+ type = CharField(api_name='Type', choices=constants.BANK_ACCOUNT_TYPE_CHOICES, default=None, required=True)
2113
+ iban = CharField(api_name='IBAN')
2114
+ bic = CharField(api_name='BIC')
2115
+ account_number = CharField(api_name='AccountNumber')
2116
+ sort_code = CharField(api_name='SortCode')
2117
+ aba = CharField(api_name='ABA')
2118
+ deposit_account_type = CharField(api_name='DepositAccountType',
2119
+ choices=constants.DEPOSIT_CHOICES,
2120
+ default=constants.DEPOSIT_CHOICES.checking)
2121
+ bank_name = CharField(api_name='BankName')
2122
+ institution_number = CharField(api_name='InstitutionNumber')
2123
+ branch_code = CharField(api_name='BranchCode')
2124
+ country = CharField(api_name='Country')
2125
+ active = BooleanField(api_name='Active', default=True)
2126
+
2127
+ def get_transactions(self, *args, **kwargs):
2128
+ kwargs['id'] = self.id
2129
+ select = SelectQuery(Transaction, *args, **kwargs)
2130
+ select.identifier = 'BANK_ACCOUNT_GET_TRANSACTIONS'
2131
+ return select.all(*args, **kwargs)
2132
+
2133
+ def create_client_bank_account(self, **kwargs):
2134
+ insert = InsertQuery(self, **kwargs)
2135
+ insert.identifier = 'CLIENT_CREATE_BANK_ACCOUNT'
2136
+ insert.insert_query = self.get_field_dict()
2137
+ return insert.execute()
2138
+
2139
+ class Meta:
2140
+ verbose_name = 'bankaccount'
2141
+ verbose_name_plural = 'bankaccounts'
2142
+ url = {
2143
+ InsertQuery.identifier: '/users/%(user_id)s/bankaccounts/%(type)s',
2144
+ SelectQuery.identifier: '/users/%(user_id)s/bankaccounts',
2145
+ UpdateQuery.identifier: '/users/%(user_id)s/bankaccounts',
2146
+ 'CLIENT_CREATE_BANK_ACCOUNT': '/clients/bankaccounts/iban'
2147
+ }
2148
+
2149
+ def __str__(self):
2150
+ return 'Bank account %s of user %s' % (self.type, self.user_id)
2151
+
2152
+ def get_mandates(self, *args, **kwargs):
2153
+ kwargs['user_id'] = self.user_id
2154
+ kwargs['id'] = self.id
2155
+ select = SelectQuery(Mandate, *args, **kwargs)
2156
+ select.identifier = 'MANDATES_FOR_BANKACCOUNT'
2157
+ return select.all(*args, **kwargs)
2158
+
2159
+ def deactivate(self):
2160
+ return BankAccount.update(self.id, active=False, user_id=self.user_id).execute()
2161
+
2162
+
2163
+ class Recipient(BaseModel):
2164
+ status = CharField(api_name='Status')
2165
+ display_name = CharField(api_name='DisplayName', required=True)
2166
+ payout_method_type = CharField(api_name='PayoutMethodType', required=True)
2167
+ recipient_type = CharField(api_name='RecipientType', required=True)
2168
+ currency = CharField(api_name='Currency', required=True)
2169
+ country = CharField(api_name='Country')
2170
+ recipient_scope = CharField(api_name='RecipientScope')
2171
+ user_id = CharField(api_name='UserId')
2172
+ individual_recipient = IndividualRecipientField(api_name='IndividualRecipient')
2173
+ business_recipient = BusinessRecipientField(api_name='BusinessRecipient')
2174
+ local_bank_transfer = DictField(api_name='LocalBankTransfer')
2175
+ international_bank_transfer = DictField(api_name='InternationalBankTransfer')
2176
+ pending_user_action = PendingUserActionField(api_name='PendingUserAction')
2177
+ recipient_verification_of_payee = VerificationOfPayeeField(api_name='RecipientVerificationOfPayee')
2178
+ sca_context = CharField(api_name='ScaContext')
2179
+
2180
+ class Meta:
2181
+ verbose_name = 'recipient'
2182
+ verbose_name_plural = 'recipients'
2183
+
2184
+ url = {
2185
+ InsertQuery.identifier: '/users/%(user_id)s/recipients',
2186
+ SelectQuery.identifier: '/recipients',
2187
+ UpdateQuery.identifier: '/recipients',
2188
+ 'GET_USER_RECIPIENTS': '/users/%(user_id)s/recipients',
2189
+ 'VALIDATE': '/users/%(user_id)s/recipients/validate'
2190
+ }
2191
+
2192
+ def create(self, user_id, idempotency_key=None, **kwargs):
2193
+ path_params = {'user_id': user_id}
2194
+ insert = InsertQuery(self, idempotency_key, path_params, **kwargs)
2195
+ insert.insert_query = self.get_field_dict()
2196
+ return insert.execute()
2197
+
2198
+ def validate(self, user_id, idempotency_key=None, **kwargs):
2199
+ path_params = {'user_id': user_id}
2200
+ insert = InsertQuery(self, idempotency_key, path_params, **kwargs)
2201
+ insert.insert_query = self.get_field_dict()
2202
+ insert.identifier = 'VALIDATE'
2203
+ insert.execute()
2204
+
2205
+ @classmethod
2206
+ def get_user_recipients(cls, user_id, *args, **kwargs):
2207
+ kwargs['user_id'] = user_id
2208
+ select = SelectQuery(Recipient, *args, **kwargs)
2209
+ select.identifier = 'GET_USER_RECIPIENTS'
2210
+ return select.all(*args, **kwargs)
2211
+
2212
+ @classmethod
2213
+ def deactivate(cls, recipient_id, **kwargs):
2214
+ update = UpdateQuery(Recipient, recipient_id, **kwargs)
2215
+ return update.execute()
2216
+
2217
+
2218
+ @python_2_unicode_compatible
2219
+ class BankWirePayOut(BaseModel):
2220
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
2221
+ fees = MoneyField(api_name='Fees', required=True)
2222
+ credited_funds = MoneyField(api_name='CreditedFunds')
2223
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
2224
+ debited_wallet = ForeignKeyField(Wallet, api_name='DebitedWalletId', required=True)
2225
+ bank_account = ForeignKeyField(BankAccount, api_name='BankAccountId')
2226
+ status = CharField(api_name='Status', choices=constants.STATUS_CHOICES, default=None)
2227
+ result_code = CharField(api_name='ResultCode')
2228
+ result_message = CharField(api_name='ResultMessage')
2229
+ execution_date = DateTimeField(api_name='ExecutionDate')
2230
+ type = CharField(api_name='Type', choices=constants.TRANSACTION_TYPE_CHOICES, default=None)
2231
+ nature = CharField(api_name='Nature', choices=constants.NATURE_CHOICES, default=None)
2232
+ payment_type = CharField(api_name='PaymentType', choices=constants.PAYOUT_PAYMENT_TYPE, default=None)
2233
+ execution_type = CharField(api_name='ExecutionType', choices=constants.EXECUTION_TYPE_CHOICES, default=None)
2234
+ bank_wire_ref = CharField(api_name='BankWireRef')
2235
+ payment_ref = PaymentRefField(api_name='PaymentRef', default=None)
2236
+ payout_mode_requested = CharField(api_name='PayoutModeRequested')
2237
+ credited_user = ForeignKeyField(User, api_name='CreditedUserId')
2238
+ creation_date = DateTimeField(api_name='CreationDate')
2239
+ mode_requested = CharField(api_name='ModeRequested')
2240
+ mode_applied = CharField(api_name='ModeApplied')
2241
+ fallback_reason = FallbackReasonField(api_name='FallbackReason')
2242
+ recipient_verification_of_payee = VerificationOfPayeeField(api_name='RecipientVerificationOfPayee')
2243
+ recipient = ForeignKeyField(Recipient, api_name='RecipientId')
2244
+ charge_bearer = CharField(api_name='ChargeBearer')
2245
+
2246
+ def get_refunds(self, *args, **kwargs):
2247
+ kwargs['id'] = self.id
2248
+ select = SelectQuery(Refund, *args, **kwargs)
2249
+ select.identifier = 'PAYOUT_GET_REFUNDS'
2250
+ return select.all(*args, **kwargs)
2251
+
2252
+ def create_client_payout(self, **kwargs):
2253
+ insert = InsertQuery(self, **kwargs)
2254
+ insert.identifier = 'CLIENT_CREATE_PAYOUT'
2255
+ insert.insert_query = self.get_field_dict()
2256
+ return insert.execute()
2257
+
2258
+ @classmethod
2259
+ def get_bankwire(cls, payout_id, **kwargs):
2260
+ kwargs['id'] = payout_id
2261
+ args = '',
2262
+ select = SelectQuery(cls, *args, **kwargs)
2263
+ select.identifier = 'PAYOUT_BANKWIRE_GET'
2264
+ return select.get(*args, **kwargs)
2265
+
2266
+ class Meta:
2267
+ verbose_name = 'payout'
2268
+ verbose_name_plural = 'payouts'
2269
+ url = {
2270
+ InsertQuery.identifier: '/payouts/bankwire',
2271
+ SelectQuery.identifier: '/payouts',
2272
+ 'PAYOUT_BANKWIRE_GET': '/payouts/bankwire/%(id)s',
2273
+ 'CLIENT_CREATE_PAYOUT': '/clients/payouts'
2274
+ }
2275
+
2276
+ def __str__(self):
2277
+ return 'PayOut request from user %s' % self.author_id
2278
+
2279
+
2280
+ @python_2_unicode_compatible
2281
+ class PayOutEligibilityResult(BaseModel):
2282
+ instant_payout = InstantPayoutField(api_name='InstantPayout')
2283
+
2284
+
2285
+ @python_2_unicode_compatible
2286
+ class PayOutEligibility(BaseModel):
2287
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
2288
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
2289
+ bank_account = ForeignKeyField(BankAccount, api_name='BankAccountId', required=True)
2290
+ debited_wallet = ForeignKeyField(Wallet, api_name='DebitedWalletId', required=True)
2291
+ fees = MoneyField(api_name='Fees')
2292
+ payout_mode_requested = CharField(api_name='PayoutModeRequested')
2293
+ bank_wire_ref = CharField(api_name='BankWireRef')
2294
+
2295
+ def check_eligibility(self, **kwargs):
2296
+ insert = InsertQuery(self, **kwargs)
2297
+ insert.identifier = 'PAYOUT_CHECK_ELIGIBILITY'
2298
+ insert.insert_query = self.get_field_dict()
2299
+ return insert.execute(model_klass=PayOutEligibilityResult)
2300
+
2301
+ class Meta:
2302
+ verbose_name = 'payout_eligibility'
2303
+ verbose_name_plural = 'payouts_eligibility'
2304
+ url = {
2305
+ 'PAYOUT_CHECK_ELIGIBILITY': '/payouts/reachability'
2306
+ }
2307
+
2308
+
2309
+ class Refund(BaseModel):
2310
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
2311
+ credited_user = ForeignKeyField(User, api_name='CreditedUserId', related_name='credited_users')
2312
+ debited_funds = MoneyField(api_name='DebitedFunds')
2313
+ credited_funds = MoneyField(api_name='CreditedFunds')
2314
+ fees = MoneyField(api_name='Fees')
2315
+ status = CharField(api_name='Status', choices=constants.STATUS_CHOICES, default=None)
2316
+ result_code = CharField(api_name='ResultCode')
2317
+ result_message = CharField(api_name='ResultMessage')
2318
+ execution_date = DateTimeField(api_name='ExecutionDate')
2319
+ type = CharField(api_name='Type', choices=constants.TRANSACTION_TYPE_CHOICES, default=None)
2320
+ nature = CharField(api_name='Nature', choices=constants.NATURE_CHOICES, default=None)
2321
+ debited_wallet = ForeignKeyField(Wallet, api_name='DebitedWalletId')
2322
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId')
2323
+ refund_reason = RefundReasonField(api_name='RefundReason')
2324
+ initial_transaction_id = CharField(api_name='InitialTransactionId')
2325
+ initial_transaction_type = CharField(api_name='InitialTransactionType', choices=constants.TRANSACTION_TYPE_CHOICES,
2326
+ default=None)
2327
+ reference = CharField(api_name='Reference')
2328
+ statement_descriptor = CharField(api_name='StatementDescriptor')
2329
+
2330
+ class Meta:
2331
+ verbose_name = 'refund'
2332
+ verbose_name_plural = 'refunds'
2333
+ url = {
2334
+ SelectQuery.identifier: '/refunds',
2335
+ InsertQuery.identifier: '/refunds',
2336
+ UpdateQuery.identifier: '/refunds',
2337
+ 'REPUDIATION_GET_REFUNDS': '/repudiations/%(id)s/refunds',
2338
+ 'TRANSFER_GET_REFUNDS': '/transfers/%(id)s/refunds',
2339
+ 'PAYOUT_GET_REFUNDS': '/payouts/%(id)s/refunds',
2340
+ 'PAYIN_GET_REFUNDS': '/payins/%(id)s/refunds'
2341
+ }
2342
+
2343
+
2344
+ @python_2_unicode_compatible
2345
+ class TransferRefund(Refund):
2346
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
2347
+ transfer = ForeignKeyField(Transfer)
2348
+ debited_funds = MoneyField(api_name='DebitedFunds')
2349
+ fees = MoneyField(api_name='Fees')
2350
+
2351
+ class Meta:
2352
+ verbose_name = 'refund'
2353
+ verbose_name_plural = 'refunds'
2354
+ url = '/transfers/%(transfer_id)s/refunds'
2355
+
2356
+ def __str__(self):
2357
+ return 'TransferRefund request from user %s' % self.author_id
2358
+
2359
+
2360
+ @python_2_unicode_compatible
2361
+ class PayInRefund(Refund):
2362
+ author = ForeignKeyField(User, api_name='AuthorId', required=True)
2363
+ debited_funds = MoneyField(api_name='DebitedFunds')
2364
+ fees = MoneyField(api_name='Fees')
2365
+ payin = ForeignKeyField(PayIn)
2366
+ reference = CharField(api_name='Reference')
2367
+ statement_descriptor = CharField(api_name='StatementDescriptor')
2368
+
2369
+ class Meta:
2370
+ verbose_name = 'refund'
2371
+ verbose_name_plural = 'refunds'
2372
+ url = {
2373
+ InsertQuery.identifier: '/payins/%(payin_id)s/refunds',
2374
+ SelectQuery.identifier: '/refunds'
2375
+ }
2376
+
2377
+ def __str__(self):
2378
+ return 'PayInRefund request from user %s' % self.author_id
2379
+
2380
+
2381
+ class KYC(BaseModel):
2382
+ creation_date = DateTimeField(api_name='CreationDate')
2383
+
2384
+ class Meta:
2385
+ verbose_name = 'kyc'
2386
+ verbose_name_plural = 'kycs'
2387
+ url = '/KYC/documents'
2388
+
2389
+
2390
+ @python_2_unicode_compatible
2391
+ class Document(KYC):
2392
+ user = ForeignKeyField(User, related_name='documents', api_name='UserId')
2393
+ type = CharField(api_name='Type', choices=constants.DOCUMENTS_TYPE_CHOICES, default=None)
2394
+ status = CharField(api_name='Status', choices=constants.DOCUMENTS_STATUS_CHOICES, default=None)
2395
+ refused_reason_type = CharField(api_name='RefusedReasonType')
2396
+ refused_reason_message = CharField(api_name='RefusedReasonMessage')
2397
+ processed_date = DateTimeField(api_name='ProcessedDate')
2398
+ flags = ListField(api_name='Flags')
2399
+
2400
+ class Meta:
2401
+ verbose_name = 'KYC/document'
2402
+ verbose_name_plural = 'KYC/documents'
2403
+ url = {
2404
+ InsertQuery.identifier: '/users/%(user_id)s/KYC/documents',
2405
+ UpdateQuery.identifier: '/users/%(user_id)s/KYC/documents',
2406
+ SelectQuery.identifier: '/KYC/documents'
2407
+ }
2408
+
2409
+ def __str__(self):
2410
+ return 'Document for user %s' % self.user_id
2411
+
2412
+
2413
+ @python_2_unicode_compatible
2414
+ class Page(KYC):
2415
+ file = CharField(api_name='File', required=True, python_value_callback=lambda value: six.b(value))
2416
+ user = ForeignKeyField(User)
2417
+ document = ForeignKeyField(Document)
2418
+
2419
+ class Meta:
2420
+ verbose_name = 'page'
2421
+ verbose_name_plural = 'pages'
2422
+ url = '/users/%(user_id)s/KYC/documents/%(document_id)s/pages'
2423
+
2424
+ def __str__(self):
2425
+ return 'Page of document %s for user %s' % (self.document_id, self.user_id)
2426
+
2427
+
2428
+ @python_2_unicode_compatible
2429
+ class Transaction(BaseModel):
2430
+ author = ForeignKeyField(User, api_name='AuthorId', related_name='transactions')
2431
+ credited_user = ForeignKeyField(User, api_name='CreditedUserId')
2432
+ debited_funds = MoneyField(api_name='DebitedFunds')
2433
+ credited_funds = MoneyField(api_name='CreditedFunds')
2434
+ fees = MoneyField(api_name='Fees')
2435
+ status = CharField(api_name='Status', choices=constants.STATUS_CHOICES, default=None)
2436
+ result_code = CharField(api_name='ResultCode')
2437
+ result_message = CharField(api_name='ResultMessage')
2438
+ execution_date = DateTimeField(api_name='ExecutionDate')
2439
+ type = CharField(api_name='Type', choices=constants.TRANSACTION_TYPE_CHOICES, default=None)
2440
+ nature = CharField(api_name='Nature', choices=constants.NATURE_CHOICES, default=None)
2441
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId')
2442
+ debited_wallet = ForeignKeyField(Wallet, api_name='DebitedWalletId')
2443
+ wallet = ForeignKeyField(Wallet, related_name='transactions')
2444
+ creation_date = DateTimeField(api_name='CreationDate')
2445
+
2446
+ class Meta:
2447
+ verbose_name = 'transaction'
2448
+ verbose_name_plural = 'transactions'
2449
+ url = {
2450
+ SelectQuery.identifier: '/users/%(user_id)s/transactions',
2451
+ InsertQuery.identifier: '/users/%(user_id)s/transactions',
2452
+ UpdateQuery.identifier: '/users/%(user_id)s/transactions',
2453
+ 'MANDATE_GET_TRANSACTIONS': '/mandates/%(id)s/transactions',
2454
+ 'CARD_GET_TRANSACTIONS': '/cards/%(id)s/transactions',
2455
+ 'BANK_ACCOUNT_GET_TRANSACTIONS': '/bankaccounts/%(id)s/transactions',
2456
+ 'PRE_AUTHORIZATION_TRANSACTIONS': '/preauthorizations/%(id)s/transactions',
2457
+ 'CLIENT_WALLET_TRANSACTIONS': '/clients/wallets/%(fund_type)s/%(currency)s/transactions',
2458
+ 'DEPOSIT_GET_TRANSACTIONS': '/deposit-preauthorizations/%(deposit_id)s/transactions/',
2459
+ 'TRANSACTIONS_FOR_FINGERPRINT': '/cards/fingerprints/%(fingerprint)s/transactions',
2460
+ 'DISPUTE_GET_TRANSACTIONS': '/disputes/%(dispute_id)s/transactions/'
2461
+ }
2462
+
2463
+ def __str__(self):
2464
+ return 'Transaction n.%s' % self.id
2465
+
2466
+
2467
+ class Event(BaseModel):
2468
+ resource_id = CharField(api_name='ResourceId')
2469
+ event_type = CharField(api_name='EventType', choices=constants.EVENT_TYPE_CHOICES, default=None)
2470
+ date = DateTimeField(api_name='Date')
2471
+
2472
+ class Meta:
2473
+ verbose_name = 'event'
2474
+ verbose_name_plural = 'events'
2475
+ url = '/events'
2476
+
2477
+
2478
+ class Notification(BaseModel):
2479
+ url = CharField(api_name='Url', required=True)
2480
+ status = CharField(api_name='Status', choices=constants.NOTIFICATION_STATUS_CHOICES, default=None)
2481
+ validity = CharField(api_name='Validity', choices=constants.NOTIFICATION_VALIDITY_CHOICES, default=None)
2482
+ event_type = CharField(api_name='EventType', choices=constants.EVENT_TYPE_CHOICES, default=None, required=True)
2483
+ creation_date = DateTimeField(api_name='CreationDate')
2484
+ email = CharField(api_name='Email')
2485
+
2486
+ class Meta:
2487
+ verbose_name = 'notification'
2488
+ verbose_name_plural = 'notifications'
2489
+ url = '/hooks'
2490
+
2491
+
2492
+ @python_2_unicode_compatible
2493
+ class ClientWallet(Wallet):
2494
+ funds_type = CharField(api_name='FundsType')
2495
+
2496
+ class Meta:
2497
+ verbose_name = 'client_wallets'
2498
+ verbose_name_plural = 'client_wallets'
2499
+ fund_type_url = {
2500
+ 'CREDIT': 'SELECT_BY_CREDIT',
2501
+ 'FEES': 'SELECT_BY_FEES',
2502
+ 'DEFAULT': 'SELECT_BY_DEFAULT'
2503
+ }
2504
+ url = {
2505
+ SelectQuery.identifier: '/clients/wallets',
2506
+ 'SELECT_CLIENT_WALLET': '/clients/wallets/%(fund_type)s/%(currency)s',
2507
+ 'SELECT_BY_CREDIT': '/clients/wallets/CREDIT',
2508
+ 'SELECT_BY_FEES': '/clients/wallets/FEES',
2509
+ 'SELECT_BY_DEFAULT': '/clients/wallets'
2510
+ }
2511
+
2512
+ def __str__(self):
2513
+ return 'Client wallet n.%s' % self.id
2514
+
2515
+ @classmethod
2516
+ def get(cls, funds_type, currency, **kwargs):
2517
+ kwargs['fund_type'], kwargs['currency'] = funds_type, currency
2518
+ args = '',
2519
+ select = SelectQuery(cls, *args, **kwargs)
2520
+ select.identifier = 'SELECT_CLIENT_WALLET'
2521
+ return select.get(*args, **kwargs)
2522
+
2523
+ @classmethod
2524
+ def all_by_funds_type(cls, fund_type, *args, **kwargs):
2525
+ select = SelectQuery(cls, *args, **kwargs)
2526
+ select.identifier = cls._meta.fund_type_url[fund_type]
2527
+ return select.all(*args, **kwargs)
2528
+
2529
+ def get_transactions(cls, fund_type, currency, **kwargs):
2530
+ kwargs['fund_type'], kwargs['currency'] = fund_type, currency
2531
+ args = '',
2532
+ select = SelectQuery(Transaction, *args, **kwargs)
2533
+ select.identifier = 'CLIENT_WALLET_TRANSACTIONS'
2534
+ return select.all(*args, **kwargs)
2535
+
2536
+ def get_pk(self):
2537
+ return getattr(self, 'id', None)
2538
+
2539
+
2540
+ class Dispute(BaseModel):
2541
+ initial_transaction_id = CharField(api_name='InitialTransactionId')
2542
+ initial_transaction_type = CharField(api_name='InitialTransactionType', choices=constants.TRANSACTION_TYPE_CHOICES,
2543
+ default=None)
2544
+ result_code = CharField(api_name='ResultCode')
2545
+ result_message = CharField(api_name='ResultMessage')
2546
+ dispute_reason = DisputeReasonField(api_name='DisputeReason')
2547
+ status = CharField(api_name='Status', choices=constants.DISPUTES_STATUS_CHOICES, default=None)
2548
+ status_message = CharField(api_name='StatusMessage')
2549
+ disputed_funds = MoneyField(api_name='DisputedFunds')
2550
+ contested_funds = MoneyField(api_name='ContestedFunds')
2551
+ repudiation_id = CharField(api_name='RepudiationId')
2552
+
2553
+ dispute_type = CharField(api_name='DisputeType', choices=constants.DISPUTE_TYPE_CHOICE, default=None)
2554
+ contest_deadline_date = DateTimeField(api_name='ContestDeadlineDate')
2555
+
2556
+ creation_date = DateTimeField(api_name='CreationDate')
2557
+ closed_date = DateTimeField(api_name='ClosedDate', required=False)
2558
+
2559
+ class Meta:
2560
+ verbose_name = 'dispute'
2561
+ verbose_name_plural = 'disputes'
2562
+ url = {
2563
+ SelectQuery.identifier: '/disputes',
2564
+ UpdateQuery.identifier: '/disputes',
2565
+ 'CLOSE_DISPUTE': '/disputes/%(id)s/close/',
2566
+ 'SUBMIT_DISPUTE': '/disputes/%(id)s/submit/',
2567
+ 'RE_SUBMIT_DISPUTE': '/disputes/%(id)s/submit/',
2568
+ 'PENDING_SETTLEMENT': '/disputes/pendingsettlement'
2569
+ }
2570
+
2571
+ def __init__(self, *args, **kwargs):
2572
+ super(Dispute, self).__init__(*args, **kwargs)
2573
+ self.transactions = RelatedManager(self, Transaction)
2574
+
2575
+ def __str__(self):
2576
+ return 'Dispute n.%s tag:%s' % (self.id, self.tag)
2577
+
2578
+ def save(self, handler=None, cls=None):
2579
+ self._handler = handler or self.handler
2580
+
2581
+ if cls is None:
2582
+ cls = self.__class__
2583
+
2584
+ created = False
2585
+
2586
+ pre_save.send(cls, instance=self)
2587
+
2588
+ update = self.update(
2589
+ self.get_pk(),
2590
+ **{'tag': self.tag}
2591
+ )
2592
+ result = update.execute(handler)
2593
+
2594
+ post_save.send(cls, instance=self, created=created)
2595
+
2596
+ for key, value in result.items():
2597
+ setattr(self, key, value)
2598
+
2599
+ return result
2600
+
2601
+ def close(self, handler=None):
2602
+ self._handler = handler or self.handler
2603
+ action = ActionQuery(
2604
+ Dispute,
2605
+ self.get_pk(),
2606
+ 'CLOSE_DISPUTE'
2607
+ )
2608
+ action.execute(handler)
2609
+
2610
+ def contest(self, money, handler=None):
2611
+ self._handler = handler or self.handler
2612
+ if isinstance(money, Money):
2613
+ action = ActionQuery(
2614
+ Dispute,
2615
+ self.get_pk(),
2616
+ 'SUBMIT_DISPUTE',
2617
+ **{'ContestedFunds': MoneyField().api_value(money)}
2618
+ )
2619
+ return action.execute(handler)
2620
+
2621
+ def resubmit(self, handler=None):
2622
+ self._handler = handler or self.handler
2623
+ action = ActionQuery(
2624
+ Dispute,
2625
+ self.get_pk(),
2626
+ 'RE_SUBMIT_DISPUTE'
2627
+ )
2628
+ return action.execute(handler)
2629
+
2630
+ @classmethod
2631
+ def get_pending_settlement(cls, *args, **kwargs):
2632
+ select = SelectQuery(cls, *args, **kwargs)
2633
+ select.identifier = 'PENDING_SETTLEMENT'
2634
+ return select.all(*args, **kwargs)
2635
+
2636
+ @classmethod
2637
+ def get_transactions(cls, dispute_id, *args, **kwargs):
2638
+ kwargs['dispute_id'] = dispute_id
2639
+ select = SelectQuery(Transaction, *args, **kwargs)
2640
+ select.identifier = 'DISPUTE_GET_TRANSACTIONS'
2641
+ return select.all(*args, **kwargs)
2642
+
2643
+
2644
+ class DisputeDocument(BaseModel):
2645
+ dispute = ForeignKeyField(Dispute, api_name='DisputeId', related_name='documents', required=True)
2646
+ status = CharField(api_name='Status', choices=constants.DOCUMENTS_STATUS_CHOICES, default=None)
2647
+ type = CharField(api_name='Type', choices=constants.DISPUTE_DOCUMENT_TYPE_CHOICES, defalut=None)
2648
+ refused_reason_message = CharField(api_name='RefusedReasonMessage')
2649
+ refused_reason_type = CharField(api_name='RefusedReasonType', choices=constants.REFUSED_REASON_TYPE_CHOICES,
2650
+ default=None)
2651
+ creation_date = DateTimeField(api_name='CreationDate')
2652
+ processed_date = DateTimeField(api_name='ProcessedDate')
2653
+
2654
+ class Meta:
2655
+ verbose_name = 'document'
2656
+ verbose_name_plural = 'documents'
2657
+ url = {
2658
+ SelectQuery.identifier: '/dispute-documents',
2659
+ InsertQuery.identifier: 'disputes/%(dispute_id)s/documents/',
2660
+ 'SUBMIT_DOCUMENT': '/disputes/%(dispute_id)s/documents/%(id)s'
2661
+ }
2662
+
2663
+ def __str__(self):
2664
+ return 'Dispute document id:%s status:%s type:%s' % (self.id, self.status, self.type)
2665
+
2666
+ def submit(self, status=None, handler=None):
2667
+ self._handler = handler or self.handler
2668
+ submit_status = status or self.status
2669
+ if submit_status is None or submit_status not in constants.DOCUMENTS_STATUS_CHOICES:
2670
+ raise TypeError('Invalid status')
2671
+
2672
+ action = ActionQuery(
2673
+ DisputeDocument,
2674
+ self.get_pk(),
2675
+ 'SUBMIT_DOCUMENT',
2676
+ params={'dispute_id': self.dispute_id},
2677
+ **{'Status': submit_status}
2678
+ )
2679
+ return action.execute(handler)
2680
+
2681
+
2682
+ @python_2_unicode_compatible
2683
+ class DisputeDocumentPage(BaseModel):
2684
+ file = CharField(api_name='File', required=True, python_value_callback=lambda value: six.b(value))
2685
+ document = ForeignKeyField(DisputeDocument)
2686
+ dispute = ForeignKeyField(Dispute)
2687
+
2688
+ class Meta:
2689
+ verbose_name = 'page'
2690
+ verbose_name_plural = 'pages'
2691
+ url = '/disputes/%(dispute_id)s/documents/%(document_id)s/pages/'
2692
+
2693
+ def __str__(self):
2694
+ return 'Page of dispute document %s for dispute %s' % (self.document_id, self.dispute_id)
2695
+
2696
+
2697
+ class DocumentConsult(BaseModel):
2698
+ url = CharField(api_name='Url')
2699
+ expiration_date = DateField(api_name='ExpirationDate')
2700
+
2701
+ class Meta:
2702
+ verbose_name = 'consult_page'
2703
+ verbose_name_plural = 'consult_pages'
2704
+ url = {
2705
+ 'DISPUTE_CONSULT': '/dispute-documents/%(id)s/consult',
2706
+ 'KYC_CONSULT': '/KYC/documents/%(id)s/consult'
2707
+ }
2708
+
2709
+ @classmethod
2710
+ def _get_document_consult(cls, id, identifier, handler=None):
2711
+ query = ActionQuery(cls, id, identifier, 'POST')
2712
+ return query.execute(handler)
2713
+
2714
+ @classmethod
2715
+ def get_kyc_document_consult(cls, KYCDocId, handler=None):
2716
+ return DocumentConsult._get_document_consult(KYCDocId, 'KYC_CONSULT', handler)
2717
+
2718
+ @classmethod
2719
+ def get_dispute_document_consult(cls, disputeDocId, handler=None):
2720
+ return DocumentConsult._get_document_consult(disputeDocId, 'DISPUTE_CONSULT', handler)
2721
+
2722
+
2723
+ class Repudiation(BaseModel):
2724
+ author = ForeignKeyField(User, api_name='AuthorId')
2725
+ disputed_funds = MoneyField(api_name='DisputedFunds')
2726
+ credited_funds = MoneyField(api_name='CreditedFunds')
2727
+ fees = MoneyField(api_name='Fees')
2728
+ credited_wallet = CharField(Wallet, api_name='CreditedWalletId')
2729
+ debited_wallet = ForeignKeyField(Wallet, api_name='DebitedWalletId')
2730
+ credited_user = ForeignKeyField(User, api_name='CreditedUserId')
2731
+ nature = CharField(api_name='Nature', choices=constants.NATURE_CHOICES, default=None)
2732
+ status = CharField(api_name='Status', choices=constants.STATUS_CHOICES, default=None)
2733
+ execution_date = DateTimeField(api_name='ExecutionDate')
2734
+ result_code = CharField(api_name='ResultCode')
2735
+ result_message = CharField(api_name='ResultMessage')
2736
+
2737
+ creation_date = DateTimeField(api_name='CreationDate')
2738
+
2739
+ def get_refunds(self, *args, **kwargs):
2740
+ kwargs['id'] = self.id
2741
+ select = SelectQuery(Refund, *args, **kwargs)
2742
+ select.identifier = 'REPUDIATION_GET_REFUNDS'
2743
+ return select.all(*args, **kwargs)
2744
+
2745
+ class Meta:
2746
+ verbose_name = 'repudiation'
2747
+ verbose_name_plural = 'repudiations'
2748
+ url = {
2749
+ SelectQuery.identifier: '/repudiations',
2750
+ }
2751
+
2752
+ def __str__(self):
2753
+ return 'Repudiation n.%s' % self.id
2754
+
2755
+
2756
+ class SettlementTransfer(BaseModel):
2757
+ author = ForeignKeyField(User, api_name='AuthorId')
2758
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
2759
+ credited_funds = MoneyField(api_name='CreditedFunds')
2760
+ fees = MoneyField(api_name='Fees', required=True)
2761
+ debited_wallet = ForeignKeyField(Wallet, api_name='DebitedWalletId')
2762
+ credited_wallet = ForeignKeyField(Wallet, api_name='CreditedWalletId')
2763
+ credited_user = ForeignKeyField(User, api_name='CreditedUserId', required=True)
2764
+ nature = CharField(api_name='Nature', choices=constants.NATURE_CHOICES, default=None)
2765
+ status = CharField(api_name='Status', choices=constants.STATUS_CHOICES, default=None)
2766
+ execution_date = DateTimeField(api_name='ExecutionDate')
2767
+ result_code = CharField(api_name='ResultCode')
2768
+ result_message = CharField(api_name='ResultMessage')
2769
+ type = CharField(api_name='Type', choices=constants.TRANSACTION_TYPE_CHOICES, default=None)
2770
+ repudiation = ForeignKeyField(Repudiation, api_name='RepudiationId')
2771
+ creation_date = DateTimeField(api_name='CreationDate')
2772
+
2773
+ class Meta:
2774
+ verbose_name = 'settlement_transfer'
2775
+ verbose_name_plural = 'settlement_transfers'
2776
+ url = {
2777
+ SelectQuery.identifier: '/settlements',
2778
+ InsertQuery.identifier: '/repudiations/%(repudiation_id)s/settlementtransfer/'
2779
+ }
2780
+
2781
+ def __str__(self):
2782
+ return 'SettlementTransfer n.%s' % self.id
2783
+
2784
+
2785
+ class IdempotencyResponse(BaseApiModelMethods):
2786
+ status = CharField(api_name='StatusCode')
2787
+ content_length = CharField(api_name='ContentLength')
2788
+ content_type = CharField(api_name='ContentType')
2789
+ date = CharField(api_name='Date')
2790
+ resource = DictField(api_name='Resource')
2791
+
2792
+ class Meta:
2793
+ verbose_name = 'idempotency'
2794
+ verbose_name_plural = 'idempotency'
2795
+ url = {
2796
+ SelectQuery.identifier: '/responses/',
2797
+ }
2798
+
2799
+ @classmethod
2800
+ def get(cls, idempotency_key):
2801
+ return SelectQuery(cls).get(idempotency_key)
2802
+
2803
+ def get_resource(self, model=BaseModel):
2804
+ query = SelectQuery(model)
2805
+ data = query.parse_result(self.resource)
2806
+ return model(**data)
2807
+
2808
+
2809
+ class Report(BaseModel):
2810
+ creation_date = CharField(api_name='CreationDate')
2811
+ report_date = CharField(api_name='ReportDate')
2812
+ download_url = CharField(api_name='DownloadURL')
2813
+ callback_url = CharField(api_name='CallbackURL')
2814
+ download_format = CharField(api_name='DownloadFormat', choices=constants.DOWNLOAD_FORMAT, default='CSV')
2815
+ report_type = CharField(api_name='ReportType', choices=constants.REPORT_TYPE, default='transactions',
2816
+ related_name='report_type')
2817
+ sort = CharField(api_name='Sort')
2818
+ preview = BooleanField(api_name='Preview')
2819
+ columns = ListField(api_name='Columns')
2820
+ result_code = CharField(api_name='ResultCode')
2821
+ result_message = CharField(api_name='ResultMessage')
2822
+
2823
+ class Meta:
2824
+ verbose_name = 'report'
2825
+ verbose_name_plural = 'reports'
2826
+ url = {
2827
+ SelectQuery.identifier: '/reports/',
2828
+ InsertQuery.identifier: '/reports/%(report_type)s/'
2829
+ }
2830
+
2831
+
2832
+ class ReportTransactions(BaseModel):
2833
+ creation_date = CharField(api_name='CreationDate')
2834
+ report_date = CharField(api_name='ReportDate')
2835
+ download_url = CharField(api_name='DownloadURL')
2836
+ callback_url = CharField(api_name='CallbackURL')
2837
+ download_format = CharField(api_name='DownloadFormat', choices=constants.DOWNLOAD_FORMAT, default='CSV')
2838
+ report_type = CharField(api_name='ReportType', choices=constants.REPORT_TYPE, default='transactions',
2839
+ related_name='report_type')
2840
+ sort = CharField(api_name='Sort')
2841
+ preview = BooleanField(api_name='Preview')
2842
+ columns = ListField(api_name='Columns')
2843
+ result_code = CharField(api_name='ResultCode')
2844
+ result_message = CharField(api_name='ResultMessage')
2845
+ filters = ReportTransactionsFiltersField(api_name='Filters')
2846
+
2847
+ class Meta:
2848
+ verbose_name = 'report'
2849
+ verbose_name_plural = 'reports'
2850
+ url = {
2851
+ SelectQuery.identifier: '/reports/',
2852
+ InsertQuery.identifier: '/reports/transactions/'
2853
+ }
2854
+
2855
+
2856
+ class ReportWallets(BaseModel):
2857
+ creation_date = CharField(api_name='CreationDate')
2858
+ report_date = CharField(api_name='ReportDate')
2859
+ download_url = CharField(api_name='DownloadURL')
2860
+ callback_url = CharField(api_name='CallbackURL')
2861
+ download_format = CharField(api_name='DownloadFormat', choices=constants.DOWNLOAD_FORMAT, default='CSV')
2862
+ report_type = CharField(api_name='ReportType', choices=constants.REPORT_TYPE, default='transactions',
2863
+ related_name='report_type')
2864
+ sort = CharField(api_name='Sort')
2865
+ preview = BooleanField(api_name='Preview')
2866
+ columns = ListField(api_name='Columns')
2867
+ result_code = CharField(api_name='ResultCode')
2868
+ result_message = CharField(api_name='ResultMessage')
2869
+ filters = ReportWalletsFiltersField(api_name='Filters')
2870
+
2871
+ class Meta:
2872
+ verbose_name = 'report'
2873
+ verbose_name_plural = 'reports'
2874
+ url = {
2875
+ SelectQuery.identifier: '/reports/',
2876
+ InsertQuery.identifier: '/reports/wallets/'
2877
+ }
2878
+
2879
+
2880
+ class ReportV2(BaseModel):
2881
+ creation_date = DateTimeField(api_name='CreationDate')
2882
+ report_date = DateTimeField(api_name='ReportDate')
2883
+ status = CharField(api_name='Status')
2884
+ result_code = CharField(api_name='ResultCode')
2885
+ result_message = CharField(api_name='ResultMessage')
2886
+ download_format = CharField(api_name='DownloadFormat', required=True)
2887
+ download_url = CharField(api_name='DownloadURL')
2888
+ report_type = CharField(api_name='ReportType', required=True)
2889
+ sort = CharField(api_name='Sort')
2890
+ after_date = DateTimeField(api_name='AfterDate', required=True)
2891
+ before_date = DateTimeField(api_name='BeforeDate', required=True)
2892
+ filters = ReportFilterField(api_name='Filters')
2893
+ columns = ListField(api_name='Columns')
2894
+ date_range_by = CharField(api_name='DateRangeBy')
2895
+
2896
+ class Meta:
2897
+ verbose_name = 'reportv2'
2898
+ verbose_name_plural = 'reportsv2'
2899
+ url = {
2900
+ InsertQuery.identifier: '/reporting/reports',
2901
+ SelectQuery.identifier: '/reporting/reports'
2902
+ }
2903
+
2904
+
2905
+ class BankingAlias(BaseModel):
2906
+ tag = CharField(api_name='Tag')
2907
+ credited_user = ForeignKeyField(User, api_name='CreditedUserId')
2908
+ wallet = ForeignKeyField(Wallet, api_name='WalletId', related_name='wallet_id')
2909
+ type = CharField(api_name='Type')
2910
+ owner_name = CharField(api_name='OwnerName')
2911
+ active = BooleanField(api_name='Active')
2912
+ virtual_account_purpose = CharField(api_name='VirtualAccountPurpose')
2913
+
2914
+ class Meta:
2915
+ verbose_name = 'bankingalias'
2916
+ verbose_name_plural = 'bankingaliases'
2917
+ url = '/bankingaliases'
2918
+ url = {
2919
+ InsertQuery.identifier: '/bankingaliases/',
2920
+ SelectQuery.identifier: '/bankingaliases/%(id)s',
2921
+ UpdateQuery.identifier: '/bankingaliases/%(id)s',
2922
+ 'SELECT_ALL_BANKING_ALIASES': '/wallets/%(wallet_id)s/bankingaliases'
2923
+ }
2924
+
2925
+ @classmethod
2926
+ def cast(cls, result):
2927
+ if 'Type' in result:
2928
+ if result['Type'] == 'IBAN':
2929
+ return BankingAliasIBAN
2930
+ elif result['Type'] == 'OTHER':
2931
+ return BankingAliasOther
2932
+ else:
2933
+ return BankingAlias
2934
+
2935
+ def __str__(self):
2936
+ return '%s banking alias account of user %s' % (self.type, self.credited_user)
2937
+
2938
+ def all(self, *args, **kwargs):
2939
+ kwargs['wallet_id'] = self.wallet_id
2940
+ select = SelectQuery(self.__class__, *args, **kwargs)
2941
+ select.identifier = 'SELECT_ALL_BANKING_ALIASES'
2942
+ return select.all(*args, **kwargs)
2943
+
2944
+
2945
+ class BankingAliasIBAN(BankingAlias):
2946
+ type = CharField(api_name='Type', default='IBAN', required=True)
2947
+ iban = CharField(api_name='IBAN')
2948
+ bic = CharField(api_name='BIC')
2949
+ country = CharField(api_name='Country', required=True)
2950
+
2951
+ class Meta:
2952
+ verbose_name = 'bankingalias'
2953
+ verbose_name_plural = 'bankingaliases'
2954
+ url = {
2955
+ InsertQuery.identifier: '/wallets/%(wallet_id)s/bankingaliases/iban',
2956
+ SelectQuery.identifier: '/bankingaliases/%(id)s',
2957
+ UpdateQuery.identifier: '/bankingaliases/%(id)s'
2958
+ }
2959
+
2960
+
2961
+ class BankingAliasOther(BankingAlias):
2962
+ type = CharField(api_name='Type', default='OTHER', required='True')
2963
+ account_number = CharField(api_name='AccountNumber')
2964
+ bic = CharField(api_name='BIC')
2965
+ country = CharField(api_name='Country', required=True)
2966
+
2967
+ class Meta:
2968
+ verbose_name = 'bankingalias'
2969
+ verbose_name_plural = 'bankingaliases'
2970
+ url = {
2971
+ InsertQuery.identifier: '/wallets/%(wallet_id)s/bankingaliases/accountNumber',
2972
+ SelectQuery.identifier: '/bankingaliases/%(id)s',
2973
+ UpdateQuery.identifier: '/bankingaliases/%(id)s'
2974
+ }
2975
+
2976
+
2977
+ class UboDeclaration(BaseModel):
2978
+ creation_date = DateTimeField(api_name='CreationDate')
2979
+ processed_date = DateTimeField(api_name='ProcessedDate')
2980
+ reason = CharField(api_name='Reason')
2981
+ message = CharField(api_name='Message')
2982
+ status = CharField(api_name='Status', choices=constants.UBO_DECLARATION_STATUS_CHOICES, default=None)
2983
+ ubos = ListField(api_name='Ubos')
2984
+ user = ForeignKeyField(User)
2985
+
2986
+ class Meta:
2987
+ verbose_name = 'ubodeclaration'
2988
+ verbose_name_plural = 'ubodeclarations'
2989
+
2990
+ # For Update as well as Select, 'ubo_declaration_id' is provided by the 'reference' param of the update method
2991
+ url = {
2992
+ InsertQuery.identifier: '/users/%(user_id)s/kyc/ubodeclarations',
2993
+ UpdateQuery.identifier: '/users/%(user_id)s/kyc/ubodeclarations',
2994
+ SelectQuery.identifier: '/users/%(user_id)s/kyc/ubodeclarations'
2995
+ }
2996
+
2997
+ def create(self, **kwargs):
2998
+ insert = InsertQuery(self, **kwargs)
2999
+ return insert.execute()
3000
+
3001
+ def get_read_only_properties(self):
3002
+ read_only = ["ProcessedDate", "Reason", "Message"]
3003
+ return read_only
3004
+
3005
+ def get_sub_objects(self, sub_objects=None):
3006
+ sub_objects['Ubos'] = Ubo
3007
+ return sub_objects
3008
+
3009
+
3010
+ class Ubo(BaseModel):
3011
+ first_name = CharField(api_name='FirstName', required=True)
3012
+ last_name = CharField(api_name='LastName', required=True)
3013
+ address = AddressField(api_name='Address', required=True)
3014
+ nationality = CharField(api_name='Nationality', required=True)
3015
+ birthday = DateField(api_name='Birthday', required=True)
3016
+ birthplace = BirthplaceField(api_name='Birthplace', required=True)
3017
+ user = ForeignKeyField(User)
3018
+ ubo_declaration = ForeignKeyField(UboDeclaration)
3019
+ is_active = BooleanField(api_name='IsActive')
3020
+
3021
+ class Meta:
3022
+ verbose_name = 'ubo'
3023
+ verbose_name_plural = 'ubos'
3024
+
3025
+ # For Update, 'ubo_id' is provided by the 'reference' param of the update method
3026
+ url = {
3027
+ InsertQuery.identifier: '/users/%(user_id)s/kyc/ubodeclarations/%(ubo_declaration_id)s/ubos',
3028
+ UpdateQuery.identifier: '/users/%(user_id)s/kyc/ubodeclarations/%(ubo_declaration_id)s/ubos',
3029
+ SelectQuery.identifier: '/users/%(user_id)s/kyc/ubodeclarations/%(ubo_declaration_id)s/ubos/'
3030
+ }
3031
+
3032
+ def get_sub_objects(self, sub_objects=None):
3033
+ sub_objects['Address'] = Address
3034
+ sub_objects['Birthplace'] = Birthplace
3035
+ return sub_objects
3036
+
3037
+
3038
+ class UserBlockStatus(BaseModel):
3039
+ scope_blocked = ScopeBlockedField(api_name='ScopeBlocked', required=True)
3040
+ action_code = CharField(api_name='ActionCode', required=True)
3041
+ kyc_information = KycInformationField(api_name='KycInformation')
3042
+
3043
+ class Meta:
3044
+ verbose_name = 'userblockstatus'
3045
+ verbose_name_plural = 'userblockstatuses'
3046
+
3047
+ url = {
3048
+ 'USERS_BLOCK_STATUS': '/users/%(user_id)s/blockStatus',
3049
+ 'USERS_REGULATORY': '/users/%(user_id)s/Regulatory'
3050
+ }
3051
+
3052
+
3053
+ class CountryAuthorization(BaseModel):
3054
+ country_code = CharField(api_name='CountryCode')
3055
+ country_name = CharField(api_name='CountryName')
3056
+ authorization = CountryAuthorizationDataField(api_name='Authorization')
3057
+ last_update = DateTimeField(api_name='LastUpdate')
3058
+
3059
+ class Meta:
3060
+ verbose_name = 'country_authorization'
3061
+ verbose_name_plural = 'country_authorizations'
3062
+ url = {
3063
+ 'COUNTRY_AUTHORIZATIONS': 'countries/%(id)s/authorizations',
3064
+ 'ALL_COUNTRIES_AUTHORIZATIONS': 'countries/authorizations'
3065
+ }
3066
+
3067
+ @classmethod
3068
+ def get_country_authorizations(cls, country_code, **kwargs):
3069
+ kwargs['id'] = country_code
3070
+ args = '',
3071
+ select = SelectQuery(CountryAuthorization, *args, **kwargs)
3072
+ select.identifier = 'COUNTRY_AUTHORIZATIONS'
3073
+ return select.get(without_client_id=True, *args, **kwargs)
3074
+
3075
+ @classmethod
3076
+ def get_all_countries_authorizations(cls, *args, **kwargs):
3077
+ select = SelectQuery(CountryAuthorization, *args, **kwargs)
3078
+ select.identifier = 'ALL_COUNTRIES_AUTHORIZATIONS'
3079
+ return select.all(without_client_id=True, *args, **kwargs)
3080
+
3081
+
3082
+ class Deposit(BaseModel):
3083
+ """
3084
+ .. deprecated::
3085
+ Use :class:`CardDepositPreauthorization` (and the shared base
3086
+ :class:`DepositPreauthorization`) instead. Kept unchanged for backward
3087
+ compatibility; will be removed in a future major version.
3088
+ """
3089
+ author_id = CharField(api_name='AuthorId')
3090
+ debited_funds = MoneyField(api_name='DebitedFunds')
3091
+ status = CharField(api_name='Status', choices=constants.DEPOSIT_STATUS_CHOICES, default=None)
3092
+ payment_status = CharField(api_name='PaymentStatus', choices=constants.PAYMENT_STATUS_CHOICES, default=None)
3093
+ payins_linked = PayinsLinkedField(api_name="PayinsLinked")
3094
+ result_code = CharField(api_name='ResultCode')
3095
+ result_message = CharField(api_name='ResultMessage')
3096
+ card_id = CharField(api_name='CardId')
3097
+ secure_mode_return_url = CharField(api_name='SecureModeReturnURL')
3098
+ secure_mode_redirect_url = CharField(api_name='SecureModeRedirectURL')
3099
+ secure_mode_needed = BooleanField(api_name='SecureModeNeeded')
3100
+ expiration_date = DateField(api_name='ExpirationDate')
3101
+ payment_type = CharField(api_name='PaymentType', choices=constants.PAYIN_PAYMENT_TYPE, default=None)
3102
+ execution_type = CharField(api_name='ExecutionType', choices=constants.EXECUTION_TYPE_CHOICES, default=None)
3103
+ statement_descriptor = CharField(api_name='StatementDescriptor')
3104
+ culture = CharField(api_name='Culture')
3105
+ ip_address = CharField(api_name='IpAddress')
3106
+ browser_info = BrowserInfoField(api_name='BrowserInfo')
3107
+ billing = BillingField(api_name='Billing')
3108
+ shipping = ShippingField(api_name='Shipping')
3109
+ requested_3ds_version = CharField(api_name='Requested3DSVersion')
3110
+ applied_3ds_version = CharField(api_name='Applied3DSVersion')
3111
+ authentication_result = AuthenticationResultField(api_name='AuthenticationResult')
3112
+ flow_descriptor = FlowDescriptorField(api_name='FlowDescriptor')
3113
+
3114
+ class Meta:
3115
+ verbose_name = 'deposit'
3116
+ verbose_name_plural = 'deposits'
3117
+ url = {
3118
+ InsertQuery.identifier: '/deposit-preauthorizations/card/direct',
3119
+ SelectQuery.identifier: '/deposit-preauthorizations/',
3120
+ UpdateQuery.identifier: '/deposit-preauthorizations/',
3121
+ 'GET_ALL_FOR_USER': '/users/%(user_id)s/deposit-preauthorizations/',
3122
+ 'GET_ALL_FOR_CARD': '/cards/%(card_id)s/deposit-preauthorizations/'
3123
+ }
3124
+
3125
+ @classmethod
3126
+ def get_all_for_user(cls, user_id, *args, **kwargs):
3127
+ kwargs['user_id'] = user_id
3128
+ select = SelectQuery(Deposit, *args, **kwargs)
3129
+ select.identifier = 'GET_ALL_FOR_USER'
3130
+ return select.all(*args, **kwargs)
3131
+
3132
+ @classmethod
3133
+ def get_all_for_card(cls, card_id, *args, **kwargs):
3134
+ kwargs['card_id'] = card_id
3135
+ select = SelectQuery(Deposit, *args, **kwargs)
3136
+ select.identifier = 'GET_ALL_FOR_CARD'
3137
+ return select.all(*args, **kwargs)
3138
+
3139
+ @classmethod
3140
+ def get_transactions(cls, deposit_id, *args, **kwargs):
3141
+ kwargs['deposit_id'] = deposit_id
3142
+ select = SelectQuery(Transaction, *args, **kwargs)
3143
+ select.identifier = 'DEPOSIT_GET_TRANSACTIONS'
3144
+ return select.all(*args, **kwargs)
3145
+
3146
+
3147
+ class DepositPreauthorization(BaseModel):
3148
+ """Shared base for deposit-preauthorizations. Holds only the fields common to every
3149
+ payment method; the concrete payment-method classes (:class:`CardDepositPreauthorization`,
3150
+ :class:`PayPalDepositPreauthorization`) add their own specific fields.
3151
+
3152
+ The list/select endpoints are shared across payment methods and return a mixed list
3153
+ """
3154
+ author_id = CharField(api_name='AuthorId')
3155
+ debited_funds = MoneyField(api_name='DebitedFunds')
3156
+ status = CharField(api_name='Status', choices=constants.DEPOSIT_STATUS_CHOICES, default=None)
3157
+ payment_status = CharField(api_name='PaymentStatus', choices=constants.PAYMENT_STATUS_CHOICES, default=None)
3158
+ payins_linked = PayinsLinkedField(api_name="PayinsLinked")
3159
+ result_code = CharField(api_name='ResultCode')
3160
+ result_message = CharField(api_name='ResultMessage')
3161
+ payment_type = CharField(api_name='PaymentType', choices=constants.PAYIN_PAYMENT_TYPE, default=None)
3162
+ execution_type = CharField(api_name='ExecutionType', choices=constants.EXECUTION_TYPE_CHOICES, default=None)
3163
+ statement_descriptor = CharField(api_name='StatementDescriptor')
3164
+ culture = CharField(api_name='Culture')
3165
+ billing = BillingField(api_name='Billing')
3166
+ shipping = ShippingField(api_name='Shipping')
3167
+
3168
+ class Meta:
3169
+ verbose_name = 'deposit_preauthorization'
3170
+ verbose_name_plural = 'deposit_preauthorizations'
3171
+ url = {
3172
+ SelectQuery.identifier: '/deposit-preauthorizations/',
3173
+ UpdateQuery.identifier: '/deposit-preauthorizations/',
3174
+ 'GET_ALL_FOR_USER': '/users/%(user_id)s/deposit-preauthorizations/',
3175
+ 'GET_ALL_FOR_CARD': '/cards/%(card_id)s/deposit-preauthorizations/'
3176
+ }
3177
+
3178
+ @classmethod
3179
+ def get_all_for_user(cls, user_id, *args, **kwargs):
3180
+ kwargs['user_id'] = user_id
3181
+ select = SelectQuery(DepositPreauthorization, *args, **kwargs)
3182
+ select.identifier = 'GET_ALL_FOR_USER'
3183
+ return select.all(*args, **kwargs)
3184
+
3185
+ @classmethod
3186
+ def get_all_for_card(cls, card_id, *args, **kwargs):
3187
+ kwargs['card_id'] = card_id
3188
+ select = SelectQuery(DepositPreauthorization, *args, **kwargs)
3189
+ select.identifier = 'GET_ALL_FOR_CARD'
3190
+ return select.all(*args, **kwargs)
3191
+
3192
+ @classmethod
3193
+ def get_transactions(cls, deposit_id, *args, **kwargs):
3194
+ kwargs['deposit_id'] = deposit_id
3195
+ select = SelectQuery(Transaction, *args, **kwargs)
3196
+ select.identifier = 'DEPOSIT_GET_TRANSACTIONS'
3197
+ return select.all(*args, **kwargs)
3198
+
3199
+ @classmethod
3200
+ def cast(cls, result):
3201
+ if result.get('PaymentType') == 'PAYPAL':
3202
+ return PayPalDepositPreauthorization
3203
+ return CardDepositPreauthorization
3204
+
3205
+
3206
+ class CardDepositPreauthorization(DepositPreauthorization):
3207
+ card_id = CharField(api_name='CardId')
3208
+ secure_mode_return_url = CharField(api_name='SecureModeReturnURL')
3209
+ secure_mode_redirect_url = CharField(api_name='SecureModeRedirectURL')
3210
+ secure_mode_needed = BooleanField(api_name='SecureModeNeeded')
3211
+ expiration_date = DateField(api_name='ExpirationDate')
3212
+ ip_address = CharField(api_name='IpAddress')
3213
+ browser_info = BrowserInfoField(api_name='BrowserInfo')
3214
+ requested_3ds_version = CharField(api_name='Requested3DSVersion')
3215
+ applied_3ds_version = CharField(api_name='Applied3DSVersion')
3216
+ authentication_result = AuthenticationResultField(api_name='AuthenticationResult')
3217
+ flow_descriptor = FlowDescriptorField(api_name='FlowDescriptor')
3218
+
3219
+ class Meta:
3220
+ verbose_name = 'card_deposit_preauthorization'
3221
+ verbose_name_plural = 'card_deposit_preauthorizations'
3222
+ url = {
3223
+ InsertQuery.identifier: '/deposit-preauthorizations/card/direct',
3224
+ SelectQuery.identifier: '/deposit-preauthorizations/',
3225
+ UpdateQuery.identifier: '/deposit-preauthorizations/',
3226
+ 'GET_ALL_FOR_USER': '/users/%(user_id)s/deposit-preauthorizations/',
3227
+ 'GET_ALL_FOR_CARD': '/cards/%(card_id)s/deposit-preauthorizations/'
3228
+ }
3229
+
3230
+
3231
+ class PayPalDepositPreauthorization(DepositPreauthorization):
3232
+ creation_date = DateTimeField(api_name='CreationDate')
3233
+ expiration_date = DateTimeField(api_name='ExpirationDate')
3234
+ authorization_date = DateTimeField(api_name='AuthorizationDate')
3235
+ return_url = CharField(api_name='ReturnURL')
3236
+ line_items = ListField(api_name='LineItems')
3237
+ cancel_url = CharField(api_name='CancelURL')
3238
+ data_collection_id = CharField(api_name='DataCollectionId')
3239
+ shipping_preference = CharField(api_name='ShippingPreference', choices=constants.SHIPPING_PREFERENCE_CHOICES,
3240
+ default=None)
3241
+ reference = CharField(api_name='Reference')
3242
+ profiling_attempt_reference = CharField(api_name='ProfilingAttemptReference')
3243
+ paypal_buyer_account_email = CharField(api_name='PaypalBuyerAccountEmail')
3244
+ paypal_order_id = CharField(api_name='PaypalOrderId')
3245
+ buyer_country = CharField(api_name='BuyerCountry')
3246
+ buyer_first_name = CharField(api_name='BuyerFirstName')
3247
+ buyer_last_name = CharField(api_name='BuyerLastName')
3248
+ buyer_phone = CharField(api_name='BuyerPhone')
3249
+ paypal_payer_id = CharField(api_name='PaypalPayerID')
3250
+ trackings = ListField(api_name='Trackings')
3251
+ redirect_url = CharField(api_name='RedirectURL')
3252
+ flow_descriptor = FlowDescriptorField(api_name='FlowDescriptor')
3253
+
3254
+ class Meta:
3255
+ verbose_name = 'paypal_deposit_preauthorization'
3256
+ verbose_name_plural = 'paypal_deposit_preauthorizations'
3257
+ url = {
3258
+ InsertQuery.identifier: '/deposit-preauthorizations/payment-methods/paypal',
3259
+ SelectQuery.identifier: '/deposit-preauthorizations/',
3260
+ UpdateQuery.identifier: '/deposit-preauthorizations/',
3261
+ 'GET_ALL_FOR_USER': '/users/%(user_id)s/deposit-preauthorizations/',
3262
+ 'GET_ALL_FOR_CARD': '/cards/%(card_id)s/deposit-preauthorizations/'
3263
+ }
3264
+
3265
+
3266
+ class VirtualAccount(BaseModel):
3267
+ wallet_id = CharField(api_name='WalletId', required=True)
3268
+ credited_user_id = CharField(api_name='CreditedUserId')
3269
+ virtual_account_purpose = CharField(api_name='VirtualAccountPurpose', required=True)
3270
+ country = CharField(api_name='Country', required=True)
3271
+ status = CharField(api_name='Status')
3272
+ active = BooleanField(api_name='Active')
3273
+ account_owner = CharField(api_name='AccountOwner')
3274
+ local_account_details = LocalAccountDetailsField(api_name='LocalAccountDetails')
3275
+ international_account_details = ListField(api_name='InternationalAccountDetails')
3276
+ capabilities = VirtualAccountCapabilitiesField(api_name='Capabilities')
3277
+ result_code = CharField(api_name='ResultCode')
3278
+ result_message = CharField(api_name='ResultMessage')
3279
+
3280
+ class Meta:
3281
+ verbose_name = 'virtual_account'
3282
+ verbose_name_plural = 'virtual_accounts'
3283
+
3284
+ url = '/wallets/%(wallet_id)s/virtual-accounts'
3285
+
3286
+
3287
+ class VirtualAccountAvailability(BaseModel):
3288
+ collection = ListField(api_name='Collection')
3289
+ user_owned = ListField(api_name='UserOwned')
3290
+
3291
+ class Meta:
3292
+ verbose_name = 'virtual_account_availability'
3293
+ verbose_name_plural = 'virtual_account_availabilities'
3294
+
3295
+ url = {
3296
+ SelectQuery.identifier: '/virtual-accounts/availability'
3297
+ }
3298
+
3299
+
3300
+ class IdentityVerification(BaseModel):
3301
+ creation_date = DateTimeField(api_name='CreationDate')
3302
+ hosted_url = CharField(api_name='HostedUrl')
3303
+ return_url = CharField(api_name='ReturnUrl', required=True)
3304
+ status = CharField(api_name='Status')
3305
+ last_update = DateTimeField(api_name='UpdateDate')
3306
+ user_id = CharField(api_name='UserId')
3307
+ checks = ListField(api_name='Checks')
3308
+ pscs = ListField(api_name='PSCs')
3309
+
3310
+ class Meta:
3311
+ verbose_name = 'identity_verification'
3312
+ verbose_name_plural = 'identity_verifications'
3313
+
3314
+ url = {
3315
+ InsertQuery.identifier: '/users/%(user_id)s/identity-verifications',
3316
+ SelectQuery.identifier: '/identity-verifications',
3317
+ 'GET_ALL': '/users/%(user_id)s/identity-verifications'
3318
+ }
3319
+
3320
+ def create(self, user_id, idempotency_key=None, **kwargs):
3321
+ path_params = {'user_id': user_id}
3322
+ insert = InsertQuery(self, idempotency_key, path_params, **kwargs)
3323
+ insert.insert_query = self.get_field_dict()
3324
+ return insert.execute()
3325
+
3326
+ @classmethod
3327
+ def get_all(cls, user_id, *args, **kwargs):
3328
+ kwargs['user_id'] = user_id
3329
+ select = SelectQuery(IdentityVerification, *args, **kwargs)
3330
+ select.identifier = 'GET_ALL'
3331
+ return select.all(*args, **kwargs)
3332
+
3333
+
3334
+ class Psc(BaseModel):
3335
+ first_name = CharField(api_name='FirstName')
3336
+ last_name = CharField(api_name='LastName')
3337
+ email = CharField(api_name='Email')
3338
+ date_of_birth = DateField(api_name='DateOfBirth')
3339
+ country = CharField(api_name='Country')
3340
+ nationality = CharField(api_name='Nationality')
3341
+ psc_type = CharField(api_name='PscType')
3342
+ status = CharField(api_name='Status')
3343
+ validation_date = DateTimeField(api_name='ValidationDate')
3344
+ hosted_url = CharField(api_name='HostedUrl')
3345
+ data = ListField(api_name='Data')
3346
+ last_update = DateTimeField(api_name='LastUpdate')
3347
+
3348
+ class Meta:
3349
+ verbose_name = 'psc'
3350
+ verbose_name_plural = 'pscs'
3351
+
3352
+ url = {
3353
+ 'RETRY': '/identity-verifications/%(identity_verification_id)s/pscs/%(psc_id)s/retry'
3354
+ }
3355
+
3356
+ @classmethod
3357
+ def retry(cls, identity_verification_id, psc_id, **kwargs):
3358
+ """Request the retry of a PSC session.
3359
+
3360
+ The keyword arguments can be empty or contain the values to be updated.
3361
+ """
3362
+ path_params = {'identity_verification_id': identity_verification_id, 'psc_id': psc_id}
3363
+ update = UpdateQuery(Psc, None, path_params, **kwargs)
3364
+ update.identifier = 'RETRY'
3365
+ return update.execute()
3366
+
3367
+
3368
+ class RecipientSchema(BaseModel):
3369
+ display_name = RecipientPropertySchemaField(api_name='DisplayName')
3370
+ payout_method_type = RecipientPropertySchemaField(api_name='PayoutMethodType')
3371
+ recipient_type = RecipientPropertySchemaField(api_name='RecipientType')
3372
+ currency = RecipientPropertySchemaField(api_name='Currency')
3373
+ country = RecipientPropertySchemaField(api_name='Country')
3374
+ recipient_scope = RecipientPropertySchemaField(api_name='RecipientScope')
3375
+ tag = RecipientPropertySchemaField(api_name='Tag')
3376
+ individual_recipient = IndividualRecipientPropertySchemaField(api_name='IndividualRecipient')
3377
+ business_recipient = BusinessRecipientPropertySchemaField(api_name='BusinessRecipient')
3378
+ local_bank_transfer = DictField(api_name='LocalBankTransfer')
3379
+ international_bank_transfer = DictField(api_name='InternationalBankTransfer')
3380
+
3381
+ class Meta:
3382
+ verbose_name = 'recipient_schema'
3383
+ verbose_name_plural = 'recipient_schemas'
3384
+
3385
+ url = {
3386
+ SelectQuery.identifier: '/recipients/schema?payoutMethodType=%(payout_method_type)s&recipientType=%('
3387
+ 'recipient_type)s&currency=%(currency)s&country=%(country)s'
3388
+ }
3389
+
3390
+ @classmethod
3391
+ def get(cls, payout_method_type, recipient_type, currency, country, *args, **kwargs):
3392
+ kwargs['payout_method_type'] = payout_method_type
3393
+ kwargs['recipient_type'] = recipient_type
3394
+ kwargs['currency'] = currency
3395
+ kwargs['country'] = country
3396
+ select = SelectQuery(RecipientSchema, *args, **kwargs)
3397
+ return select.get("", *args, **kwargs)
3398
+
3399
+
3400
+ class PayoutMethod(BaseModel):
3401
+ available_payout_methods = ListField(api_name='AvailablePayoutMethods')
3402
+
3403
+ class Meta:
3404
+ verbose_name = 'payout_method'
3405
+ verbose_name_plural = 'payout_methods'
3406
+
3407
+ url = {
3408
+ SelectQuery.identifier: '/recipients/payout-methods?country=%(country)s&currency=%(currency)s'
3409
+ }
3410
+
3411
+ @classmethod
3412
+ def get(cls, country, currency, *args, **kwargs):
3413
+ kwargs['country'] = country
3414
+ kwargs['currency'] = currency
3415
+ select = SelectQuery(PayoutMethod, *args, **kwargs)
3416
+ return select.get("", *args, **kwargs)
3417
+
3418
+
3419
+ class UserDataFormatValidation(BaseModel):
3420
+ company_number = CompanyNumberValidationField(api_name='CompanyNumber')
3421
+
3422
+ class Meta:
3423
+ verbose_name = 'user_data_format_validation'
3424
+ verbose_name_plural = 'user_data_format_validations'
3425
+
3426
+ url = {
3427
+ InsertQuery.identifier: '/users/data-formats/validation'
3428
+ }
3429
+
3430
+
3431
+ class PayInIntent(BaseModel):
3432
+ creation_date = DateTimeField(api_name='CreationDate')
3433
+ amount = IntegerField(api_name='Amount')
3434
+ available_amount_to_split = IntegerField(api_name='AvailableAmountToSplit')
3435
+ currency = CharField(api_name='Currency')
3436
+ platform_fees_amount = IntegerField(api_name='PlatformFeesAmount')
3437
+ status = CharField(api_name='Status')
3438
+ next_actions = CharField(api_name='NextActions')
3439
+ external_data = PayInIntentExternalDataField(api_name='ExternalData')
3440
+ buyer = PayInIntentBuyerField(api_name='Buyer')
3441
+ line_items = ListField(api_name='LineItems')
3442
+ captures = ListField(api_name='Captures')
3443
+ capture = PayInIntentCaptureField(api_name='Capture')
3444
+ refunds = ListField(api_name='Refunds')
3445
+ refund = PayInIntentRefundField(api_name='Refund')
3446
+ disputes = ListField(api_name='Disputes')
3447
+ dispute = PayInIntentDisputeField(api_name='Dispute')
3448
+ splits = ListField(api_name='Splits')
3449
+ settlement_id = CharField(api_name='SettlementId')
3450
+ unfunded_amount = IntegerField(api_name='UnfundedAmount')
3451
+ decision = CharField(api_name='Decision')
3452
+
3453
+ class Meta:
3454
+ verbose_name = 'pay_in_intent'
3455
+ verbose_name_plural = 'pay_in_intents'
3456
+
3457
+ url = {
3458
+ 'CREATE_AUTHORIZATION': '/payins/intents',
3459
+ 'CREATE_CAPTURE': '/payins/intents/%(intent_id)s/captures',
3460
+ 'GET': '/payins/intents',
3461
+ 'CANCEL': '/payins/intents/%(intent_id)s/cancel',
3462
+ 'CREATE_REFUND': '/payins/intents/%(intent_id)s/refunds',
3463
+ 'REVERSE_REFUND': '/payins/intents/%(intent_id)s/refunds/%(refund_id)s/reverse',
3464
+ 'CREATE_DISPUTE': '/payins/intents/%(intent_id)s/captures/%(capture_id)s/disputes',
3465
+ 'UPDATE_DISPUTE_OUTCOME': '/payins/intents/%(intent_id)s/captures/%(capture_id)s/disputes/%(dispute_id)s/decision',
3466
+ 'GET_EXTERNAL_PROVIDERS_LIST': '/payins/intents/external-providers',
3467
+ }
3468
+
3469
+ def create_authorization(self, idempotency_key=None, **kwargs):
3470
+ insert = InsertQuery(self, idempotency_key, **kwargs)
3471
+ insert.insert_query = self.get_field_dict()
3472
+ insert.identifier = 'CREATE_AUTHORIZATION'
3473
+ return insert.execute(is_v3=True)
3474
+
3475
+ def create_capture(self, intent_id, idempotency_key=None, **kwargs):
3476
+ path_params = {'intent_id': intent_id}
3477
+ insert = InsertQuery(self, idempotency_key, path_params, **kwargs)
3478
+ insert.insert_query = self.get_field_dict()
3479
+ insert.identifier = 'CREATE_CAPTURE'
3480
+ return insert.execute(is_v3=True)
3481
+
3482
+ @classmethod
3483
+ def get(cls, pay_in_intent_id, *args, **kwargs):
3484
+ select = SelectQuery(PayInIntent, *args, **kwargs)
3485
+ select.identifier = 'GET'
3486
+ return select.get(pay_in_intent_id, is_v3=True, *args, **kwargs)
3487
+
3488
+ @classmethod
3489
+ def cancel(cls, intent_id, idempotency_key=None, **kwargs):
3490
+ path_params = {'intent_id': intent_id}
3491
+ insert = InsertQuery(PayInIntent, idempotency_key, path_params, **kwargs)
3492
+ insert.identifier = 'CANCEL'
3493
+ return insert.execute(is_v3=True)
3494
+
3495
+ @classmethod
3496
+ def create_refund(cls, intent_id, idempotency_key=None, **kwargs):
3497
+ path_params = {'intent_id': intent_id}
3498
+ insert = InsertQuery(PayInIntent, idempotency_key, path_params, **kwargs)
3499
+ insert.identifier = 'CREATE_REFUND'
3500
+ return insert.execute(is_v3=True)
3501
+
3502
+ @classmethod
3503
+ def reverse_refund(cls, intent_id, refund_id, idempotency_key=None, **kwargs):
3504
+ path_params = {'intent_id': intent_id, 'refund_id': refund_id}
3505
+ insert = InsertQuery(PayInIntent, idempotency_key, path_params, **kwargs)
3506
+ insert.identifier = 'REVERSE_REFUND'
3507
+ return insert.execute(is_v3=True)
3508
+
3509
+ @classmethod
3510
+ def create_dispute(cls, intent_id, capture_id, idempotency_key=None, **kwargs):
3511
+ path_params = {'intent_id': intent_id, 'capture_id': capture_id}
3512
+ insert = InsertQuery(PayInIntent, idempotency_key, path_params, **kwargs)
3513
+ insert.identifier = 'CREATE_DISPUTE'
3514
+ return insert.execute(is_v3=True)
3515
+
3516
+ @classmethod
3517
+ def update_dispute_outcome(cls, intent_id, capture_id, dispute_id, **kwargs):
3518
+ path_params = {'intent_id': intent_id, 'capture_id': capture_id, 'dispute_id': dispute_id}
3519
+ update = UpdateQuery(PayInIntent, "", path_params, **kwargs)
3520
+ update.identifier = 'UPDATE_DISPUTE_OUTCOME'
3521
+ return update.execute(is_v3=True)
3522
+
3523
+ @classmethod
3524
+ def get_external_providers_list(cls, *args, **kwargs):
3525
+ select = SelectQuery(PayInIntent, *args, **kwargs)
3526
+ select.identifier = 'GET_EXTERNAL_PROVIDERS_LIST'
3527
+ return select.get("", is_v3=True, strict_dict_parsing=False, *args, **kwargs)
3528
+
3529
+
3530
+ class Settlement(BaseModel):
3531
+ settlement_id = CharField(api_name='SettlementId')
3532
+ status = CharField(api_name='Status')
3533
+ settlement_date = DateTimeField(api_name='SettlementDate')
3534
+ external_provider_name = CharField(api_name='ExternalProviderName')
3535
+ declared_intent_amount = IntegerField(api_name='DeclaredIntentAmount')
3536
+ external_processor_fees_amount = IntegerField(api_name='ExternalProcessorFeesAmount')
3537
+ actual_settlement_amount = IntegerField(api_name='ActualSettlementAmount')
3538
+ funds_missing_amount = IntegerField(api_name='FundsMissingAmount')
3539
+ file_name = CharField(api_name='FileName')
3540
+ upload_url = CharField(api_name='UploadUrl')
3541
+
3542
+ class Meta:
3543
+ verbose_name = 'settlement'
3544
+ verbose_name_plural = 'settlements'
3545
+
3546
+ url = {
3547
+ 'GENERATE_UPLOAD_URL': '/payins/intents/settlements',
3548
+ 'GET': '/payins/intents/settlements',
3549
+ 'GENERATE_NEW_UPLOAD_URL': '/payins/intents/settlements',
3550
+ 'CANCEL': '/payins/intents/settlements/%(settlement_id)s/cancel',
3551
+ }
3552
+
3553
+ def generate_upload_url(self, idempotency_key=None, **kwargs):
3554
+ insert = InsertQuery(Settlement, idempotency_key, None, **kwargs)
3555
+ insert.insert_query = self.get_field_dict()
3556
+ insert.identifier = 'GENERATE_UPLOAD_URL'
3557
+ return insert.execute(is_v3=True)
3558
+
3559
+ @classmethod
3560
+ def get(cls, settlement_id, *args, **kwargs):
3561
+ select = SelectQuery(Settlement, *args, **kwargs)
3562
+ select.identifier = 'GET'
3563
+ return select.get(settlement_id, is_v3=True, *args, **kwargs)
3564
+
3565
+ def generate_new_upload_url(self, **kwargs):
3566
+ update = UpdateQuery(Settlement, self.id, None, **kwargs)
3567
+ update.update_query = self.get_field_dict()
3568
+ update.identifier = 'GENERATE_NEW_UPLOAD_URL'
3569
+ return update.execute(is_v3=True)
3570
+
3571
+ @classmethod
3572
+ def cancel(cls, settlement_id, idempotency_key=None, *args, **kwargs):
3573
+ path_params = {'settlement_id': settlement_id}
3574
+ insert = InsertQuery(Settlement, idempotency_key, path_params, **kwargs)
3575
+ insert.identifier = 'CANCEL'
3576
+ return insert.execute(*args, is_v3=True)
3577
+
3578
+
3579
+ class SettlementValidation(BaseModel):
3580
+ footer_errors = SettlementFooterErrorsField(api_name='FooterErrors')
3581
+ lines_errors = SettlementLinesErrorsField(api_name='LinesErrors')
3582
+
3583
+ class Meta:
3584
+ verbose_name = 'settlement_validation'
3585
+ verbose_name_plural = 'settlement_validations'
3586
+
3587
+ url = {
3588
+ 'GET': '/payins/intents/settlements/%(settlement_id)s/validations',
3589
+ }
3590
+
3591
+ @classmethod
3592
+ def get(cls, settlement_id, *args, **kwargs):
3593
+ if kwargs.get('settlement_id') is None:
3594
+ kwargs['settlement_id'] = settlement_id
3595
+ select = SelectQuery(SettlementValidation, *args, **kwargs)
3596
+ select.identifier = 'GET'
3597
+ return select.get("", with_query_params=True, is_v3=True, *args, **kwargs)
3598
+
3599
+
3600
+ class PayInIntentSplit(BaseModel):
3601
+ line_item_id = CharField(api_name='LineItemId')
3602
+ wallet_id = CharField(api_name='WalletId')
3603
+ seller_id = CharField(api_name='SellerId')
3604
+ split_amount = IntegerField(api_name='SplitAmount')
3605
+ fees_amount = IntegerField(api_name='FeesAmount')
3606
+ description = CharField(api_name='Description')
3607
+ status = CharField(api_name='Status')
3608
+ transfer_date = DateTimeField(api_name='TransferDate')
3609
+ split_origin_wallet_id = CharField(api_name='SplitOriginWalletId')
3610
+
3611
+ class Meta:
3612
+ verbose_name = 'intent_split'
3613
+ verbose_name_plural = 'intent_splits'
3614
+
3615
+ url = {
3616
+ 'EXECUTE': '/payins/intents/%(intent_id)s/splits/%(split_id)s/execute',
3617
+ 'REVERSE': '/payins/intents/%(intent_id)s/splits/%(split_id)s/reverse',
3618
+ 'GET': '/payins/intents/%(intent_id)s/splits/%(split_id)s',
3619
+ 'UPDATE': '/payins/intents/%(intent_id)s/splits/%(split_id)s'
3620
+ }
3621
+
3622
+ @classmethod
3623
+ def execute(cls, intent_id, split_id, idempotency_key=None, *args, **kwargs):
3624
+ path_params = {'intent_id': intent_id, 'split_id': split_id}
3625
+ insert = InsertQuery(PayInIntentSplit, idempotency_key, path_params, **kwargs)
3626
+ insert.identifier = 'EXECUTE'
3627
+ return insert.execute(*args, is_v3=True)
3628
+
3629
+ @classmethod
3630
+ def reverse(cls, intent_id, split_id, idempotency_key=None, *args, **kwargs):
3631
+ path_params = {'intent_id': intent_id, 'split_id': split_id}
3632
+ insert = InsertQuery(PayInIntentSplit, idempotency_key, path_params, **kwargs)
3633
+ insert.identifier = 'REVERSE'
3634
+ return insert.execute(*args, is_v3=True)
3635
+
3636
+ @classmethod
3637
+ def get(cls, intent_id, split_id, *args, **kwargs):
3638
+ kwargs['intent_id'] = intent_id
3639
+ kwargs['split_id'] = split_id
3640
+ select = SelectQuery(PayInIntentSplit, *args, **kwargs)
3641
+ select.identifier = 'GET'
3642
+ return select.get("", *args, is_v3=True, **kwargs)
3643
+
3644
+ @classmethod
3645
+ def update_split(cls, intent_id, split_id, *args, **kwargs):
3646
+ path_params = {'intent_id': intent_id, 'split_id': split_id}
3647
+ update = UpdateQuery(PayInIntentSplit, "", path_params=path_params, **kwargs)
3648
+ update.identifier = 'UPDATE'
3649
+ return update.execute(*args, is_v3=True)
3650
+
3651
+
3652
+ class PayInIntentSplits(BaseModel):
3653
+ splits = ListField(api_name='Splits')
3654
+
3655
+ class Meta:
3656
+ verbose_name = 'pay_in_intent_split'
3657
+ verbose_name_plural = 'pay_in_intent_splits'
3658
+
3659
+ url = {
3660
+ 'CREATE': '/payins/intents/%(intent_id)s/splits'
3661
+ }
3662
+
3663
+ def create(self, intent_id, idempotency_key=None, **kwargs):
3664
+ path_params = {'intent_id': intent_id}
3665
+ insert = InsertQuery(self, idempotency_key, path_params, **kwargs)
3666
+ insert.insert_query = self.get_field_dict()
3667
+ insert.identifier = 'CREATE'
3668
+ return insert.execute(is_v3=True)
3669
+
3670
+
3671
+ @python_2_unicode_compatible
3672
+ class ClientBankWireDirectPayIn(PayIn):
3673
+ author = ForeignKeyField(User, api_name='AuthorId')
3674
+ credited_wallet_id = CharField(api_name='CreditedWalletId', required=True)
3675
+ declared_debited_funds = MoneyField(api_name='DeclaredDebitedFunds', required=True)
3676
+ declared_fees = MoneyField(api_name='DeclaredFees')
3677
+ wire_reference = CharField(api_name='WireReference')
3678
+ bank_account = CharField(api_name='BankAccount')
3679
+ debited_funds = MoneyField(api_name='DebitedFunds')
3680
+ fees = MoneyField(api_name='Fees')
3681
+
3682
+ class Meta:
3683
+ verbose_name = 'payin'
3684
+ verbose_name_plural = 'payins'
3685
+ url = {
3686
+ InsertQuery.identifier: '/clients/payins/bankwire/direct',
3687
+ SelectQuery.identifier: '/payins'
3688
+ }
3689
+
3690
+
3691
+ class PayPalDataCollection(BaseModel):
3692
+ # since the properties needed by PayPal are different depending on the use-case,
3693
+ # use Dict as payload and response for Create and Get. The cast to PayPalDataCollection model is skipped.
3694
+ class Meta:
3695
+ verbose_name = 'paypal_data_collection'
3696
+ verbose_name_plural = 'paypal_data_collections'
3697
+ url = {
3698
+ 'CREATE': '/payins/payment-methods/paypal/data-collection',
3699
+ 'GET': '/payins/payment-methods/paypal/data-collection'
3700
+ }
3701
+
3702
+ @classmethod
3703
+ def create(cls, idempotency_key=None, handler=None, **kwargs):
3704
+ insert = InsertQuery(PayPalDataCollection, idempotency_key, None, **kwargs)
3705
+ insert.insert_query = kwargs
3706
+ insert.identifier = 'CREATE'
3707
+ return insert.execute(handler=handler, strict_dict_parsing=False)
3708
+
3709
+ @classmethod
3710
+ def get(cls, data_collection_id, *args, **kwargs):
3711
+ select = SelectQuery(PayPalDataCollection, *args, **kwargs)
3712
+ select.identifier = 'GET'
3713
+ return select.get(data_collection_id, strict_dict_parsing=False, **kwargs)
3714
+
3715
+
3716
+ @python_2_unicode_compatible
3717
+ class ScaStatus(BaseModel):
3718
+ user_status = CharField(api_name='UserStatus')
3719
+ is_enrolled = BooleanField(api_name='IsEnrolled')
3720
+ last_enrollment_date = DateTimeField(api_name='LastEnrollmentDate')
3721
+ last_consent_collection_date = DateTimeField(api_name='LastConsentCollectionDate')
3722
+ consent_scope = ConsentScopeField(api_name='ConsentScope')
3723
+
3724
+ class Meta:
3725
+ verbose_name = 'sca_status'
3726
+ verbose_name_plural = 'sca_statuses'
3727
+ url = {
3728
+ 'GET': '/sca/users/%(id)s/sca-status',
3729
+ }
3730
+
3731
+ @staticmethod
3732
+ def get(user_id, *args, **kwargs):
3733
+ kwargs['id'] = user_id
3734
+ select = SelectQuery(ScaStatus, *args, **kwargs)
3735
+ select.identifier = 'GET'
3736
+ return select.get("", *args, **kwargs)
3737
+
3738
+
3739
+ class AcquiringDirectPayIn(PayIn):
3740
+ secure_mode_redirect_url = CharField(api_name='SecureModeRedirectURL')
3741
+ secure_mode_return_url = CharField(api_name='SecureModeReturnURL', required=True)
3742
+ card = ForeignKeyField(Card, api_name='CardId', required=True)
3743
+ secure_mode_needed = BooleanField(api_name='SecureModeNeeded')
3744
+ secure_mode = CharField(api_name='SecureMode',
3745
+ choices=constants.SECURE_MODE_CHOICES,
3746
+ default=constants.SECURE_MODE_CHOICES.default,
3747
+ required=True)
3748
+ creation_date = DateTimeField(api_name='CreationDate')
3749
+ statement_descriptor = CharField(api_name='StatementDescriptor')
3750
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
3751
+ billing = BillingField(api_name='Billing')
3752
+ security_info = SecurityInfoField(api_name='SecurityInfo')
3753
+ culture = CharField(api_name='Culture')
3754
+ ip_address = CharField(api_name='IpAddress', required=True)
3755
+ browser_info = BrowserInfoField(api_name='BrowserInfo', required=True)
3756
+ shipping = ShippingField(api_name='Shipping')
3757
+ requested_3ds_version = CharField(api_name='Requested3DSVersion')
3758
+ applied_3ds_version = CharField(api_name='Applied3DSVersion')
3759
+ preferred_card_network = CharField(api_name='PreferredCardNetwork')
3760
+ card_info = CardInfoField(api_name='CardInfo')
3761
+ payment_category = CharField(api_name='PaymentCategory')
3762
+
3763
+ class Meta:
3764
+ verbose_name = 'acquiring_payin'
3765
+ verbose_name_plural = 'acquiring_payins'
3766
+ url = {
3767
+ InsertQuery.identifier: '/acquiring/payins/card/direct',
3768
+ SelectQuery.identifier: '/payins'
3769
+ }
3770
+
3771
+
3772
+ class AcquiringIdealPayIn(PayIn):
3773
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
3774
+ return_url = CharField(api_name='ReturnURL', required=True)
3775
+ bic = CharField(api_name='Bic', choices=constants.BIC_CHOICES)
3776
+ statement_descriptor = CharField(api_name='StatementDescriptor')
3777
+ creation_date = DateTimeField(api_name='CreationDate')
3778
+ redirect_url = CharField(api_name='RedirectURL')
3779
+ bank_name = CharField(api_name='BankName', choices=constants.BANK_NAME_CHOICES)
3780
+
3781
+ class Meta:
3782
+ verbose_name = 'acquiring_ideal_payin'
3783
+ verbose_name_plural = 'acquiring_ideal_payins'
3784
+ url = {
3785
+ InsertQuery.identifier: '/acquiring/payins/payment-methods/ideal',
3786
+ SelectQuery.identifier: '/payins'
3787
+ }
3788
+
3789
+
3790
+ class AcquiringApplepayPayIn(PayIn):
3791
+ tag = CharField(api_name='Tag')
3792
+ payment_data = ApplepayPaymentDataField(api_name='PaymentData', required=True)
3793
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
3794
+ statement_descriptor = CharField(api_name='StatementDescriptor')
3795
+ card_info = CardInfoField(api_name='CardInfo')
3796
+
3797
+ class Meta:
3798
+ verbose_name = 'acquiring_applepay_payin'
3799
+ verbose_name_plural = 'acquiring_applepay_payins'
3800
+ url = {
3801
+ InsertQuery.identifier: '/acquiring/payins/payment-methods/applepay',
3802
+ SelectQuery.identifier: '/payins'
3803
+ }
3804
+
3805
+
3806
+ class AcquiringGooglePayDirectPayIn(PayIn):
3807
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
3808
+ secure_mode_return_url = CharField(api_name='SecureModeReturnURL', required=True)
3809
+ secure_mode_redirect_url = CharField(api_name='SecureModeRedirectURL')
3810
+ secure_mode = CharField(api_name='SecureMode',
3811
+ choices=constants.SECURE_MODE_CHOICES,
3812
+ default=constants.SECURE_MODE_CHOICES.default)
3813
+ ip_address = CharField(api_name='IpAddress', required=True)
3814
+ browser_info = BrowserInfoField(api_name='BrowserInfo', required=True)
3815
+ payment_data = CharField(api_name='PaymentData', required=True)
3816
+ shipping = ShippingField(api_name='Shipping')
3817
+ billing = BillingField(api_name='Billing')
3818
+ statement_descriptor = CharField(api_name='StatementDescriptor')
3819
+ card_info = CardInfoField(api_name='CardInfo')
3820
+
3821
+ class Meta:
3822
+ verbose_name = 'acquiring_googlepay_direct_payin'
3823
+ verbose_name_plural = 'acquiring_googlepay_direct_payins'
3824
+ url = {
3825
+ InsertQuery.identifier: '/acquiring/payins/payment-methods/googlepay',
3826
+ SelectQuery.identifier: '/payins'
3827
+ }
3828
+
3829
+
3830
+ class AcquiringPayPalWebPayIn(PayIn):
3831
+ creation_date = DateTimeField(api_name='CreationDate')
3832
+ debited_funds = MoneyField(api_name='DebitedFunds', required=True)
3833
+ return_url = CharField(api_name='ReturnURL', required=True)
3834
+ redirect_url = CharField(api_name='RedirectURL')
3835
+ statement_descriptor = CharField(api_name='StatementDescriptor')
3836
+ shipping = ShippingField(api_name='Shipping')
3837
+ line_items = ListField(api_name='LineItems', required=True)
3838
+ culture = CharField(api_name='Culture')
3839
+ shipping_preference = CharField(api_name='ShippingPreference', choices=constants.SHIPPING_PREFERENCE_CHOICES,
3840
+ default=None)
3841
+ reference = CharField(api_name='Reference')
3842
+ cancel_url = CharField(api_name='CancelURL')
3843
+ paypal_payer_id = CharField(api_name='PaypalPayerID')
3844
+ buyer_country = CharField(api_name='BuyerCountry')
3845
+ buyer_first_name = CharField(api_name='BuyerFirstname')
3846
+ buyer_last_name = CharField(api_name='BuyerLastname')
3847
+ buyer_phone = CharField(api_name='BuyerPhone')
3848
+ paypal_order_id = CharField(api_name='PaypalOrderID')
3849
+ trackings = ListField(api_name='Trackings')
3850
+ data_collection_id = CharField(api_name='DataCollectionId')
3851
+
3852
+ class Meta:
3853
+ verbose_name = 'acquiring_paypal_web_payin'
3854
+ verbose_name_plural = 'acquiring_paypal_web_payins'
3855
+ url = {
3856
+ InsertQuery.identifier: '/acquiring/payins/payment-methods/paypal',
3857
+ SelectQuery.identifier: '/payins'
3858
+ }
3859
+
3860
+
3861
+ class AcquiringPayPalDataCollection(BaseModel):
3862
+ # since the properties needed by PayPal are different depending on the use-case,
3863
+ # use Dict as payload and response for Create and Get. The cast to AcquiringPayPalDataCollection model is skipped.
3864
+ class Meta:
3865
+ verbose_name = 'acquiring_paypal_data_collection'
3866
+ verbose_name_plural = 'acquiring_paypal_data_collections'
3867
+ url = {
3868
+ 'CREATE': '/acquiring/payins/payment-methods/paypal/data-collection',
3869
+ 'GET': '/acquiring/payins/payment-methods/paypal/data-collection'
3870
+ }
3871
+
3872
+ @classmethod
3873
+ def create(cls, idempotency_key=None, handler=None, **kwargs):
3874
+ insert = InsertQuery(AcquiringPayPalDataCollection, idempotency_key, None, **kwargs)
3875
+ insert.insert_query = kwargs
3876
+ insert.identifier = 'CREATE'
3877
+ return insert.execute(handler=handler, strict_dict_parsing=False)
3878
+
3879
+ @classmethod
3880
+ def get(cls, data_collection_id, *args, **kwargs):
3881
+ select = SelectQuery(AcquiringPayPalDataCollection, *args, **kwargs)
3882
+ select.identifier = 'GET'
3883
+ return select.get(data_collection_id, strict_dict_parsing=False, **kwargs)
3884
+
3885
+
3886
+ class AcquiringPayInRefund(BaseModel):
3887
+ debited_funds = MoneyField(api_name='DebitedFunds')
3888
+ payin = ForeignKeyField(PayIn)
3889
+ reference = CharField(api_name='Reference')
3890
+ statement_descriptor = CharField(api_name='StatementDescriptor')
3891
+ status = CharField(api_name='Status', choices=constants.STATUS_CHOICES, default=None)
3892
+ result_code = CharField(api_name='ResultCode')
3893
+ result_message = CharField(api_name='ResultMessage')
3894
+ execution_date = DateTimeField(api_name='ExecutionDate')
3895
+ type = CharField(api_name='Type', choices=constants.TRANSACTION_TYPE_CHOICES, default=None)
3896
+ nature = CharField(api_name='Nature', choices=constants.NATURE_CHOICES, default=None)
3897
+ refund_reason = RefundReasonField(api_name='RefundReason')
3898
+ initial_transaction_id = CharField(api_name='InitialTransactionId')
3899
+ initial_transaction_type = CharField(api_name='InitialTransactionType', choices=constants.TRANSACTION_TYPE_CHOICES,
3900
+ default=None)
3901
+ initial_transaction_nature = CharField(api_name='InitialTransactionNature', choices=constants.NATURE_CHOICES,
3902
+ default=None)
3903
+
3904
+ class Meta:
3905
+ verbose_name = 'acquiring_payin_refund'
3906
+ verbose_name_plural = 'acquiring_payin_refund'
3907
+ url = {
3908
+ InsertQuery.identifier: '/acquiring/payins/%(payin_id)s/refunds'
3909
+ }
3910
+
3911
+
3912
+ class AcquiringCardValidation(BaseModel):
3913
+ creation_date = DateTimeField(api_name='CreationDate')
3914
+ ip_address = CharField(api_name='IpAddress', required=True)
3915
+ browser_info = BrowserInfoField(api_name='BrowserInfo', required=True)
3916
+ secure_mode_return_url = CharField(api_name='SecureModeReturnURL', required=True)
3917
+ secure_mode_redirect_url = CharField(api_name='SecureModeRedirectURL')
3918
+ secure_mode_needed = BooleanField(api_name='SecureModeNeeded')
3919
+ secure_mode = CharField(api_name='SecureMode',
3920
+ choices=constants.SECURE_MODE_CHOICES)
3921
+ validity = CharField(api_name='Validity',
3922
+ choices=constants.VALIDITY_CHOICES,
3923
+ default=constants.VALIDITY_CHOICES.unknown)
3924
+ type = CharField(api_name='Type', choices=constants.TRANSACTION_TYPE_CHOICES, default=None)
3925
+ applied_3ds_version = CharField(api_name='Applied3DSVersion')
3926
+ status = CharField(api_name='Status',
3927
+ choices=constants.STATUS_CHOICES,
3928
+ default=None)
3929
+ result_code = CharField(api_name='ResultCode')
3930
+ result_message = CharField(api_name='ResultMessage')
3931
+ preferred_card_network = CharField(api_name='PreferredCardNetwork')
3932
+ authorization_date = DateTimeField(api_name='AuthorizationDate')
3933
+ card_info = CardInfoField(api_name='CardInfo')
3934
+ payment_category = CharField(api_name='PaymentCategory')
3935
+ authentication_result = AuthenticationResultField(api_name='AuthenticationResult')
3936
+
3937
+ def validate(self, card_id, **kwargs):
3938
+ insert = InsertQuery(self, **kwargs)
3939
+ insert.insert_query = self.get_field_dict()
3940
+ insert.insert_query['id'] = card_id
3941
+ insert.identifier = 'CREATE_CARD_VALIDATION'
3942
+ return insert.execute()
3943
+
3944
+ @classmethod
3945
+ def get(cls, card_validation_id, card_id, *args, **kwargs):
3946
+ kwargs['card_id'] = card_id
3947
+ kwargs['id'] = card_validation_id
3948
+ select = SelectQuery(AcquiringCardValidation, *args, **kwargs)
3949
+ select.identifier = 'GET'
3950
+ return select.get("", *args, **kwargs)
3951
+
3952
+ class Meta:
3953
+ verbose_name = 'acquiring_card_validation'
3954
+ verbose_name_plural = 'acquiring_card_validations'
3955
+ url = {
3956
+ 'CREATE_CARD_VALIDATION': '/acquiring/cards/%(id)s/validation',
3957
+ 'GET': '/cards/%(card_id)s/validation/%(id)s'
3958
+ }