2009-10-13 05:58:37 +00:00
# -*- coding: utf-8 -*-
2006-12-07 13:41:40 +00:00
##############################################################################
2010-08-19 11:51:57 +00:00
#
2009-10-14 11:15:34 +00:00
# OpenERP, Open Source Management Solution
2010-01-12 09:18:39 +00:00
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
2008-06-16 11:00:21 +00:00
#
2008-11-03 19:18:56 +00:00
# This program is free software: you can redistribute it and/or modify
2009-10-14 11:15:34 +00:00
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
2006-12-07 13:41:40 +00:00
#
2008-11-03 19:18:56 +00:00
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2009-10-14 11:15:34 +00:00
# GNU Affero General Public License for more details.
2006-12-07 13:41:40 +00:00
#
2009-10-14 11:15:34 +00:00
# You should have received a copy of the GNU Affero General Public License
2010-08-19 11:51:57 +00:00
# along with this program. If not, see <http://www.gnu.org/licenses/>.
2006-12-07 13:41:40 +00:00
#
##############################################################################
2009-04-24 13:20:22 +00:00
import datetime
2012-12-06 14:56:32 +00:00
import time
2014-04-15 19:19:11 +00:00
from openerp . osv import osv
2012-12-06 14:56:32 +00:00
from openerp . report import report_sxw
2006-12-07 13:41:40 +00:00
2014-04-15 19:19:11 +00:00
2006-12-07 13:41:40 +00:00
class attendance_print ( report_sxw . rml_parse ) :
2010-07-03 10:21:52 +00:00
2008-07-22 15:11:28 +00:00
def __init__ ( self , cr , uid , name , context ) :
2009-10-09 11:49:00 +00:00
super ( attendance_print , self ) . __init__ ( cr , uid , name , context = context )
2008-07-22 15:11:28 +00:00
self . localcontext . update ( {
' time ' : time ,
' lst ' : self . _lst ,
' total ' : self . _lst_total ,
2009-04-24 13:20:22 +00:00
' get_employees ' : self . _get_employees ,
2008-07-22 15:11:28 +00:00
} )
2006-12-07 13:41:40 +00:00
2009-04-24 13:20:22 +00:00
def _get_employees ( self , emp_ids ) :
2010-06-16 11:51:39 +00:00
emp_obj_list = self . pool . get ( ' hr.employee ' ) . browse ( self . cr , self . uid , emp_ids )
2010-08-19 11:51:57 +00:00
return emp_obj_list
2008-07-22 15:11:28 +00:00
def _lst ( self , employee_id , dt_from , dt_to , max , * args ) :
2010-06-16 11:51:39 +00:00
self . cr . execute ( " select name as date, create_date, action, create_date-name as delay from hr_attendance where employee_id= %s and to_char(name, ' YYYY-mm-dd ' )<= %s and to_char(name, ' YYYY-mm-dd ' )>= %s and action IN ( %s , %s ) order by name " , ( employee_id , dt_to , dt_from , ' sign_in ' , ' sign_out ' ) )
2008-07-22 15:11:28 +00:00
res = self . cr . dictfetchall ( )
for r in res :
2009-04-24 13:20:22 +00:00
if r [ ' action ' ] == ' sign_out ' :
r [ ' delay ' ] = - r [ ' delay ' ]
2008-07-22 15:11:28 +00:00
temp = r [ ' delay ' ] . seconds
2009-04-24 13:20:22 +00:00
r [ ' delay ' ] = str ( r [ ' delay ' ] ) . split ( ' . ' ) [ 0 ]
2008-07-22 15:11:28 +00:00
if abs ( temp ) < max * 60 :
r [ ' delay2 ' ] = r [ ' delay ' ]
else :
r [ ' delay2 ' ] = ' / '
return res
2006-12-07 13:41:40 +00:00
2008-07-22 15:11:28 +00:00
def _lst_total ( self , employee_id , dt_from , dt_to , max , * args ) :
2010-06-16 11:51:39 +00:00
self . cr . execute ( " select name as date, create_date, action, create_date-name as delay from hr_attendance where employee_id= %s and to_char(name, ' YYYY-mm-dd ' )<= %s and to_char(name, ' YYYY-mm-dd ' )>= %s and action IN ( %s , %s ) order by name " , ( employee_id , dt_to , dt_from , ' sign_in ' , ' sign_out ' ) )
2008-07-22 15:11:28 +00:00
res = self . cr . dictfetchall ( )
if not res :
return ( ' / ' , ' / ' )
2009-04-24 13:20:22 +00:00
total2 = datetime . timedelta ( seconds = 0 , minutes = 0 , hours = 0 )
total = datetime . timedelta ( seconds = 0 , minutes = 0 , hours = 0 )
2008-07-22 15:11:28 +00:00
for r in res :
2009-04-24 13:20:22 +00:00
if r [ ' action ' ] == ' sign_out ' :
r [ ' delay ' ] = - r [ ' delay ' ]
2008-07-22 15:11:28 +00:00
total + = r [ ' delay ' ]
if abs ( r [ ' delay ' ] . seconds ) < max * 60 :
total2 + = r [ ' delay ' ]
2010-08-19 11:51:57 +00:00
2009-04-24 13:20:22 +00:00
result_dict = {
2010-07-03 10:21:52 +00:00
' total ' : total and str ( total ) . split ( ' . ' ) [ 0 ] ,
' total2 ' : total2 and str ( total2 ) . split ( ' . ' ) [ 0 ]
2009-04-24 13:20:22 +00:00
}
return [ result_dict ]
2010-08-19 11:51:57 +00:00
2008-07-23 14:41:47 +00:00
2014-04-15 19:19:11 +00:00
class report_hr_attendanceerrors ( osv . AbstractModel ) :
_name = ' report.hr_attendance.report_attendanceerrors '
_inherit = ' report.abstract_report '
_template = ' hr_attendance.report_attendanceerrors '
_wrapped_report_class = attendance_print
2008-07-23 14:41:47 +00:00
2014-04-15 19:19:11 +00:00
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: