add some data api get attantc

This commit is contained in:
odex 2024-07-29 17:59:37 +03:00
parent d5f37217be
commit 07775e6682
1 changed files with 52 additions and 26 deletions

View File

@ -4,8 +4,8 @@ import calendar
from odoo import http, tools
from odoo.http import request, Response
from odoo.addons.auth_signup.models.res_users import SignupError
from odoo.exceptions import UserError ,AccessError, ValidationError
from datetime import datetime ,timedelta
from odoo.exceptions import UserError , AccessError, ValidationError
from datetime import datetime , timedelta
import base64
from ...validator import validator
from ...http_helper import http_helper
@ -270,55 +270,77 @@ class AttendanceController(http.Controller):
records = http.request.env['hr.attendance.transaction'].search([('employee_id', '=', employee.id),
('date', '>=', str(month_start)), ('date', '<=', str(month_end))])
# records = http.request.env['hr.attendance.transaction'].search([('employee_id','=',employee.id),
# ('normal_leave', '=', False),('public_holiday', '=', False), ('is_absent','=',False),('date', '>=', str(month_start)), ('date', '<=', str(month_end))])
# ('normal_leave', '=', True),('public_holiday', '=', True), ('is_absent','=',True),('date', '>=', str(month_start)), ('date', '<=', str(month_end))])
li = []
if records:
total_plan_hours = sum(records.mapped('plan_hours') )
total_office_hours = sum(records.mapped('office_hours') )
total_public_holiday = sum(records.filtered(lambda rec:rec.public_holiday == True).mapped('plan_hours'))
total_normal_leave = sum(records.filtered(lambda rec:rec.normal_leave == True).mapped('plan_hours'))
total_absent = sum(records.filtered(lambda rec:rec.is_absent == True).mapped('plan_hours') )
total_approve_lateness = sum(records.filtered(lambda rec:rec.approve_lateness == True).mapped('lateness') )
total_early_exit = sum(records.filtered(lambda rec:rec.approve_exit_out == True).mapped('early_exit') )
total_months = {
'total_plan_hours':self.convert_float_total_time(total_plan_hours),
'tr_total_plan_hours':self.get_translation_field(records[0], 'plan_hours'),
'total_office_hours':self.convert_float_total_time(total_office_hours),
'tr_total_office_hours':self.get_translation_field(records[0], 'office_hours'),
'total_public_holiday':self.convert_float_total_time(total_public_holiday),
'tr_total_public_holiday':self.get_translation_field(records[0], 'public_holiday'),
'total_normal_leave':self.convert_float_total_time(total_normal_leave),
'tr_total_normal_leave':self.get_translation_field(records[0], 'normal_leave'),
'total_absent':self.convert_float_total_time(total_absent),
'tr_total_absent':self.get_translation_field(records[0], 'is_absent'),
'total_approve_lateness':self.convert_float_total_time(total_approve_lateness),
'tr_total_approve_lateness':self.get_translation_field(records[0], 'approve_lateness'),
'total_early_exit':self.convert_float_total_time(total_early_exit),
'tr_total_early_exit':self.get_translation_field(records[0], 'early_exit'),
}
for rec in records:
attendance = {
'id':rec.id,
'date':str(rec.date),
'tr_date':self.get_translation_field(rec,'date'),
'tr_date':self.get_translation_field(rec, 'date'),
'first_check_in':self.convert_float_2time(rec.sign_in),
'tr_sign_in':self.get_translation_field(rec,'sign_in'),
'tr_sign_in':self.get_translation_field(rec, 'sign_in'),
'last_check_out':self.convert_float_2time(rec.sign_out),
'tr_sign_out':self.get_translation_field(rec,'sign_out'),
'tr_sign_out':self.get_translation_field(rec, 'sign_out'),
'total_time':self.convert_float_2time(rec.office_hours),
'tr_office_hours':self.get_translation_field(rec,'office_hours'),
'tr_office_hours':self.get_translation_field(rec, 'office_hours'),
'total_lateness_hours':self.convert_float_2time(rec.lateness),
'approve_lateness':rec.approve_lateness,
'tr_approve_lateness':self.get_translation_field(rec,'approve_lateness'),
'tr_approve_lateness':self.get_translation_field(rec, 'approve_lateness'),
'total_early_exit_hours':self.convert_float_2time(rec.early_exit),
'tr_total_early_exit_hours':self.get_translation_field(rec,'early_exit'),
'tr_total_early_exit_hours':self.get_translation_field(rec, 'early_exit'),
'early_exit':rec.approve_exit_out,
'tr_early_exit':self.get_translation_field(rec,'approve_exit_out'),
'tr_early_exit':self.get_translation_field(rec, 'approve_exit_out'),
'total_permission_hours':self.convert_float_2time(rec.total_permission_hours),
'tr_total_permission_hours':self.get_translation_field(rec,'total_permission_hours'),
'tr_total_permission_hours':self.get_translation_field(rec, 'total_permission_hours'),
'permission':rec.approve_personal_permission,
'tr_permission':self.get_translation_field(rec,'approve_personal_permission'),
'tr_permission':self.get_translation_field(rec, 'approve_personal_permission'),
'total_mission_hours':self.convert_float_2time(rec.total_mission_hours),
'tr_total_mission_hours':self.get_translation_field(rec,'total_mission_hours'),
'tr_total_mission_hours':self.get_translation_field(rec, 'total_mission_hours'),
'mission':rec.is_official,
'tr_mission':self.get_translation_field(rec,'is_official'),
'tr_mission':self.get_translation_field(rec, 'is_official'),
'is_absent':rec.is_absent,
'tr_is_absent':self.get_translation_field(rec,'is_absent'),
'tr_is_absent':self.get_translation_field(rec, 'is_absent'),
'normal_leave':rec.normal_leave,
'tr_normal_leave':self.get_translation_field(rec,'normal_leave'),
'tr_normal_leave':self.get_translation_field(rec, 'normal_leave'),
'public_holiday':rec.public_holiday,
'tr_public_holiday':self.get_translation_field(rec,'public_holiday'),
'tr_public_holiday':self.get_translation_field(rec, 'public_holiday'),
}
li.append(attendance)
return http_helper.response(message="Data Found", data={'attendaces': li})
return http_helper.response(message="Data Found", data={'total_months':total_months,'attendaces': li})
except (UserError, AccessError, ValidationError, Exception, Warning) as e:
http.request._cr.rollback()
error = str(e)
@ -328,6 +350,7 @@ class AttendanceController(http.Controller):
_logger.error(str(e))
message = validator.get_server_error(e, user)
return http_helper.errcode(code=403, message=message)
# Get shift
@http.route(['/rest_api/v2/shifts'], type='http', auth='none', csrf=False, methods=['GET'])
def get_shift(self, **kw):
@ -394,8 +417,8 @@ class AttendanceController(http.Controller):
if now > last:
diff = now - last
diff = diff.seconds / 60
zone = http.request.env['attendance.zone'].search([('employee_ids', 'in', employee.id)],limit=1)
zone_general = http.request.env['attendance.zone'].search([('general', '=', True)],limit=1)
zone = http.request.env['attendance.zone'].search([('employee_ids', 'in', employee.id)], limit=1)
zone_general = http.request.env['attendance.zone'].search([('general', '=', True)], limit=1)
auto = zone.auto_checkout or zone_general.auto_checkout or request.env.user.company_id.auto_checkout or 20
if diff >= auto:
attendance = http.request.env['attendance.attendance'].create({
@ -464,11 +487,14 @@ class AttendanceController(http.Controller):
'latitude':latitude,
})
def convert_float_2time(self,time):
def convert_float_2time(self, time):
td = timedelta(hours=time)
dt = datetime.min + td
time = "{:%H:%M}".format(dt)
return time
def get_translation_field(self,rec,field):
return request.env['ir.translation'].get_field_string(rec._name)[field]
def convert_float_total_time(self, time):
return '{0:02.0f}:{1:02.0f}'.format(*divmod(time * 60, 60))
def get_translation_field(self, rec, field):
return request.env['ir.translation'].get_field_string(rec._name)[field]