add some data api get attantc
This commit is contained in:
parent
d5f37217be
commit
07775e6682
|
|
@ -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]
|
||||
|
|
|
|||
Loading…
Reference in New Issue