brynq-sdk-zenegy 1.3.2__tar.gz → 1.3.4__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_zenegy-1.3.4/PKG-INFO +16 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/employees.py +35 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/employees.py +17 -11
- brynq_sdk_zenegy-1.3.4/brynq_sdk_zenegy.egg-info/PKG-INFO +16 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/setup.py +1 -1
- brynq_sdk_zenegy-1.3.2/PKG-INFO +0 -10
- brynq_sdk_zenegy-1.3.2/brynq_sdk_zenegy.egg-info/PKG-INFO +0 -10
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/__init__.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/absence.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/companies.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/cost_center.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/departments.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/employee_documents.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/global_value_sets.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/global_values.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/paychecks.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/payroll.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/payslips.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/pensions.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/__init__.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/absences.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/companies.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/company_cost_centers.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/company_departments.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/employee_documents.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/employee_pay_checks.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/employee_pensions.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/global_value_sets.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/global_values.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/payrolls.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/payslips.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/supplements_and_deductions_rates.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/supplements_and_deductions_rates.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/zenegy.py +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy.egg-info/SOURCES.txt +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy.egg-info/dependency_links.txt +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy.egg-info/not-zip-safe +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy.egg-info/requires.txt +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy.egg-info/top_level.txt +0 -0
- {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/setup.cfg +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: brynq_sdk_zenegy
|
|
3
|
+
Version: 1.3.4
|
|
4
|
+
Summary: Zenegy wrapper from BrynQ
|
|
5
|
+
Author: BrynQ
|
|
6
|
+
Author-email: support@brynq.com
|
|
7
|
+
License: BrynQ License
|
|
8
|
+
Requires-Dist: brynq-sdk-brynq>=3
|
|
9
|
+
Dynamic: author
|
|
10
|
+
Dynamic: author-email
|
|
11
|
+
Dynamic: description
|
|
12
|
+
Dynamic: license
|
|
13
|
+
Dynamic: requires-dist
|
|
14
|
+
Dynamic: summary
|
|
15
|
+
|
|
16
|
+
Zenegy wrapper from BrynQ
|
|
@@ -133,6 +133,41 @@ class Employees:
|
|
|
133
133
|
except Exception as e:
|
|
134
134
|
raise Exception(f"Failed to create employee: {str(e)}")
|
|
135
135
|
|
|
136
|
+
def create_and_patch(self, data: Dict[str, Any]) -> requests.Response:
|
|
137
|
+
"""
|
|
138
|
+
PostEmployeeAsync
|
|
139
|
+
|
|
140
|
+
This method handles employee creation in two steps due to Zenegy API limitations:
|
|
141
|
+
1. Create the employee via POST with a limited set of required fields.
|
|
142
|
+
2. Patch the newly created employee with the full dataset to update remaining fields
|
|
143
|
+
(some fields are read-only during creation but writable during updates).
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
data (Dict[str, Any]): The full employee data dictionary.
|
|
147
|
+
|
|
148
|
+
Returns:
|
|
149
|
+
requests.Response: The response from the initial POST creation request.
|
|
150
|
+
"""
|
|
151
|
+
try:
|
|
152
|
+
req_data = EmployeeCreate(**data)
|
|
153
|
+
req_body = req_data.model_dump(by_alias=True, mode='json', exclude_none=True)
|
|
154
|
+
response = self.zenegy.post(endpoint=self.endpoint.lstrip('/'), json=req_body)
|
|
155
|
+
self.zenegy.raise_for_status_with_details(response)
|
|
156
|
+
|
|
157
|
+
# Get the uid of the created employee
|
|
158
|
+
response_data = response.json()
|
|
159
|
+
if isinstance(response_data, str):
|
|
160
|
+
uid = response_data
|
|
161
|
+
elif isinstance(response_data, dict):
|
|
162
|
+
uid = response_data['data']['uid']
|
|
163
|
+
|
|
164
|
+
# Patch the employee with the fields (patch what was created is okay, overwrite with same value)
|
|
165
|
+
self.patch(uid, data)
|
|
166
|
+
|
|
167
|
+
return response
|
|
168
|
+
except Exception as e:
|
|
169
|
+
raise Exception(f"Failed to create employee: {str(e)}")
|
|
170
|
+
|
|
136
171
|
def upsert(self, data: Dict[str, Any]) -> requests.Response:
|
|
137
172
|
"""
|
|
138
173
|
UpsertEmployeeAsync
|
|
@@ -106,7 +106,7 @@ class EmployeeBase(BaseModel):
|
|
|
106
106
|
is_resigned: Optional[bool] = Field(None, alias="isResigned", description="Resigned status", example=False)
|
|
107
107
|
cpr: Optional[str] = None
|
|
108
108
|
salary_type: Optional[int] = Field(None, alias="salaryType", description="Salary type code", example=1)
|
|
109
|
-
|
|
109
|
+
mobile_phone: Optional[str] = Field(None, alias="contactPhone", description="Contact phone number", example="+45 12 34 56 78")
|
|
110
110
|
email: Optional[str] = Field(None, alias="contactEmail", description="Contact email address", example="john.doe@example.com")
|
|
111
111
|
department: Optional[Department] = None
|
|
112
112
|
cost_center: Optional[Center] = Field(None, alias="costCenter", description="Employee cost center object")
|
|
@@ -516,6 +516,7 @@ class EmployeeCreate(BaseModel):
|
|
|
516
516
|
|
|
517
517
|
class Config:
|
|
518
518
|
populate_by_name = True
|
|
519
|
+
extra = 'ignore'
|
|
519
520
|
|
|
520
521
|
|
|
521
522
|
class EmployeeUpdate(BaseModel):
|
|
@@ -616,10 +617,10 @@ class EmployeeUpdate(BaseModel):
|
|
|
616
617
|
None, alias='extraEmployeeNumber',
|
|
617
618
|
description="Secondary employee number", example="EXT-55"
|
|
618
619
|
)
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
620
|
+
department_id: Optional[int] = Field(
|
|
621
|
+
None, alias='departmentId',
|
|
622
|
+
description="Department numeric identifier", example=10
|
|
623
|
+
)
|
|
623
624
|
company_department_uid: Optional[UUID] = Field(
|
|
624
625
|
None,
|
|
625
626
|
alias='companyDepartmentUid',
|
|
@@ -1188,10 +1189,11 @@ class EmployeePatch(BaseModel):
|
|
|
1188
1189
|
labour_benefits_package_for_pension: Optional[float] = Field(default=None, alias='LabourBenefitsPackageForPension')
|
|
1189
1190
|
labour_agreement_code: Optional[str] = Field(default=None, alias='LabourAgreementCode')
|
|
1190
1191
|
extra_holiday_entitlement_per_payroll: Optional[float] = Field(default=None, alias='ExtraHolidayEntitlementPerPayroll')
|
|
1192
|
+
global_value_set_uid: Optional[str] = Field(default=None, alias='GlobalValueSetUid')
|
|
1191
1193
|
|
|
1192
1194
|
class Config:
|
|
1193
1195
|
populate_by_name = True
|
|
1194
|
-
extra = '
|
|
1196
|
+
extra = 'ignore'
|
|
1195
1197
|
|
|
1196
1198
|
class PensionBase(BaseModel):
|
|
1197
1199
|
name: Optional[str] = Field(default=None, description="Pension name", example="ATP Pension")
|
|
@@ -1778,7 +1780,7 @@ class GetEmployeeAsyncResponse(BaseModel):
|
|
|
1778
1780
|
is_resigned: Optional[bool] = None
|
|
1779
1781
|
cpr: Optional[str] = None
|
|
1780
1782
|
salary_type: Optional[int] = None
|
|
1781
|
-
|
|
1783
|
+
mobile_phone: Optional[str] = None
|
|
1782
1784
|
email: Optional[str] = None
|
|
1783
1785
|
department: Optional[CompanyDepartmentBase] = None
|
|
1784
1786
|
cost_center: Optional[Dimension] = None
|
|
@@ -1813,11 +1815,11 @@ class EmployeesGet(BrynQPanderaDataFrameModel):
|
|
|
1813
1815
|
|
|
1814
1816
|
# Contact Information
|
|
1815
1817
|
email: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Contact email", alias="contactEmail")
|
|
1816
|
-
|
|
1818
|
+
mobile_phone: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Contact phone", alias="contactPhone")
|
|
1817
1819
|
address: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Address", alias="address")
|
|
1818
1820
|
city: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="City", alias="city")
|
|
1819
1821
|
postal_number: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Postal number", alias="postalNumber")
|
|
1820
|
-
mobile_phone: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Mobile phone", alias="mobilePhone")
|
|
1822
|
+
#mobile_phone: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Mobile phone", alias="mobilePhone")
|
|
1821
1823
|
|
|
1822
1824
|
# Employment Information
|
|
1823
1825
|
employment_date: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employment date", alias="employmentDate")
|
|
@@ -1985,11 +1987,11 @@ class EmployeesGetById(BrynQPanderaDataFrameModel):
|
|
|
1985
1987
|
title: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee title", alias="title")
|
|
1986
1988
|
cpr: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="CPR number", alias="cpr")
|
|
1987
1989
|
email: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Contact email", alias="contactEmail")
|
|
1988
|
-
|
|
1990
|
+
mobile_phone: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Contact phone", alias="contactPhone")
|
|
1989
1991
|
address: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Address", alias="address")
|
|
1990
1992
|
city: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="City", alias="city")
|
|
1991
1993
|
postal_number: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Postal number", alias="postalNumber")
|
|
1992
|
-
mobile_phone: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Mobile phone", alias="mobilePhone")
|
|
1994
|
+
#mobile_phone: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Mobile phone", alias="mobilePhone")
|
|
1993
1995
|
employment_date: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employment date", alias="employmentDate")
|
|
1994
1996
|
date_of_resignation: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Date of resignation", alias="dateOfResignation")
|
|
1995
1997
|
last_work_day: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Last work day", alias="lastWorkDay")
|
|
@@ -2005,6 +2007,10 @@ class EmployeesGetById(BrynQPanderaDataFrameModel):
|
|
|
2005
2007
|
has_profile_image: Optional[Series[pd.BooleanDtype]] = pa.Field(coerce=True, nullable=True, description="Has profile image", alias="hasProfileImage")
|
|
2006
2008
|
is_resigned_within_last_year: Optional[Series[pd.BooleanDtype]] = pa.Field(coerce=True, nullable=True, description="Is resigned within last year", alias="isResignedWithinLastyear")
|
|
2007
2009
|
is_resigned_with_registrations: Optional[Series[pd.BooleanDtype]] = pa.Field(coerce=True, nullable=True, description="Is resigned with registrations", alias="isResignedWithRegistrations")
|
|
2010
|
+
konto_number: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Konto number", alias="kontoNumber")
|
|
2011
|
+
reg_number: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Registration number", alias="regNumber")
|
|
2012
|
+
country_code: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Country code", alias="country")
|
|
2013
|
+
|
|
2008
2014
|
|
|
2009
2015
|
# Nested: company
|
|
2010
2016
|
company_uid: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Company UID", alias="company__uid")
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: brynq_sdk_zenegy
|
|
3
|
+
Version: 1.3.4
|
|
4
|
+
Summary: Zenegy wrapper from BrynQ
|
|
5
|
+
Author: BrynQ
|
|
6
|
+
Author-email: support@brynq.com
|
|
7
|
+
License: BrynQ License
|
|
8
|
+
Requires-Dist: brynq-sdk-brynq>=3
|
|
9
|
+
Dynamic: author
|
|
10
|
+
Dynamic: author-email
|
|
11
|
+
Dynamic: description
|
|
12
|
+
Dynamic: license
|
|
13
|
+
Dynamic: requires-dist
|
|
14
|
+
Dynamic: summary
|
|
15
|
+
|
|
16
|
+
Zenegy wrapper from BrynQ
|
brynq_sdk_zenegy-1.3.2/PKG-INFO
DELETED
|
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_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/company_cost_centers.py
RENAMED
|
File without changes
|
{brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/company_departments.py
RENAMED
|
File without changes
|
{brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/employee_documents.py
RENAMED
|
File without changes
|
{brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/employee_pay_checks.py
RENAMED
|
File without changes
|
{brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/employee_pensions.py
RENAMED
|
File without changes
|
{brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/global_value_sets.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|