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.
Files changed (40) hide show
  1. brynq_sdk_zenegy-1.3.4/PKG-INFO +16 -0
  2. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/employees.py +35 -0
  3. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/employees.py +17 -11
  4. brynq_sdk_zenegy-1.3.4/brynq_sdk_zenegy.egg-info/PKG-INFO +16 -0
  5. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/setup.py +1 -1
  6. brynq_sdk_zenegy-1.3.2/PKG-INFO +0 -10
  7. brynq_sdk_zenegy-1.3.2/brynq_sdk_zenegy.egg-info/PKG-INFO +0 -10
  8. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/__init__.py +0 -0
  9. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/absence.py +0 -0
  10. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/companies.py +0 -0
  11. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/cost_center.py +0 -0
  12. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/departments.py +0 -0
  13. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/employee_documents.py +0 -0
  14. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/global_value_sets.py +0 -0
  15. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/global_values.py +0 -0
  16. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/paychecks.py +0 -0
  17. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/payroll.py +0 -0
  18. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/payslips.py +0 -0
  19. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/pensions.py +0 -0
  20. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/__init__.py +0 -0
  21. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/absences.py +0 -0
  22. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/companies.py +0 -0
  23. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/company_cost_centers.py +0 -0
  24. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/company_departments.py +0 -0
  25. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/employee_documents.py +0 -0
  26. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/employee_pay_checks.py +0 -0
  27. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/employee_pensions.py +0 -0
  28. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/global_value_sets.py +0 -0
  29. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/global_values.py +0 -0
  30. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/payrolls.py +0 -0
  31. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/payslips.py +0 -0
  32. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/schemas/supplements_and_deductions_rates.py +0 -0
  33. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/supplements_and_deductions_rates.py +0 -0
  34. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy/zenegy.py +0 -0
  35. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy.egg-info/SOURCES.txt +0 -0
  36. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy.egg-info/dependency_links.txt +0 -0
  37. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy.egg-info/not-zip-safe +0 -0
  38. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy.egg-info/requires.txt +0 -0
  39. {brynq_sdk_zenegy-1.3.2 → brynq_sdk_zenegy-1.3.4}/brynq_sdk_zenegy.egg-info/top_level.txt +0 -0
  40. {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
- contact_phone: Optional[str] = Field(None, alias="contactPhone", description="Contact phone number", example="+45 12 34 56 78")
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
- # department_id: Optional[int] = Field(
620
- # None, alias='departmentId',
621
- # description="Department numeric identifier", example=10
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 = 'allow'
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
- contact_phone: Optional[str] = None
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
- contact_phone: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Contact phone", alias="contactPhone")
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
- contact_phone: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Contact phone", alias="contactPhone")
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
@@ -2,7 +2,7 @@ from setuptools import setup, find_namespace_packages
2
2
 
3
3
  setup(
4
4
  name='brynq_sdk_zenegy',
5
- version='1.3.2',
5
+ version='1.3.4',
6
6
  description='Zenegy wrapper from BrynQ',
7
7
  long_description='Zenegy wrapper from BrynQ',
8
8
  author='BrynQ',
@@ -1,10 +0,0 @@
1
- Metadata-Version: 1.0
2
- Name: brynq_sdk_zenegy
3
- Version: 1.3.2
4
- Summary: Zenegy wrapper from BrynQ
5
- Home-page: UNKNOWN
6
- Author: BrynQ
7
- Author-email: support@brynq.com
8
- License: BrynQ License
9
- Description: Zenegy wrapper from BrynQ
10
- Platform: UNKNOWN
@@ -1,10 +0,0 @@
1
- Metadata-Version: 1.0
2
- Name: brynq-sdk-zenegy
3
- Version: 1.3.2
4
- Summary: Zenegy wrapper from BrynQ
5
- Home-page: UNKNOWN
6
- Author: BrynQ
7
- Author-email: support@brynq.com
8
- License: BrynQ License
9
- Description: Zenegy wrapper from BrynQ
10
- Platform: UNKNOWN