diff --git a/addons_extensions/hr_employee_extended/__init__.py b/addons_extensions/hr_employee_extended/__init__.py
index 473833440..6ed2c210b 100644
--- a/addons_extensions/hr_employee_extended/__init__.py
+++ b/addons_extensions/hr_employee_extended/__init__.py
@@ -1 +1,2 @@
-from . import models,wizards
\ No newline at end of file
+from . import models
+from . import wizards
\ No newline at end of file
diff --git a/addons_extensions/hr_employee_extended/__manifest__.py b/addons_extensions/hr_employee_extended/__manifest__.py
index 9a6872b82..ad173df00 100644
--- a/addons_extensions/hr_employee_extended/__manifest__.py
+++ b/addons_extensions/hr_employee_extended/__manifest__.py
@@ -18,7 +18,7 @@
'version': '0.1',
# any module necessary for this one to work correctly
- 'depends': ['base','hr','account','mail','hr_skills'],
+ 'depends': ['base','hr','account','mail','hr_skills', 'hr_contract'],
# always loaded
'data': [
diff --git a/addons_extensions/hr_employee_extended/models/hr_employee.py b/addons_extensions/hr_employee_extended/models/hr_employee.py
index 781965098..0d980fa55 100644
--- a/addons_extensions/hr_employee_extended/models/hr_employee.py
+++ b/addons_extensions/hr_employee_extended/models/hr_employee.py
@@ -3,6 +3,8 @@
from odoo import _, api, fields, models
from dateutil.relativedelta import relativedelta
from odoo.exceptions import ValidationError
+from datetime import datetime, timedelta
+from calendar import monthrange
class HrEmployeeBase(models.AbstractModel):
@@ -47,10 +49,41 @@ class HrEmployeeBase(models.AbstractModel):
current_date = fields.Date.today()
# Calculate the difference between current date and doj
- delta = relativedelta(current_date, record.doj)
+
+ def calculate_experience(joined_date, current_date):
+ # Start by calculating the difference in years and months
+ delta_years = current_date.year - joined_date.year
+ delta_months = current_date.month - joined_date.month
+ delta_days = current_date.day - joined_date.day
+
+ # Adjust months and years if necessary
+ if delta_months < 0:
+ delta_years -= 1
+ delta_months += 12
+
+ # Handle day adjustment if necessary (i.e., current day is less than the joined day)
+ if delta_days < 0:
+ # Subtract one month to adjust
+ delta_months -= 1
+ # Get the number of days in the previous month to add to the days
+ if current_date.month == 1:
+ days_in_last_month = monthrange(current_date.year - 1, 12)[1]
+ else:
+ days_in_last_month = monthrange(current_date.year, current_date.month - 1)[1]
+ delta_days += days_in_last_month
+
+ # Final adjustment: if months become negative after adjusting days, fix that
+ if delta_months < 0:
+ delta_years -= 1
+ delta_months += 12
+
+ return delta_years, delta_months, delta_days
+
+ # Calculate the experience
+ years, months, days = calculate_experience(record.doj, current_date)
# Format the experience as 'X years Y months Z days'
- experience_str = f"{delta.years} years {delta.months} months {delta.days} days"
+ experience_str = f"{years} years {months} months {days} days"
record.current_company_exp = experience_str
else:
record.current_company_exp = '0 years 0 months 0 days'
diff --git a/addons_extensions/hr_payroll/views/hr_payroll_menu.xml b/addons_extensions/hr_payroll/views/hr_payroll_menu.xml
index 452830094..645afe5d5 100644
--- a/addons_extensions/hr_payroll/views/hr_payroll_menu.xml
+++ b/addons_extensions/hr_payroll/views/hr_payroll_menu.xml
@@ -119,11 +119,11 @@
parent="menu_hr_payroll_payslips"/>
-
+
+
+
+
+
-
+
+
+
+
+
+
diff --git a/third_party_addons/hr_biometric_attendance/models/biometric_device_details.py b/third_party_addons/hr_biometric_attendance/models/biometric_device_details.py
index 119f8f7f1..6fae62803 100644
--- a/third_party_addons/hr_biometric_attendance/models/biometric_device_details.py
+++ b/third_party_addons/hr_biometric_attendance/models/biometric_device_details.py
@@ -462,6 +462,24 @@ class BiometricDeviceDetails(models.Model):
raise UserError(_(
"Please Check the Connection"))
+ def button_door_unlock(self):
+ for info in self:
+ machine_ip = info.device_ip
+ zk_port = info.port_number
+ try:
+ # Connecting with the device with the ip and port provided
+ zk = ZK(machine_ip, port=zk_port, timeout=15,
+ password=self.device_password,
+ force_udp=False, ommit_ping=False)
+ except NameError:
+ raise UserError(
+ _("Pyzk module not Found. Please install it"
+ "with 'pip3 install pyzk'."))
+ conn = self.device_connect(zk)
+ if conn:
+ conn.unlock()
+
+
def get_all_users(self):
"""Function to get all user's details"""
for info in self: