brynq-sdk-nmbrs 2.0.1__tar.gz → 2.1.0__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.
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/PKG-INFO +1 -1
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/__init__.py +6 -5
- brynq_sdk_nmbrs-2.1.0/brynq_sdk_nmbrs/manager.py +294 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schemas/__init__.py +3 -0
- brynq_sdk_nmbrs-2.1.0/brynq_sdk_nmbrs/schemas/manager.py +123 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs.egg-info/PKG-INFO +1 -1
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs.egg-info/SOURCES.txt +2 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/setup.py +1 -1
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/address.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/bank.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/children.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/companies.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/contract.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/costcenter.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/costunit.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/debtors.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/department.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/document.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/employees.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/employment.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/function.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/hours.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/salaries.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/salary_tables.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schedules.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schemas/address.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schemas/bank.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schemas/contracts.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schemas/costcenter.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schemas/costunit.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schemas/debtor.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schemas/department.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schemas/employees.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schemas/employment.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schemas/function.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schemas/hours.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schemas/salary.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schemas/schedules.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/schemas/wagecomponents.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs/wagecomponents.py +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs.egg-info/dependency_links.txt +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs.egg-info/not-zip-safe +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs.egg-info/requires.txt +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs.egg-info/top_level.txt +0 -0
- {brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/setup.cfg +0 -0
|
@@ -20,6 +20,7 @@ from .salary_tables import SalaryTables, SalaryScales, SalarySteps
|
|
|
20
20
|
from .employment import Employment
|
|
21
21
|
from .function import EmployeeFunction
|
|
22
22
|
from .hours import VariableHours, FixedHours
|
|
23
|
+
from .manager import EmployeeManager, Manager
|
|
23
24
|
from .salaries import Salaries
|
|
24
25
|
from .schedules import Schedule
|
|
25
26
|
from .wagecomponents import EmployeeFixedWageComponents, EmployeeVariableWageComponents
|
|
@@ -73,6 +74,8 @@ class Nmbrs(BrynQ):
|
|
|
73
74
|
self.function = EmployeeFunction(self)
|
|
74
75
|
self.fixed_hours = FixedHours(self)
|
|
75
76
|
self.variable_hours = VariableHours(self)
|
|
77
|
+
self.manager = Manager(self)
|
|
78
|
+
self.employee_manager = EmployeeManager(self)
|
|
76
79
|
self.salaries = Salaries(self)
|
|
77
80
|
self.schedule = Schedule(self)
|
|
78
81
|
self.fixed_wagecomponents = EmployeeFixedWageComponents(self)
|
|
@@ -96,23 +99,22 @@ class Nmbrs(BrynQ):
|
|
|
96
99
|
def _get_soap_auth_header(self):
|
|
97
100
|
"""
|
|
98
101
|
Creates the SOAP authentication header using credentials from initial_credentials.
|
|
99
|
-
|
|
100
102
|
Returns:
|
|
101
103
|
AuthHeaderWithDomainType: The authentication header for SOAP requests
|
|
102
104
|
"""
|
|
103
105
|
initial_credentials = self.get_system_credential(system='nmbrs', label='bob')
|
|
104
106
|
config = initial_credentials.get("config", {})
|
|
105
|
-
|
|
107
|
+
|
|
106
108
|
# Get the AuthHeaderWithDomain type from the WSDL
|
|
107
109
|
AuthHeaderWithDomainType = self.soap_client.get_element('ns0:AuthHeaderWithDomain')
|
|
108
|
-
|
|
110
|
+
|
|
109
111
|
# Create the auth header using credentials from config
|
|
110
112
|
auth_header = AuthHeaderWithDomainType(
|
|
111
113
|
Username=config.get("soap_api_username"),
|
|
112
114
|
Token=config.get("soap_api_token"),
|
|
113
115
|
Domain=config.get("soap_api_domain")
|
|
114
116
|
)
|
|
115
|
-
|
|
117
|
+
|
|
116
118
|
return auth_header
|
|
117
119
|
|
|
118
120
|
def get_paginated_result(self, request: requests.Request) -> List:
|
|
@@ -158,4 +160,3 @@ class Nmbrs(BrynQ):
|
|
|
158
160
|
df.columns = map(camel_to_snake_case, df.columns)
|
|
159
161
|
|
|
160
162
|
return df
|
|
161
|
-
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import pandas as pd
|
|
2
|
+
import requests
|
|
3
|
+
from brynq_sdk_functions import Functions as BrynQFunctions
|
|
4
|
+
import math
|
|
5
|
+
from typing import Dict, Any
|
|
6
|
+
from .schemas.manager import (
|
|
7
|
+
ManagerGet, ManagerBasicGet, EmployeeManagerGet, ManagerHistoricBasicGet,
|
|
8
|
+
ManagerCreate, ManagerUpdate, ManagerDelete, UpdateEmployeeManager
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class EmployeeManager:
|
|
13
|
+
def __init__(self, nmbrs):
|
|
14
|
+
self.nmbrs = nmbrs
|
|
15
|
+
|
|
16
|
+
def get(self, created_from: str = None) -> tuple[pd.DataFrame, pd.DataFrame]:
|
|
17
|
+
"""
|
|
18
|
+
Get employee manager history for all companies.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
created_from: Optional filter to get managers created from a specific date
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
Tuple of (valid_managers, invalid_managers) DataFrames
|
|
25
|
+
"""
|
|
26
|
+
managers = pd.DataFrame()
|
|
27
|
+
for company in self.nmbrs.company_ids:
|
|
28
|
+
managers = pd.concat([managers, self._get(company, created_from)])
|
|
29
|
+
|
|
30
|
+
valid_managers, invalid_managers = BrynQFunctions.validate_data(df=managers, schema=EmployeeManagerGet, debug=True)
|
|
31
|
+
|
|
32
|
+
return valid_managers, invalid_managers
|
|
33
|
+
|
|
34
|
+
def _get(self, company_id: str, created_from: str = None) -> pd.DataFrame:
|
|
35
|
+
"""
|
|
36
|
+
Get employee manager history for a specific company.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
company_id: The ID of the company
|
|
40
|
+
created_from: Optional filter to get managers created from a specific date
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
DataFrame containing employee manager data
|
|
44
|
+
"""
|
|
45
|
+
params = {}
|
|
46
|
+
if created_from:
|
|
47
|
+
params['createdFrom'] = created_from
|
|
48
|
+
|
|
49
|
+
try:
|
|
50
|
+
request = requests.Request(
|
|
51
|
+
method='GET',
|
|
52
|
+
url=f"{self.nmbrs.base_url}companies/{company_id}/employees/managers",
|
|
53
|
+
params=params
|
|
54
|
+
)
|
|
55
|
+
data = self.nmbrs.get_paginated_result(request)
|
|
56
|
+
df = pd.json_normalize(
|
|
57
|
+
data,
|
|
58
|
+
record_path='managers',
|
|
59
|
+
meta=['employeeId']
|
|
60
|
+
)
|
|
61
|
+
df['companyId'] = company_id
|
|
62
|
+
except requests.HTTPError as e:
|
|
63
|
+
df = pd.DataFrame()
|
|
64
|
+
|
|
65
|
+
return df
|
|
66
|
+
|
|
67
|
+
def get_historic_basic(self, created_from: str = None) -> tuple[pd.DataFrame, pd.DataFrame]:
|
|
68
|
+
"""
|
|
69
|
+
Get historic basic manager information for employees.
|
|
70
|
+
|
|
71
|
+
Args:
|
|
72
|
+
created_from: Optional filter to get managers created from a specific date
|
|
73
|
+
|
|
74
|
+
Returns:
|
|
75
|
+
Tuple of (valid_managers, invalid_managers) DataFrames
|
|
76
|
+
"""
|
|
77
|
+
managers = pd.DataFrame()
|
|
78
|
+
for company in self.nmbrs.company_ids:
|
|
79
|
+
managers = pd.concat([managers, self._get_historic_basic(company, created_from)])
|
|
80
|
+
|
|
81
|
+
valid_managers, invalid_managers = BrynQFunctions.validate_data(df=managers, schema=ManagerHistoricBasicGet, debug=True)
|
|
82
|
+
|
|
83
|
+
return valid_managers, invalid_managers
|
|
84
|
+
|
|
85
|
+
def _get_historic_basic(self, company_id: str, created_from: str = None) -> pd.DataFrame:
|
|
86
|
+
"""
|
|
87
|
+
Get historic basic manager information for a specific company.
|
|
88
|
+
|
|
89
|
+
Args:
|
|
90
|
+
company_id: The ID of the company
|
|
91
|
+
created_from: Optional filter to get managers created from a specific date
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
DataFrame containing historic basic manager data
|
|
95
|
+
"""
|
|
96
|
+
params = {}
|
|
97
|
+
if created_from:
|
|
98
|
+
params['createdFrom'] = created_from
|
|
99
|
+
|
|
100
|
+
try:
|
|
101
|
+
request = requests.Request(
|
|
102
|
+
method='GET',
|
|
103
|
+
url=f"{self.nmbrs.base_url}companies/{company_id}/employees/managers",
|
|
104
|
+
params=params
|
|
105
|
+
)
|
|
106
|
+
data = self.nmbrs.get_paginated_result(request)
|
|
107
|
+
df = pd.json_normalize(
|
|
108
|
+
data,
|
|
109
|
+
record_path='managers',
|
|
110
|
+
meta=['employeeId']
|
|
111
|
+
)
|
|
112
|
+
df['companyId'] = company_id
|
|
113
|
+
except requests.HTTPError as e:
|
|
114
|
+
df = pd.DataFrame()
|
|
115
|
+
|
|
116
|
+
return df
|
|
117
|
+
|
|
118
|
+
def update(self, employee_id: str, data: Dict[str, Any]):
|
|
119
|
+
"""
|
|
120
|
+
Update the manager of a specific employee using Pydantic validation.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
employee_id: The ID of the employee
|
|
124
|
+
data: Dictionary containing manager data with fields matching
|
|
125
|
+
the UpdateEmployeeManager schema (using camelCase field names)
|
|
126
|
+
|
|
127
|
+
Returns:
|
|
128
|
+
Response from the API
|
|
129
|
+
"""
|
|
130
|
+
# Validate with Pydantic model
|
|
131
|
+
manager_model = UpdateEmployeeManager(**data)
|
|
132
|
+
|
|
133
|
+
if self.nmbrs.mock_mode:
|
|
134
|
+
return manager_model
|
|
135
|
+
|
|
136
|
+
# Convert validated model to dict for API payload
|
|
137
|
+
payload = manager_model.dict(exclude_none=True)
|
|
138
|
+
|
|
139
|
+
# Send request
|
|
140
|
+
resp = self.nmbrs.session.put(
|
|
141
|
+
url=f"{self.nmbrs.base_url}employees/{employee_id}/manager",
|
|
142
|
+
json=payload,
|
|
143
|
+
timeout=self.nmbrs.timeout
|
|
144
|
+
)
|
|
145
|
+
return resp
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
class Manager:
|
|
149
|
+
def __init__(self, nmbrs):
|
|
150
|
+
self.nmbrs = nmbrs
|
|
151
|
+
|
|
152
|
+
def get(self, debtor_id: str) -> tuple[pd.DataFrame, pd.DataFrame]:
|
|
153
|
+
"""
|
|
154
|
+
Get all managers for a specific debtor.
|
|
155
|
+
|
|
156
|
+
Args:
|
|
157
|
+
debtor_id: The ID of the debtor
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
Tuple of (valid_managers, invalid_managers) DataFrames
|
|
161
|
+
"""
|
|
162
|
+
try:
|
|
163
|
+
request = requests.Request(
|
|
164
|
+
method='GET',
|
|
165
|
+
url=f"{self.nmbrs.base_url}debtors/{debtor_id}/managers"
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
data = self.nmbrs.get_paginated_result(request)
|
|
169
|
+
df = pd.DataFrame(data)
|
|
170
|
+
df['debtorId'] = debtor_id
|
|
171
|
+
|
|
172
|
+
valid_managers, invalid_managers = BrynQFunctions.validate_data(df=df, schema=ManagerGet, debug=True)
|
|
173
|
+
|
|
174
|
+
except requests.HTTPError as e:
|
|
175
|
+
df = pd.DataFrame()
|
|
176
|
+
valid_managers = df
|
|
177
|
+
invalid_managers = df
|
|
178
|
+
|
|
179
|
+
return valid_managers, invalid_managers
|
|
180
|
+
|
|
181
|
+
def get_basic(self, debtor_id: str) -> tuple[pd.DataFrame, pd.DataFrame]:
|
|
182
|
+
"""
|
|
183
|
+
Get basic manager information for a specific debtor.
|
|
184
|
+
|
|
185
|
+
Args:
|
|
186
|
+
debtor_id: The ID of the debtor
|
|
187
|
+
|
|
188
|
+
Returns:
|
|
189
|
+
Tuple of (valid_managers, invalid_managers) DataFrames
|
|
190
|
+
"""
|
|
191
|
+
try:
|
|
192
|
+
request = requests.Request(
|
|
193
|
+
method='GET',
|
|
194
|
+
url=f"{self.nmbrs.base_url}debtors/{debtor_id}/managers"
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
data = self.nmbrs.get_paginated_result(request)
|
|
198
|
+
df = pd.DataFrame(data)
|
|
199
|
+
df['debtorId'] = debtor_id
|
|
200
|
+
|
|
201
|
+
valid_managers, invalid_managers = BrynQFunctions.validate_data(df=df, schema=ManagerBasicGet, debug=True)
|
|
202
|
+
|
|
203
|
+
except requests.HTTPError as e:
|
|
204
|
+
df = pd.DataFrame()
|
|
205
|
+
valid_managers = df
|
|
206
|
+
invalid_managers = df
|
|
207
|
+
|
|
208
|
+
return valid_managers, invalid_managers
|
|
209
|
+
|
|
210
|
+
def create(self, debtor_id: str, data: Dict[str, Any]):
|
|
211
|
+
"""
|
|
212
|
+
Create a new manager using Pydantic validation.
|
|
213
|
+
|
|
214
|
+
Args:
|
|
215
|
+
debtor_id: The ID of the debtor
|
|
216
|
+
data: Dictionary containing manager data with fields matching
|
|
217
|
+
the ManagerCreate schema (using camelCase field names)
|
|
218
|
+
|
|
219
|
+
Returns:
|
|
220
|
+
Response from the API
|
|
221
|
+
"""
|
|
222
|
+
# Validate with Pydantic model
|
|
223
|
+
manager_model = ManagerCreate(**data)
|
|
224
|
+
|
|
225
|
+
if self.nmbrs.mock_mode:
|
|
226
|
+
return manager_model
|
|
227
|
+
|
|
228
|
+
# Convert validated model to dict for API payload
|
|
229
|
+
payload = manager_model.dict(exclude_none=True)
|
|
230
|
+
|
|
231
|
+
# Send request
|
|
232
|
+
resp = self.nmbrs.session.post(
|
|
233
|
+
url=f"{self.nmbrs.base_url}debtors/{debtor_id}/managers",
|
|
234
|
+
json=payload,
|
|
235
|
+
timeout=self.nmbrs.timeout
|
|
236
|
+
)
|
|
237
|
+
return resp
|
|
238
|
+
|
|
239
|
+
def update(self, debtor_id: str, data: Dict[str, Any]):
|
|
240
|
+
"""
|
|
241
|
+
Update a manager using Pydantic validation.
|
|
242
|
+
|
|
243
|
+
Args:
|
|
244
|
+
debtor_id: The ID of the debtor
|
|
245
|
+
data: Dictionary containing manager data with fields matching
|
|
246
|
+
the ManagerUpdate schema (using camelCase field names)
|
|
247
|
+
|
|
248
|
+
Returns:
|
|
249
|
+
Response from the API
|
|
250
|
+
"""
|
|
251
|
+
# Validate with Pydantic model
|
|
252
|
+
manager_model = ManagerUpdate(**data)
|
|
253
|
+
|
|
254
|
+
if self.nmbrs.mock_mode:
|
|
255
|
+
return manager_model
|
|
256
|
+
|
|
257
|
+
# Convert validated model to dict for API payload
|
|
258
|
+
payload = manager_model.dict(exclude_none=True)
|
|
259
|
+
|
|
260
|
+
# Send request
|
|
261
|
+
resp = self.nmbrs.session.put(
|
|
262
|
+
url=f"{self.nmbrs.base_url}debtors/{debtor_id}/managers/{payload['managerId']}",
|
|
263
|
+
json=payload,
|
|
264
|
+
timeout=self.nmbrs.timeout
|
|
265
|
+
)
|
|
266
|
+
return resp
|
|
267
|
+
|
|
268
|
+
def delete(self, debtor_id: str, data: Dict[str, Any]):
|
|
269
|
+
"""
|
|
270
|
+
Delete a manager using Pydantic validation.
|
|
271
|
+
|
|
272
|
+
Args:
|
|
273
|
+
debtor_id: The ID of the debtor
|
|
274
|
+
data: Dictionary containing manager data with fields matching
|
|
275
|
+
the ManagerDelete schema (using camelCase field names)
|
|
276
|
+
|
|
277
|
+
Returns:
|
|
278
|
+
Response from the API
|
|
279
|
+
"""
|
|
280
|
+
# Validate with Pydantic model
|
|
281
|
+
manager_model = ManagerDelete(**data)
|
|
282
|
+
|
|
283
|
+
if self.nmbrs.mock_mode:
|
|
284
|
+
return manager_model
|
|
285
|
+
|
|
286
|
+
# Convert validated model to dict for API payload
|
|
287
|
+
payload = manager_model.dict(exclude_none=True)
|
|
288
|
+
|
|
289
|
+
# Send request
|
|
290
|
+
resp = self.nmbrs.session.delete(
|
|
291
|
+
url=f"{self.nmbrs.base_url}debtors/{debtor_id}/managers/{payload['managerId']}",
|
|
292
|
+
timeout=self.nmbrs.timeout
|
|
293
|
+
)
|
|
294
|
+
return resp
|
|
@@ -10,6 +10,7 @@ from .employees import EmployeeGet, EmployeeCreate, EmployeeUpdate, EmployeeDele
|
|
|
10
10
|
from .employment import EmploymentGet, EmploymentCreate, EmploymentUpdate, EmploymentDelete
|
|
11
11
|
from .function import FunctionGet, FunctionCreate, FunctionUpdate, FunctionDelete
|
|
12
12
|
from .hours import FixedHoursGet, FixedHoursCreate, FixedHoursUpdate, HoursDelete, VariableHoursGet, VariableHoursCreate, VariableHoursUpdate
|
|
13
|
+
from .manager import ManagerGet, ManagerBasicGet, EmployeeManagerGet, ManagerHistoricBasicGet, ManagerCreate, ManagerUpdate, ManagerDelete, UpdateEmployeeManager
|
|
13
14
|
from .salary import SalaryGet, SalaryCreate, SalaryUpdate, SalaryDelete
|
|
14
15
|
from .wagecomponents import FixedWageComponentGet, FixedWageComponentCreate, FixedWageComponentUpdate, WageComponentDelete, VariableWageComponentGet, VariableWageComponentCreate, VariableWageComponentUpdate
|
|
15
16
|
|
|
@@ -25,6 +26,8 @@ __all__ = [
|
|
|
25
26
|
'FunctionGet', 'FunctionCreate', 'FunctionUpdate', 'FunctionDelete',
|
|
26
27
|
'FixedHoursGet', 'FixedHoursCreate', 'FixedHoursUpdate', 'HoursDelete',
|
|
27
28
|
'VariableHoursGet', 'VariableHoursCreate', 'VariableHoursUpdate',
|
|
29
|
+
'ManagerGet', 'ManagerBasicGet', 'EmployeeManagerGet', 'ManagerHistoricBasicGet',
|
|
30
|
+
'ManagerCreate', 'ManagerUpdate', 'ManagerDelete', 'UpdateEmployeeManager',
|
|
28
31
|
'SalaryGet', 'SalaryCreate', 'SalaryUpdate', 'SalaryDelete',
|
|
29
32
|
'FixedWageComponentGet', 'FixedWageComponentCreate', 'FixedWageComponentUpdate', 'WageComponentDelete',
|
|
30
33
|
'VariableWageComponentGet', 'VariableWageComponentCreate', 'VariableWageComponentUpdate'
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
|
|
3
|
+
import pandas as pd
|
|
4
|
+
import pandera as pa
|
|
5
|
+
from pandera.typing import Series, String, Float, DateTime
|
|
6
|
+
import pandera.extensions as extensions
|
|
7
|
+
from brynq_sdk_functions import BrynQPanderaDataFrameModel
|
|
8
|
+
|
|
9
|
+
from typing import Optional
|
|
10
|
+
from pydantic import BaseModel, Field
|
|
11
|
+
|
|
12
|
+
# ---------------------------
|
|
13
|
+
# Get Schemas
|
|
14
|
+
# ---------------------------
|
|
15
|
+
class ManagerGet(BrynQPanderaDataFrameModel):
|
|
16
|
+
manager_id: Series[pa.String] = pa.Field(coerce=True, description="Manager unique identifier", alias="managerId")
|
|
17
|
+
number: Series[pd.Int64Dtype] = pa.Field(coerce=True, description="The manager's number", alias="number")
|
|
18
|
+
first_name: Series[pa.String] = pa.Field(coerce=True, description="The manager's first name", alias="firstName")
|
|
19
|
+
last_name: Series[pa.String] = pa.Field(coerce=True, description="The manager's last name", alias="lastName")
|
|
20
|
+
gender: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="The manager's gender", alias="gender")
|
|
21
|
+
phone_number: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="The manager's phone number", alias="phoneNumber")
|
|
22
|
+
cellphone: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="The manager's cellphone", alias="cellphone")
|
|
23
|
+
fax: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="The manager's fax", alias="fax")
|
|
24
|
+
email: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="The manager's email", alias="email")
|
|
25
|
+
department_id: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Department ID", alias="department.departmentId")
|
|
26
|
+
department_code: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True, description="Department Code", alias="department.code")
|
|
27
|
+
department_description: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Department Description", alias="department.description")
|
|
28
|
+
department_created_at: Series[datetime] = pa.Field(coerce=True, nullable=True, description="Department Created At", alias="department.createdAt")
|
|
29
|
+
function_id: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Function ID", alias="function.functionId")
|
|
30
|
+
function_code: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True, description="Function Code", alias="function.code")
|
|
31
|
+
function_description: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Function Description", alias="function.description")
|
|
32
|
+
function_created_at: Series[datetime] = pa.Field(coerce=True, nullable=True, description="Function Created At", alias="function.createdAt")
|
|
33
|
+
|
|
34
|
+
class _Annotation:
|
|
35
|
+
primary_key = "manager_id"
|
|
36
|
+
|
|
37
|
+
class ManagerBasicGet(BrynQPanderaDataFrameModel):
|
|
38
|
+
manager_id: Series[pa.String] = pa.Field(coerce=True, description="Manager unique identifier", alias="managerId")
|
|
39
|
+
first_name: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Manager first name", alias="firstName")
|
|
40
|
+
last_name: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Manager last name", alias="lastName")
|
|
41
|
+
email: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Manager email", alias="email")
|
|
42
|
+
|
|
43
|
+
class _Annotation:
|
|
44
|
+
primary_key = "manager_id"
|
|
45
|
+
|
|
46
|
+
class EmployeeManagerGet(BrynQPanderaDataFrameModel):
|
|
47
|
+
employee_id: Series[pa.String] = pa.Field(coerce=True, description="Employee ID", alias="employeeId")
|
|
48
|
+
manager_id: Series[pa.String] = pa.Field(coerce=True, description="Manager ID", alias="managerId")
|
|
49
|
+
number: Series[pd.Int64Dtype] = pa.Field(coerce=True, description="Manager number", alias="number")
|
|
50
|
+
first_name: Series[pa.String] = pa.Field(coerce=True, description="Manager first name", alias="firstName")
|
|
51
|
+
last_name: Series[pa.String] = pa.Field(coerce=True, description="Manager last name", alias="lastName")
|
|
52
|
+
gender: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Manager gender", alias="gender")
|
|
53
|
+
phone_number: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Manager phone number", alias="phoneNumber")
|
|
54
|
+
cellphone: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Manager cellphone", alias="cellphone")
|
|
55
|
+
fax: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Manager fax", alias="fax")
|
|
56
|
+
email: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Manager email", alias="email")
|
|
57
|
+
created_at: Series[datetime] = pa.Field(coerce=True, description="Manager created at", alias="createdAt")
|
|
58
|
+
period_period: Series[pd.Int64Dtype] = pa.Field(coerce=True, description="Period", alias="period.period")
|
|
59
|
+
period_year: Series[pd.Int64Dtype] = pa.Field(coerce=True, description="Year", alias="period.year")
|
|
60
|
+
department_id: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Department ID", alias="department.departmentId")
|
|
61
|
+
department_code: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True, description="Department Code", alias="department.code")
|
|
62
|
+
department_description: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Department Description", alias="department.description")
|
|
63
|
+
department_created_at: Series[datetime] = pa.Field(coerce=True, nullable=True, description="Department Created At", alias="department.createdAt")
|
|
64
|
+
function_id: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Function ID", alias="function.functionId")
|
|
65
|
+
function_code: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True, description="Function Code", alias="function.code")
|
|
66
|
+
function_description: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Function Description", alias="function.description")
|
|
67
|
+
function_created_at: Series[datetime] = pa.Field(coerce=True, nullable=True, description="Function Created At", alias="function.createdAt")
|
|
68
|
+
|
|
69
|
+
class _Annotation:
|
|
70
|
+
primary_key = "manager_id"
|
|
71
|
+
foreign_keys = {
|
|
72
|
+
"employee_id": {
|
|
73
|
+
"parent_schema": "EmployeeSchema",
|
|
74
|
+
"parent_column": "employee_id",
|
|
75
|
+
"cardinality": "N:1"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
class ManagerHistoricBasicGet(BrynQPanderaDataFrameModel):
|
|
80
|
+
employee_id: Series[pa.String] = pa.Field(coerce=True, description="Employee ID", alias="employeeId")
|
|
81
|
+
manager_id: Series[pa.String] = pa.Field(coerce=True, description="Manager ID", alias="managerId")
|
|
82
|
+
first_name: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Manager first name", alias="firstName")
|
|
83
|
+
last_name: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Manager last name", alias="lastName")
|
|
84
|
+
email: Series[pa.String] = pa.Field(coerce=True, nullable=True, description="Manager email", alias="email")
|
|
85
|
+
created_at: Series[datetime] = pa.Field(coerce=True, description="Manager created at", alias="createdAt")
|
|
86
|
+
|
|
87
|
+
class _Annotation:
|
|
88
|
+
primary_key = "manager_id"
|
|
89
|
+
foreign_keys = {
|
|
90
|
+
"employee_id": {
|
|
91
|
+
"parent_schema": "EmployeeSchema",
|
|
92
|
+
"parent_column": "employee_id",
|
|
93
|
+
"cardinality": "N:1"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
# ---------------------------
|
|
98
|
+
# Upload Schemas
|
|
99
|
+
# ---------------------------
|
|
100
|
+
class Period(BaseModel):
|
|
101
|
+
year: int = Field(..., ge=1900, le=2100, example=2021, description="Year", alias="year")
|
|
102
|
+
period: int = Field(..., ge=1, le=53, example=4, description="Period", alias="period")
|
|
103
|
+
|
|
104
|
+
class ManagerCreate(BaseModel):
|
|
105
|
+
number: int = Field(..., ge=1, example=1, description="Manager number", alias="number")
|
|
106
|
+
first_name: str = Field(..., max_length=100, example="John", description="Manager first name", alias="firstName")
|
|
107
|
+
last_name: str = Field(..., max_length=100, example="Doe", description="Manager last name", alias="lastName")
|
|
108
|
+
gender: Optional[str] = Field(None, example="Male", description="Manager gender", alias="gender")
|
|
109
|
+
phone_number: Optional[str] = Field(None, max_length=50, example="0640986755", description="Manager phone number", alias="phoneNumber")
|
|
110
|
+
cellphone: Optional[str] = Field(None, max_length=50, example="0640986755", description="Manager cellphone", alias="cellphone")
|
|
111
|
+
fax: Optional[str] = Field(None, max_length=50, description="Manager fax", alias="fax")
|
|
112
|
+
email: Optional[str] = Field(None, max_length=100, example="john.doe@company.com", description="Manager email", alias="email")
|
|
113
|
+
|
|
114
|
+
class ManagerUpdate(BaseModel):
|
|
115
|
+
manager_id: str = Field(..., example="2f6aa11c-504a-49a1-903b-e15e79965702", description="Manager ID", alias="managerId")
|
|
116
|
+
period_details: Period = Field(..., alias="periodDetails")
|
|
117
|
+
|
|
118
|
+
class ManagerDelete(BaseModel):
|
|
119
|
+
manager_id: str = Field(..., example="2f6aa11c-504a-49a1-903b-e15e79965702", description="Manager ID", alias="managerId")
|
|
120
|
+
|
|
121
|
+
class UpdateEmployeeManager(BaseModel):
|
|
122
|
+
manager_id: str = Field(..., example="2f6aa11c-504a-49a1-903b-e15e79965702", description="Manager ID", alias="managerId")
|
|
123
|
+
period_details: Period = Field(..., alias="periodDetails")
|
|
@@ -14,6 +14,7 @@ brynq_sdk_nmbrs/employees.py
|
|
|
14
14
|
brynq_sdk_nmbrs/employment.py
|
|
15
15
|
brynq_sdk_nmbrs/function.py
|
|
16
16
|
brynq_sdk_nmbrs/hours.py
|
|
17
|
+
brynq_sdk_nmbrs/manager.py
|
|
17
18
|
brynq_sdk_nmbrs/salaries.py
|
|
18
19
|
brynq_sdk_nmbrs/salary_tables.py
|
|
19
20
|
brynq_sdk_nmbrs/schedules.py
|
|
@@ -36,6 +37,7 @@ brynq_sdk_nmbrs/schemas/employees.py
|
|
|
36
37
|
brynq_sdk_nmbrs/schemas/employment.py
|
|
37
38
|
brynq_sdk_nmbrs/schemas/function.py
|
|
38
39
|
brynq_sdk_nmbrs/schemas/hours.py
|
|
40
|
+
brynq_sdk_nmbrs/schemas/manager.py
|
|
39
41
|
brynq_sdk_nmbrs/schemas/salary.py
|
|
40
42
|
brynq_sdk_nmbrs/schemas/schedules.py
|
|
41
43
|
brynq_sdk_nmbrs/schemas/wagecomponents.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{brynq_sdk_nmbrs-2.0.1 → brynq_sdk_nmbrs-2.1.0}/brynq_sdk_nmbrs.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|