brynq-sdk-bob 2.6.7__tar.gz → 2.7.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_bob-2.6.7 → brynq_sdk_bob-2.7.0}/PKG-INFO +1 -1
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/__init__.py +5 -4
- brynq_sdk_bob-2.7.0/brynq_sdk_bob/reports.py +38 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/schemas/people.py +8 -2
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob.egg-info/PKG-INFO +1 -1
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob.egg-info/SOURCES.txt +1 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/setup.py +1 -1
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/bank.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/company.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/custom_tables.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/documents.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/employment.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/named_lists.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/payments.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/payroll_history.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/people.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/salaries.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/schemas/__init__.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/schemas/bank.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/schemas/custom_tables.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/schemas/employment.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/schemas/named_lists.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/schemas/payments.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/schemas/payroll_history.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/schemas/salary.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/schemas/timeoff.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/schemas/work.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/timeoff.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob/work.py +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob.egg-info/dependency_links.txt +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob.egg-info/not-zip-safe +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob.egg-info/requires.txt +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/brynq_sdk_bob.egg-info/top_level.txt +0 -0
- {brynq_sdk_bob-2.6.7 → brynq_sdk_bob-2.7.0}/setup.cfg +0 -0
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import base64
|
|
2
|
-
import
|
|
3
|
-
from typing import Union, List, Optional, Literal
|
|
4
|
-
import pandas as pd
|
|
2
|
+
from typing import List, Optional, Literal
|
|
5
3
|
import requests
|
|
6
4
|
import os
|
|
5
|
+
from .reports import Reports
|
|
7
6
|
from brynq_sdk_brynq import BrynQ
|
|
8
|
-
from brynq_sdk_functions import Functions
|
|
9
7
|
from .bank import Bank
|
|
10
8
|
from .company import Company
|
|
11
9
|
from .documents import CustomDocuments
|
|
@@ -17,6 +15,7 @@ from .salaries import Salaries
|
|
|
17
15
|
from .timeoff import TimeOff
|
|
18
16
|
from .work import Work
|
|
19
17
|
from .custom_tables import CustomTables
|
|
18
|
+
from .payroll_history import History
|
|
20
19
|
|
|
21
20
|
class Bob(BrynQ):
|
|
22
21
|
def __init__(self, system_type: Optional[Literal['source', 'target']] = None, test_environment: bool = True, debug: bool = False, target_system: str = None):
|
|
@@ -40,6 +39,8 @@ class Bob(BrynQ):
|
|
|
40
39
|
self.companies = Company(self)
|
|
41
40
|
self.named_lists = NamedLists(self)
|
|
42
41
|
self.custom_tables = CustomTables(self)
|
|
42
|
+
self.payroll_history = History(self)
|
|
43
|
+
self.reports = Reports(self)
|
|
43
44
|
self.data_interface_id = os.getenv("DATA_INTERFACE_ID")
|
|
44
45
|
self.debug = debug
|
|
45
46
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
from io import BytesIO
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
import pandas as pd
|
|
6
|
+
from brynq_sdk_functions import Functions
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Reports:
|
|
10
|
+
def __init__(self, bob):
|
|
11
|
+
self.bob = bob
|
|
12
|
+
|
|
13
|
+
def get(self) -> pd.DataFrame:
|
|
14
|
+
resp = self.bob.session.get(url=f"{self.bob.base_url}company/reports", timeout=self.bob.timeout)
|
|
15
|
+
resp.raise_for_status()
|
|
16
|
+
data = resp.json()
|
|
17
|
+
df = pd.json_normalize(
|
|
18
|
+
data,
|
|
19
|
+
record_path='views'
|
|
20
|
+
)
|
|
21
|
+
# df = self.bob.rename_camel_columns_to_snake_case(df)
|
|
22
|
+
# valid_documents, invalid_documents = Functions.validate_data(df=df, schema=DocumentsSchema, debug=True)
|
|
23
|
+
|
|
24
|
+
return df
|
|
25
|
+
|
|
26
|
+
def download(self, report_id: Optional[str] = None, report_name: Optional[str] = None) -> dict:
|
|
27
|
+
if report_id:
|
|
28
|
+
url = f"{self.bob.base_url}company/reports/{report_id}"
|
|
29
|
+
elif report_name:
|
|
30
|
+
url = f"{self.bob.base_url}company/reports/download/{report_name}"
|
|
31
|
+
else:
|
|
32
|
+
raise ValueError("Either report_id or report_name must be provided")
|
|
33
|
+
|
|
34
|
+
resp = self.bob.session.get(url=url, timeout=self.bob.timeout)
|
|
35
|
+
resp.raise_for_status()
|
|
36
|
+
data = resp.json()
|
|
37
|
+
|
|
38
|
+
return data
|
|
@@ -220,10 +220,16 @@ class PeopleSchema(BrynQPanderaDataFrameModel):
|
|
|
220
220
|
payroll_employment_weekly_hours: Optional[Series[Float]] = pa.Field(coerce=True, nullable=True, description="Weekly Hours", alias="payroll.employment.weeklyHours")
|
|
221
221
|
|
|
222
222
|
# Salary information
|
|
223
|
-
|
|
223
|
+
# SOLUTION NOW FOR MFT: TODO: FIX UNNESTING (including .value.value)
|
|
224
|
+
payroll_salary_monthly_get: Optional[Series[str]] = pa.Field(coerce=True, nullable=True, description="Base salary (monthly), used for getting nested json", alias="payroll.salary.monthlyPayment")
|
|
225
|
+
payroll_salary_monthly_payment: Optional[Series[Float]] = pa.Field(coerce=True, nullable=True, description="Base salary (monthly)", alias="payroll.salary.monthlyPayment.value")
|
|
226
|
+
payroll_salary_monthly_payment_currency: Optional[Series[str]] = pa.Field(coerce=True, nullable=True, description="Base salary (monthly) currency", alias="payroll.salary.monthlyPayment.currency")
|
|
227
|
+
|
|
224
228
|
payroll_salary_yearly_get: Optional[Series[str]] = pa.Field(coerce=True, nullable=True, description="Base salary (yearly), used for getting nested json", alias="payroll.salary.yearlyPayment")
|
|
225
229
|
payroll_salary_yearly_payment: Optional[Series[Float]] = pa.Field(coerce=True, nullable=True, description="Base salary (yearly)", alias="payroll.salary.yearlyPayment.value")
|
|
226
|
-
payroll_salary_yearly_payment_currency: Optional[Series[str]] = pa.Field(coerce=True, nullable=True, description="Base salary (yearly)", alias="payroll.salary.yearlyPayment.currency")
|
|
230
|
+
payroll_salary_yearly_payment_currency: Optional[Series[str]] = pa.Field(coerce=True, nullable=True, description="Base salary (yearly) currency", alias="payroll.salary.yearlyPayment.currency")
|
|
231
|
+
|
|
232
|
+
payroll_salary_active_effective_date: Optional[Series[str]] = pa.Field(coerce=True, nullable=True, description="effective date payment", alias="payroll.salary.activeEffectiveDate")
|
|
227
233
|
payroll_salary_payment: Optional[Series[Float]] = pa.Field(coerce=True, nullable=True, description="Base Salary", alias="payroll.salary.payment")
|
|
228
234
|
|
|
229
235
|
# Emergency contact
|
|
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
|