Odoo JS/XML Example Sign in Sign out Attedance

Odoo 10

Probuse Admin

 Dropbox Module: Dropbox/Help OE/Odoo_JS_10/sign_in_out and Dropbox/Help OE/Odoo_JS_10/display_clock

XML File

<template >

 <t t-name="sign_in_out.SignUp">

 <span style="color:white"><a class="fa btn-primary fa-sign-out fa-sign-in"/></span>


 <t t-name="SignOut">

 <span style="color:white"><a class="fa btn-primary fa-sign-out fa-sign-out"/></span>



JS File

odoo.define('sign_in_out',function(require) {

 "use strict";

var Session = require('web.session');

var core = require('web.core');

var SystrayMenu = require('web.SystrayMenu');

var Widget = require('web.Widget');

var Model = require('web.Model');

var chat_manager = require('mail.chat_manager');

var QWeb = core.qweb;

var _t = core._t;

var SignUp = Widget.extend({


 init: function() {


 events: {

 "click": "on_click",


 on_click: function (event) {

 var self = this;

 var atendance = new Model('hr.attendance');

 var sign = new Model('sign.out');






return SignUp;


Python File

from datetime import datetime

from odoo import models, fields, api, exceptions, _, SUPERUSER_ID

class SigninOut(models.Model):

_name = 'sign.out'


def login(self):

employee = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)

action_date = fields.Datetime.now()

if employee.attendance_state != 'checked_in':

vals = {

'employee_id': self.env.uid,

'check_in': action_date,



return True


attendance = self.env['hr.attendance'].search([('employee_id', '=', self.env.uid), ('check_out', '=', False)], limit=1)

if attendance:

attendance.check_out = action_date


raise exceptions.UserError(_('Cannot perform check out on %(empl_name)s, could not find corresponding check in. '

'Your attendances have probably been modified manually by human resources.') % {'empl_name': self.name, })

            return True