fix
This commit is contained in:
parent
81a6bdd165
commit
61afaa583e
|
|
@ -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 "غير متواجـد"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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>"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue