This commit is contained in:
Bakry 2025-01-06 17:48:04 +03:00
parent 81a6bdd165
commit 61afaa583e
3 changed files with 114 additions and 3 deletions

View File

@ -2233,3 +2233,30 @@ msgstr "للأسف، لرفض المدير المباشر '%s' فقط او مد
msgid "Sorry,You must enter the Names Of Employees!" msgid "Sorry,You must enter the Names Of Employees!"
msgstr "للأسف، يجب ادخال اسماء الموظفين!" msgstr "للأسف، يجب ادخال اسماء الموظفين!"
#. module: attendances
#: model:ir.model.fields,field_description:attendances.field_hr_employee__hr_presence_state
#: model:ir.model.fields,field_description:attendances.field_hr_employee_base__hr_presence_state
#: model:ir.model.fields,field_description:attendances.field_hr_employee_public__hr_presence_state
msgid "Attendance State"
msgstr "حالة الحضور"
#. module: attendances
#: model:ir.model.fields.selection,name:attendances.selection__hr_employee__hr_icon_display__presence_present
#: model:ir.model.fields.selection,name:attendances.selection__hr_employee__hr_presence_state__present
#: model:ir.model.fields.selection,name:attendances.selection__hr_employee_base__hr_icon_display__presence_present
#: model:ir.model.fields.selection,name:attendances.selection__hr_employee_base__hr_presence_state__present
#: model:ir.model.fields.selection,name:attendances.selection__hr_employee_public__hr_icon_display__presence_present
#: model:ir.model.fields.selection,name:attendances.selection__hr_employee_public__hr_presence_state__present
msgid "Present"
msgstr "متواجـد"
#. module: attendances
#: model:ir.model.fields.selection,name:attendances.selection__hr_employee__hr_icon_display__presence_to_define
#: model:ir.model.fields.selection,name:attendances.selection__hr_employee__hr_presence_state__to_define
#: model:ir.model.fields.selection,name:attendances.selection__hr_employee_base__hr_icon_display__presence_to_define
#: model:ir.model.fields.selection,name:attendances.selection__hr_employee_base__hr_presence_state__to_define
#: model:ir.model.fields.selection,name:attendances.selection__hr_employee_public__hr_icon_display__presence_to_define
#: model:ir.model.fields.selection,name:attendances.selection__hr_employee_public__hr_presence_state__to_define
msgid "Not Present"
msgstr "غير متواجـد"

View File

@ -1,10 +1,62 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from datetime import datetime, timedelta from datetime import datetime, timedelta, date
from odoo import models, fields, api, _ from odoo import models, fields, api, _
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT as DATETIME_FORMAT from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT as DATETIME_FORMAT
from ast import literal_eval
class HrEmployeeBase(models.AbstractModel):
_inherit = 'hr.employee.base'
#################
hr_presence_state = fields.Selection([
('present', 'Present'), #('absent', 'Absent'),
('to_define', 'Not Present')],string='Attendance State', compute='_compute_presence_state', default='to_define',store=True)
hr_icon_display = fields.Selection([
('presence_present', 'Present'),
('presence_absent_active', 'Present but not active'),
('presence_absent', 'Absent'),
('presence_to_define', 'Not Present'),
('presence_undetermined', 'Undetermined')], compute='_compute_presence_icon')
@api.depends('resource_calendar_id', 'hr_presence_state')
def _compute_presence_icon(self):#copy form base hr overritten
for employee in self:
if employee.hr_presence_state == 'present':
icon = 'presence_present'
elif employee.hr_presence_state == 'absent':
icon = 'presence_absent'
else:
if employee.user_id:
icon = 'presence_to_define'
else:
icon = 'presence_undetermined'
employee.hr_icon_display = icon
def _compute_presence_state(self):#copy form base hr overritten
# Check on login
check_login = literal_eval(self.env['ir.config_parameter'].sudo().get_param('hr.hr_presence_control_login', 'False'))
employee_to_check_working = self.filtered(lambda e: e.user_id.im_status == 'offline')
#working_now_list = employee_to_check_working._get_employee_working_now()
t_date = date.today()
for employee in self:
attendance = self.env['attendance.attendance'].sudo().search([
('employee_id', '=', employee.id),('action_date', '=', t_date)], limit=1)
state = 'to_define'
if check_login:
if attendance:
state = 'present'
else:
state = 'to_define'
#if employee.user_id.im_status == 'offline' and not attendance:
# state = 'absent'
employee.hr_presence_state = state
###############
class HrAttendances(models.Model): class HrAttendances(models.Model):
@ -368,7 +420,7 @@ class ActionReason(models.Model):
class Attendance(models.Model): class Attendance(models.Model):
_name = 'attendance.attendance' _name = 'attendance.attendance'
_rec_name = 'employee_id' _rec_name = 'employee_id'
_order = 'name DESC' _order = 'action_date DESC'
employee_id = fields.Many2one('hr.employee', string="Employee", domain="[('state', '=', 'open')]", required=True, employee_id = fields.Many2one('hr.employee', string="Employee", domain="[('state', '=', 'open')]", required=True,
ondelete='cascade', index=True) ondelete='cascade', index=True)

View File

@ -2274,7 +2274,7 @@ msgstr "ايميل الموارد البشرية"
#. module: hr_base #. module: hr_base
#: model:ir.model,name:hr_base.model_hr_employee_history #: model:ir.model,name:hr_base.model_hr_employee_history
msgid "HR Employee History" msgid "HR Employee History"
msgstr "" msgstr "الخبرات السابقة"
#. module: hr_base #. module: hr_base
#: model:ir.model,name:hr_base.model_hr_insurance #: model:ir.model,name:hr_base.model_hr_insurance
@ -4719,4 +4719,36 @@ msgstr "مدير المالية"
msgid "Cyber Security" msgid "Cyber Security"
msgstr "الآمن السيبراني" msgstr "الآمن السيبراني"
#. module: hr
#: model_terms:ir.ui.view,arch_db:hr.hr_employee_public_view_kanban
#: model_terms:ir.ui.view,arch_db:hr.hr_kanban_view_employees
msgid "<span class=\"fa fa-circle text-success\" role=\"img\" aria-label=\"Present\" title=\"Present\" name=\"presence_present\">\n"
" </span>"
msgstr "<span class=\"fa fa-circle text-success\" role=\"img\" aria-label=\"Present\" title=\"متواجــد\" name=\"presence_present\">\n"
" </span>"
#. module: hr
#: model_terms:ir.ui.view,arch_db:hr.hr_employee_public_view_kanban
#: model_terms:ir.ui.view,arch_db:hr.hr_kanban_view_employees
msgid "<span class=\"fa fa-circle text-warning\" role=\"img\" aria-label=\"To define\" title=\"To define\" name=\"presence_to_define\">\n"
" </span>"
msgstr "<span class=\"fa fa-circle text-warning\" role=\"img\" aria-label=\"To define\" title=\"غير متواجــد\" name=\"presence_to_define\">\n"
" </span>"
#. module: hr
#: model_terms:ir.ui.view,arch_db:hr.hr_employee_public_view_kanban
#: model_terms:ir.ui.view,arch_db:hr.hr_kanban_view_employees
msgid "<span class=\"fa fa-circle-o text-muted\" role=\"img\" aria-label=\"Absent\" title=\"Absent\" name=\"presence_absent\">\n"
" </span>"
msgstr "<span class=\"fa fa-circle-o text-muted\" role=\"img\" aria-label=\"Absent\" title=\"غائب\" name=\"presence_absent\">\n"
" </span>"
#. module: hr
#: model_terms:ir.ui.view,arch_db:hr.hr_employee_public_view_kanban
#: model_terms:ir.ui.view,arch_db:hr.hr_kanban_view_employees
msgid "<span class=\"fa fa-circle-o text-success\" role=\"img\" aria-label=\"Present but not active\" title=\"Present but not active\" name=\"presence_absent_active\">\n"
" </span>"
msgstr "<span class=\"fa fa-circle-o text-success\" role=\"img\" aria-label=\"Present but not active\" title=\"غير نشط\" name=\"presence_absent_active\">\n"
" </span>"