Hi,
I just start my experience with Odoo and try to make my first module for user wich work with Timesheet. I want create module that count at real time hours of Login user and show this hours at hr timesheet sheet.sheet.
When I install this module and try to go to Timesheet menu I get this error:
Traceback (most recent call last): File "C:\odoo-10.0\odoo\http.py", line 642, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "C:\odoo-10.0\odoo\http.py", line 684, in dispatch result = self._call_function(**self.params) File "C:\odoo-10.0\odoo\http.py", line 334, in _call_function return checked_call(self.db, *args, **kwargs) File "C:\odoo-10.0\odoo\service\model.py", line 101, in wrapper return f(dbname, *args, **kwargs) File "C:\odoo-10.0\odoo\http.py", line 327, in checked_call result = self.endpoint(*a, **kw) File "C:\odoo-10.0\odoo\http.py", line 942, in __call__ return self.method(*args, **kw) File "C:\odoo-10.0\odoo\http.py", line 507, in response_wrap response = f(*args, **kw) File "C:\odoo-10.0\addons\web\controllers\main.py", line 895, in call_kw return self._call_kw(model, method, args, kwargs) File "C:\odoo-10.0\addons\web\controllers\main.py", line 887, in _call_kw return call_kw(request.env[model], method, args, kwargs) File "C:\odoo-10.0\odoo\api.py", line 689, in call_kw return call_kw_multi(method, model, args, kwargs) File "C:\odoo-10.0\odoo\api.py", line 680, in call_kw_multi result = method(recs, *args, **kwargs) File "C:\odoo-10.0\odoo\models.py", line 3038, in read data[record][name] = convert(record[name], record, use_name_get) File "C:\odoo-10.0\odoo\models.py", line 5251, in __getitem__ return self._fields[key].__get__(self, type(self)) File "C:\odoo-10.0\odoo\fields.py", line 927, in __get__ self.determine_value(record) File "C:\odoo-10.0\odoo\fields.py", line 1041, in determine_value self.compute_value(recs) File "C:\odoo-10.0\odoo\fields.py", line 993, in compute_value self._compute_value(records) File "C:\odoo-10.0\odoo\fields.py", line 984, in _compute_value getattr(records, self.compute)() File "C:\odoo-10.0\addons\attendance\models\login.py", line 26, in _compute_time_difference if attendance.check_out: AttributeError: 'hr_timesheet_sheet.sheet' object has no attribute 'check_out'
login.py:
from openerp import api, fields, models
from odoo.tools.translate import _
from odoo.exceptions import UserError
import logging
_logger = logging.getLogger(__name__)
class HrTimesheetSheet(models.Model):
_inherit = 'hr_timesheet_sheet.sheet'
time_difference = fields.Float(compute='_compute_time_difference', string='Time Difference')
@api.multi
def _compute_time_difference(self):
for attendance in self:
if attendance.check_out:
time_end = fields.Datetime.from_string(attendance.check_out)
else:
time_end = fields.Datetime.from_string(
str(fields.Datetime.context_timestamp(
self, timestamp=fields.datetime.now()
))
)
time_start = fields.Datetime.from_string(attendance.check_in)
delta = time_end - time_start
# Timedelta object has no minutes nor hours fields
hours_difference = delta.seconds / 3600.0 + delta.days * 24
attendance.time_difference = hours_difference
Views:
<openerp>
<data noupdate="0">
<record id="hr_timesheet_sheet_form_work_hours" model="ir.ui.view">
<field name="name">timesheet.sheet.form.new</field>
<field name="model">hr_timesheet_sheet.sheet</field>
<field name="inherit_id" ref="hr_timesheet_attendance.hr_timesheet_sheet_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='total_difference']" position="after">
<field name="time_difference" widget="float_time" sum="Attendance Time"/>
</xpath>
</field>
</record>
</data>
</openerp>