MambuPy 2.0.0b30__tar.gz → 2.0.0b32__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/__init__.py +1 -1
- {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/connector/mambuconnector.py +11 -7
- {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/connector/rest.py +118 -94
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/entities.py +104 -106
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/interfaces.py +3 -1
- {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/mambubranch.py +1 -2
- {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/mambuclient.py +16 -14
- {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/mambucustomfield.py +20 -17
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/mambugroup.py +16 -14
- {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/mambuloan.py +48 -28
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/mambuproduct.py +13 -20
- {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/mambustruct.py +102 -104
- {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/mambutask.py +19 -17
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/mambutransaction.py +11 -13
- {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/mambuuser.py +24 -26
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/vos.py +4 -0
- {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/mambuconfig.py +1 -0
- {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/mambuutil.py +1 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy.egg-info/PKG-INFO +1 -1
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/PKG-INFO +1 -1
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/__init__.py +1 -1
- {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/connector/mambuconnector.py +11 -7
- {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/connector/rest.py +118 -94
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/entities.py +104 -106
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/interfaces.py +3 -1
- {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/mambubranch.py +1 -2
- {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/mambuclient.py +16 -14
- {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/mambucustomfield.py +20 -17
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/mambugroup.py +16 -14
- {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/mambuloan.py +48 -28
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/mambuproduct.py +13 -20
- {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/mambustruct.py +102 -104
- {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/mambutask.py +19 -17
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/mambutransaction.py +11 -13
- {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/mambuuser.py +24 -26
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/vos.py +4 -0
- {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/mambuconfig.py +1 -0
- {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/mambuutil.py +1 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/LICENSE +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/__init__.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/classes.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/connector/__init__.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/mambucentre.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/mamburole.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/mambugeturl.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/__init__.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_activities.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_addresses.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_branches.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_centres.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_clients.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_customfields.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_dummies.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_groups.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_loans.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_mambu.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_orm.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_tasks.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_users.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/__init__.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambubranch.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambucentre.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambuclient.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambugroup.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambuloan.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambuproduct.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mamburepayment.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambustruct.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambutask.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambutransaction.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambuuser.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/utils/__init__.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/utils/logging_config.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/utils/userdeactivate.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy.egg-info/SOURCES.txt +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy.egg-info/dependency_links.txt +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy.egg-info/requires.txt +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy.egg-info/top_level.txt +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/README.md +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/__init__.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/classes.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/connector/__init__.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/mambucentre.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/mamburole.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/mambugeturl.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/__init__.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_activities.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_addresses.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_branches.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_centres.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_clients.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_customfields.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_dummies.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_groups.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_loans.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_mambu.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_orm.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_tasks.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_users.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/__init__.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambubranch.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambucentre.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambuclient.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambugroup.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambuloan.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambuproduct.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mamburepayment.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambustruct.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambutask.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambutransaction.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambuuser.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/utils/__init__.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/utils/logging_config.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/utils/userdeactivate.py +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/setup.cfg +0 -0
- {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/setup.py +0 -0
|
@@ -6,6 +6,7 @@ Currently supports REST.
|
|
|
6
6
|
:nosignatures:
|
|
7
7
|
:toctree: _autosummary
|
|
8
8
|
"""
|
|
9
|
+
|
|
9
10
|
from abc import ABC, abstractmethod
|
|
10
11
|
|
|
11
12
|
|
|
@@ -91,8 +92,12 @@ class MambuConnectorReader(ABC):
|
|
|
91
92
|
|
|
92
93
|
@abstractmethod
|
|
93
94
|
def mambu_get_documents_metadata(
|
|
94
|
-
self,
|
|
95
|
-
|
|
95
|
+
self,
|
|
96
|
+
entid,
|
|
97
|
+
owner_type,
|
|
98
|
+
offset=None,
|
|
99
|
+
limit=None,
|
|
100
|
+
paginationDetails="OFF",
|
|
96
101
|
):
|
|
97
102
|
"""Gets metadata for all the documents attached to an entity
|
|
98
103
|
|
|
@@ -219,9 +224,8 @@ class MambuConnectorWriter(ABC):
|
|
|
219
224
|
|
|
220
225
|
@abstractmethod
|
|
221
226
|
def mambu_make_disbursement(
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
allowed_fields, **kwargs):
|
|
227
|
+
self, loan_id, firstRepaymentDate, notes, valueDate, allowed_fields, **kwargs
|
|
228
|
+
):
|
|
225
229
|
"""Make a disbursement transacton on a loan account.
|
|
226
230
|
|
|
227
231
|
Args:
|
|
@@ -236,8 +240,8 @@ class MambuConnectorWriter(ABC):
|
|
|
236
240
|
|
|
237
241
|
@abstractmethod
|
|
238
242
|
def mambu_make_repayment(
|
|
239
|
-
|
|
240
|
-
|
|
243
|
+
self, loan_id, amount, notes, valueDate, allowed_fields, **kwargs
|
|
244
|
+
):
|
|
241
245
|
"""Make a repayment transaction on a loan account.
|
|
242
246
|
|
|
243
247
|
Args:
|
|
@@ -6,6 +6,7 @@ Currently supports REST.
|
|
|
6
6
|
:nosignatures:
|
|
7
7
|
:toctree: _autosummary
|
|
8
8
|
"""
|
|
9
|
+
|
|
9
10
|
import base64
|
|
10
11
|
import copy
|
|
11
12
|
import json
|
|
@@ -21,11 +22,21 @@ from requests.adapters import HTTPAdapter
|
|
|
21
22
|
from requests.packages.urllib3.util.retry import Retry
|
|
22
23
|
|
|
23
24
|
from .mambuconnector import MambuConnector, MambuConnectorReader, MambuConnectorWriter
|
|
24
|
-
from MambuPy.mambuutil import (
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
from MambuPy.mambuutil import (
|
|
26
|
+
ALLOWED_UPLOAD_MIMETYPES,
|
|
27
|
+
DETAILSLEVEL,
|
|
28
|
+
MAX_UPLOAD_SIZE,
|
|
29
|
+
PAGINATIONDETAILS,
|
|
30
|
+
SEARCH_OPERATORS,
|
|
31
|
+
OUT_OF_BOUNDS_PAGINATION_LIMIT_VALUE,
|
|
32
|
+
UPLOAD_FILENAME_INVALID_CHARS,
|
|
33
|
+
MambuCommError,
|
|
34
|
+
MambuError,
|
|
35
|
+
MambuPyError,
|
|
36
|
+
apipwd,
|
|
37
|
+
apiurl,
|
|
38
|
+
apiuser,
|
|
39
|
+
)
|
|
29
40
|
|
|
30
41
|
|
|
31
42
|
logger = logging.getLogger(__name__)
|
|
@@ -104,7 +115,8 @@ class MambuConnectorREST(MambuConnector, MambuConnectorReader, MambuConnectorWri
|
|
|
104
115
|
"PUT",
|
|
105
116
|
"DELETE",
|
|
106
117
|
"TRACE",
|
|
107
|
-
"PATCH"
|
|
118
|
+
"PATCH",
|
|
119
|
+
],
|
|
108
120
|
)
|
|
109
121
|
adapter = HTTPAdapter(max_retries=retry_strategy)
|
|
110
122
|
http = requests.Session()
|
|
@@ -116,17 +128,23 @@ class MambuConnectorREST(MambuConnector, MambuConnectorReader, MambuConnectorWri
|
|
|
116
128
|
logger.debug(
|
|
117
129
|
"about to make %s request: \
|
|
118
130
|
url %s, params %s, data %s, headers %s",
|
|
119
|
-
method,
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
131
|
+
method,
|
|
132
|
+
url,
|
|
133
|
+
params,
|
|
134
|
+
data,
|
|
135
|
+
[(k, v) for k, v in headers.items() if k != "Authorization"],
|
|
123
136
|
)
|
|
137
|
+
resp = http.request(method, url, params=params, data=data, headers=headers)
|
|
124
138
|
resp.raise_for_status()
|
|
125
139
|
except requests.exceptions.HTTPError as httperr:
|
|
126
140
|
logger.error(
|
|
127
141
|
"%s on %s request: params %s, data %s, headers %s",
|
|
128
|
-
str(httperr),
|
|
129
|
-
|
|
142
|
+
str(httperr),
|
|
143
|
+
method,
|
|
144
|
+
params,
|
|
145
|
+
data,
|
|
146
|
+
[(k, v) for k, v in headers.items()],
|
|
147
|
+
)
|
|
130
148
|
if hasattr(resp, "content"): # pragma: no cover
|
|
131
149
|
logger.error("HTTPError, resp content: %s", resp.content)
|
|
132
150
|
try:
|
|
@@ -141,32 +159,49 @@ url %s, params %s, data %s, headers %s",
|
|
|
141
159
|
},
|
|
142
160
|
]
|
|
143
161
|
}
|
|
162
|
+
try:
|
|
163
|
+
error = content["errors"][0]
|
|
164
|
+
except KeyError:
|
|
165
|
+
error = content
|
|
144
166
|
raise MambuError(
|
|
145
167
|
"{} ({}) - {}{}".format(
|
|
146
|
-
|
|
168
|
+
error["errorCode"] if "errorCode" in error else error["returnCode"],
|
|
147
169
|
resp.status_code,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
170
|
+
(
|
|
171
|
+
error["errorReason"]
|
|
172
|
+
if "errorReason" in error
|
|
173
|
+
else error["returnStatus"]
|
|
174
|
+
),
|
|
175
|
+
" (" + error["errorSource"] + ")" if "errorSource" in error else "",
|
|
152
176
|
)
|
|
153
177
|
)
|
|
154
178
|
except requests.exceptions.RetryError as rerr: # pragma: no cover
|
|
155
179
|
logger.error(
|
|
156
180
|
"%s MambuCommError on %s request: url %s, params %s, data %s, headers %s",
|
|
157
|
-
str(rerr),
|
|
158
|
-
|
|
181
|
+
str(rerr),
|
|
182
|
+
method,
|
|
183
|
+
url,
|
|
184
|
+
params,
|
|
185
|
+
data,
|
|
186
|
+
[(k, v) for k, v in headers.items()],
|
|
187
|
+
)
|
|
159
188
|
raise MambuCommError(
|
|
160
|
-
"COMM Error: I cannot communicate with Mambu: {}".format(rerr)
|
|
189
|
+
"COMM Error: I cannot communicate with Mambu: {}".format(rerr)
|
|
190
|
+
)
|
|
161
191
|
except Exception as ex:
|
|
162
192
|
logger.exception(
|
|
163
193
|
"%s Exception (%s) on %s request: url %s, params %s, data %s, headers %s",
|
|
164
|
-
str(ex),
|
|
165
|
-
|
|
194
|
+
str(ex),
|
|
195
|
+
resp,
|
|
196
|
+
method,
|
|
197
|
+
url,
|
|
198
|
+
params,
|
|
199
|
+
data,
|
|
200
|
+
[(k, v) for k, v in headers.items()],
|
|
201
|
+
)
|
|
166
202
|
if hasattr(resp, "content"): # pragma: no cover
|
|
167
203
|
logger.error("Exception, resp content: %s", resp.content)
|
|
168
|
-
raise MambuCommError(
|
|
169
|
-
"Unknown comm error with Mambu: {}".format(ex))
|
|
204
|
+
raise MambuCommError("Unknown comm error with Mambu: {}".format(ex))
|
|
170
205
|
|
|
171
206
|
logger.debug("response %s to %s:\n%s", resp, method, resp.content)
|
|
172
207
|
|
|
@@ -226,7 +261,8 @@ url %s, params %s, data %s, headers %s",
|
|
|
226
261
|
params["limit"] = limit if limit != 0 else None
|
|
227
262
|
|
|
228
263
|
resp = self.__request(
|
|
229
|
-
method, url, params=copy.copy(params), data=copy.copy(data)
|
|
264
|
+
method, url, params=copy.copy(params), data=copy.copy(data)
|
|
265
|
+
)
|
|
230
266
|
|
|
231
267
|
jsonresp = list(json.loads(resp.decode()))
|
|
232
268
|
if len(jsonresp) < limit:
|
|
@@ -291,17 +327,15 @@ url %s, params %s, data %s, headers %s",
|
|
|
291
327
|
MambuPyError (obj): when invalid filterCriteria
|
|
292
328
|
"""
|
|
293
329
|
validated_filterCriteria = []
|
|
294
|
-
if (
|
|
295
|
-
|
|
296
|
-
any([criteria for criteria in filterCriteria
|
|
297
|
-
if not isinstance(criteria, dict)])
|
|
330
|
+
if not isinstance(filterCriteria, list) or any(
|
|
331
|
+
[criteria for criteria in filterCriteria if not isinstance(criteria, dict)]
|
|
298
332
|
):
|
|
299
333
|
raise MambuPyError("filterCriteria must be a list of dictionaries")
|
|
300
334
|
for criteria in filterCriteria:
|
|
301
335
|
if (
|
|
302
|
-
"field" not in criteria
|
|
303
|
-
"operator" not in criteria
|
|
304
|
-
criteria["operator"] not in SEARCH_OPERATORS
|
|
336
|
+
"field" not in criteria
|
|
337
|
+
or "operator" not in criteria
|
|
338
|
+
or criteria["operator"] not in SEARCH_OPERATORS
|
|
305
339
|
):
|
|
306
340
|
raise MambuPyError(
|
|
307
341
|
"a filterCriteria must have a field and an operator, member of {}".format(
|
|
@@ -447,12 +481,10 @@ url %s, params %s, data %s, headers %s",
|
|
|
447
481
|
data = {}
|
|
448
482
|
|
|
449
483
|
if filterCriteria is not None:
|
|
450
|
-
data["filterCriteria"] = self.__validate_filter_criteria(
|
|
451
|
-
filterCriteria)
|
|
484
|
+
data["filterCriteria"] = self.__validate_filter_criteria(filterCriteria)
|
|
452
485
|
|
|
453
486
|
if sortingCriteria is not None:
|
|
454
|
-
data["sortingCriteria"] = self.__validate_sorting_criteria(
|
|
455
|
-
sortingCriteria)
|
|
487
|
+
data["sortingCriteria"] = self.__validate_sorting_criteria(sortingCriteria)
|
|
456
488
|
|
|
457
489
|
url = "https://{}/api/{}:search".format(self._tenant, prefix)
|
|
458
490
|
|
|
@@ -565,8 +597,12 @@ url %s, params %s, data %s, headers %s",
|
|
|
565
597
|
)
|
|
566
598
|
|
|
567
599
|
def mambu_get_documents_metadata(
|
|
568
|
-
self,
|
|
569
|
-
|
|
600
|
+
self,
|
|
601
|
+
entid,
|
|
602
|
+
owner_type,
|
|
603
|
+
offset=None,
|
|
604
|
+
limit=None,
|
|
605
|
+
paginationDetails="OFF",
|
|
570
606
|
):
|
|
571
607
|
"""Gets metadata for all the documents attached to an entity
|
|
572
608
|
|
|
@@ -606,8 +642,7 @@ url %s, params %s, data %s, headers %s",
|
|
|
606
642
|
Args:
|
|
607
643
|
loanid (str): the id or encoded key of the loan account
|
|
608
644
|
"""
|
|
609
|
-
url = "https://{}/api/{}/{}/schedule".format(
|
|
610
|
-
self._tenant, "loans", loanid)
|
|
645
|
+
url = "https://{}/api/{}/{}/schedule".format(self._tenant, "loans", loanid)
|
|
611
646
|
|
|
612
647
|
return self.__request("GET", url)
|
|
613
648
|
|
|
@@ -618,11 +653,8 @@ url %s, params %s, data %s, headers %s",
|
|
|
618
653
|
loanid (str): the id or encoded key of the loan account
|
|
619
654
|
notes (str): notes to associate to the writeoff operation in Mambu
|
|
620
655
|
"""
|
|
621
|
-
url = "https://{}/api/{}/{}:writeOff".format(
|
|
622
|
-
|
|
623
|
-
data = {
|
|
624
|
-
"notes": notes
|
|
625
|
-
}
|
|
656
|
+
url = "https://{}/api/{}/{}:writeOff".format(self._tenant, "loans", loanid)
|
|
657
|
+
data = {"notes": notes}
|
|
626
658
|
return self.__request("POST", url, data=data)
|
|
627
659
|
|
|
628
660
|
def mambu_change_state(self, entid, prefix, action, notes):
|
|
@@ -635,10 +667,7 @@ url %s, params %s, data %s, headers %s",
|
|
|
635
667
|
notes (str): notes to associate to the change of status
|
|
636
668
|
"""
|
|
637
669
|
url = "https://{}/api/{}/{}:changeState".format(self._tenant, prefix, entid)
|
|
638
|
-
data = {
|
|
639
|
-
"action": action,
|
|
640
|
-
"notes": notes
|
|
641
|
-
}
|
|
670
|
+
data = {"action": action, "notes": notes}
|
|
642
671
|
return self.__request("POST", url, data=data)
|
|
643
672
|
|
|
644
673
|
def mambu_get_customfield(self, customfieldid):
|
|
@@ -647,14 +676,12 @@ url %s, params %s, data %s, headers %s",
|
|
|
647
676
|
Args:
|
|
648
677
|
customfieldid (str): the id or encoded key of the custom field
|
|
649
678
|
"""
|
|
650
|
-
url = "https://{}/api/customfields/{}".format(
|
|
651
|
-
self._tenant, customfieldid)
|
|
679
|
+
url = "https://{}/api/customfields/{}".format(self._tenant, customfieldid)
|
|
652
680
|
return self.__request("GET", url)
|
|
653
681
|
|
|
654
682
|
def mambu_get_comments(
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
offset=None, limit=None, paginationDetails="OFF"):
|
|
683
|
+
self, owner_id, owner_type, offset=None, limit=None, paginationDetails="OFF"
|
|
684
|
+
):
|
|
658
685
|
"""Retrieves the comments of entity with owner_id.
|
|
659
686
|
|
|
660
687
|
Args:
|
|
@@ -667,18 +694,18 @@ url %s, params %s, data %s, headers %s",
|
|
|
667
694
|
paginationDetails=paginationDetails,
|
|
668
695
|
)
|
|
669
696
|
if owner_type not in [
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
697
|
+
"CLIENT",
|
|
698
|
+
"GROUP",
|
|
699
|
+
"LOAN_PRODUCT",
|
|
700
|
+
"SAVINGS_PRODUCT",
|
|
701
|
+
"CENTRE",
|
|
702
|
+
"BRANCH",
|
|
703
|
+
"USER",
|
|
704
|
+
"LOAN_ACCOUNT",
|
|
705
|
+
"DEPOSIT_ACCOUNT",
|
|
706
|
+
"ID_DOCUMENT",
|
|
707
|
+
"LINE_OF_CREDIT",
|
|
708
|
+
"GL_JOURNAL_ENTRY",
|
|
682
709
|
]:
|
|
683
710
|
raise MambuError("Owner {} not allowed".format(owner_type))
|
|
684
711
|
|
|
@@ -698,32 +725,29 @@ url %s, params %s, data %s, headers %s",
|
|
|
698
725
|
text (str): the text of the comment
|
|
699
726
|
"""
|
|
700
727
|
if owner_type not in [
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
728
|
+
"CLIENT",
|
|
729
|
+
"GROUP",
|
|
730
|
+
"LOAN_PRODUCT",
|
|
731
|
+
"SAVINGS_PRODUCT",
|
|
732
|
+
"CENTRE",
|
|
733
|
+
"BRANCH",
|
|
734
|
+
"USER",
|
|
735
|
+
"LOAN_ACCOUNT",
|
|
736
|
+
"DEPOSIT_ACCOUNT",
|
|
737
|
+
"ID_DOCUMENT",
|
|
738
|
+
"LINE_OF_CREDIT",
|
|
739
|
+
"GL_JOURNAL_ENTRY",
|
|
713
740
|
]:
|
|
714
741
|
raise MambuError("Owner {} not allowed".format(owner_type))
|
|
715
|
-
data = {"ownerKey": owner_id,
|
|
716
|
-
"ownerType": owner_type,
|
|
717
|
-
"text": text}
|
|
742
|
+
data = {"ownerKey": owner_id, "ownerType": owner_type, "text": text}
|
|
718
743
|
|
|
719
744
|
url = "https://{}/api/comments".format(self._tenant)
|
|
720
745
|
|
|
721
746
|
return self.__request("POST", url, data=data)
|
|
722
747
|
|
|
723
748
|
def mambu_make_disbursement(
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
allowed_fields, **kwargs):
|
|
749
|
+
self, loan_id, notes, firstRepaymentDate, valueDate, allowed_fields, **kwargs
|
|
750
|
+
):
|
|
727
751
|
"""Make a disbursement transacton on a loan account.
|
|
728
752
|
|
|
729
753
|
Args:
|
|
@@ -734,22 +758,24 @@ url %s, params %s, data %s, headers %s",
|
|
|
734
758
|
allowed_fields (list): extra fields allowed for the transaction
|
|
735
759
|
kwargs (dict): key-values of extra fields for the transaction
|
|
736
760
|
"""
|
|
737
|
-
data = {
|
|
738
|
-
|
|
739
|
-
|
|
761
|
+
data = {
|
|
762
|
+
"firstRepaymentDate": firstRepaymentDate,
|
|
763
|
+
"notes": notes,
|
|
764
|
+
"valueDate": valueDate,
|
|
765
|
+
}
|
|
740
766
|
for k, v in kwargs.items():
|
|
741
767
|
if k in allowed_fields:
|
|
742
768
|
data[k] = v
|
|
743
769
|
|
|
744
770
|
url = "https://{}/api/loans/{}/disbursement-transactions".format(
|
|
745
|
-
self._tenant, loan_id
|
|
771
|
+
self._tenant, loan_id
|
|
772
|
+
)
|
|
746
773
|
|
|
747
774
|
return self.__request("POST", url, data=data)
|
|
748
775
|
|
|
749
776
|
def mambu_make_repayment(
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
allowed_fields, **kwargs):
|
|
777
|
+
self, loan_id, amount, notes, valueDate, allowed_fields, **kwargs
|
|
778
|
+
):
|
|
753
779
|
"""Make a repayment transaction on a loan account.
|
|
754
780
|
|
|
755
781
|
Args:
|
|
@@ -760,9 +786,7 @@ url %s, params %s, data %s, headers %s",
|
|
|
760
786
|
allowed_fields (list): extra fields allowed for the transaction
|
|
761
787
|
kwargs (dict): key-values of extra fields for the transaction
|
|
762
788
|
"""
|
|
763
|
-
data = {"amount": amount,
|
|
764
|
-
"notes": notes,
|
|
765
|
-
"valueDate": valueDate}
|
|
789
|
+
data = {"amount": amount, "notes": notes, "valueDate": valueDate}
|
|
766
790
|
for k, v in kwargs.items():
|
|
767
791
|
if k in allowed_fields:
|
|
768
792
|
data[k] = v
|