4 changed files with 13 additions and 104 deletions
@ -1,94 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Jesni Banu(<http://www.cybrosys.com>) |
|||
# you can modify it under the terms of the GNU LESSER |
|||
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
|||
# |
|||
# It is forbidden to publish, distribute, sublicense, or sell copies |
|||
# of the Software or modified copies of the Software. |
|||
# |
|||
# 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 |
|||
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
from datetime import datetime |
|||
from odoo import models, fields, api |
|||
|
|||
|
|||
class ProjectTaskTimeSheet(models.Model): |
|||
_inherit = 'account.analytic.line' |
|||
|
|||
date_start = fields.Datetime(string='Start Date') |
|||
date_end = fields.Datetime(string='End Date', readonly=1) |
|||
timer_duration = fields.Float(invisible=1) |
|||
|
|||
|
|||
class ProjectTaskTimer(models.Model): |
|||
_inherit = 'project.task' |
|||
|
|||
def _compute_is_user_working(self): |
|||
""" Checks whether the current user is working """ |
|||
for order in self: |
|||
if order.timesheet_ids.filtered(lambda x: (x.user_id.id == self.env.user.id) and (not x.date_end)): |
|||
order.is_user_working = True |
|||
else: |
|||
order.is_user_working = False |
|||
|
|||
@api.multi |
|||
@api.depends('timesheet_ids.timer_duration') |
|||
def _compute_duration(self): |
|||
self.duration = 0 |
|||
for each in self: |
|||
each.duration = sum(each.timesheet_ids.mapped('timer_duration')) |
|||
|
|||
@api.multi |
|||
def toggle_start(self): |
|||
for record in self: |
|||
record.task_timer = not record.task_timer |
|||
if self.task_timer: |
|||
self.write({'is_user_working': True}) |
|||
time_line = self.env['account.analytic.line'] |
|||
for time_sheet in self: |
|||
time_line.create({ |
|||
'name': self.env.user.name + ': ' + time_sheet.name, |
|||
'task_id': time_sheet.id, |
|||
'user_id': self.env.user.id, |
|||
'project_id': time_sheet.project_id.id, |
|||
'date_start': datetime.now(), |
|||
}) |
|||
else: |
|||
self.write({'is_user_working': False}) |
|||
time_line_obj = self.env['account.analytic.line'] |
|||
domain = [('task_id', 'in', self.ids), ('date_end', '=', False)] |
|||
for time_line in time_line_obj.search(domain): |
|||
time_line.write({'date_end': fields.Datetime.now()}) |
|||
if time_line.date_end: |
|||
diff = fields.Datetime.from_string(time_line.date_end) - fields.Datetime.from_string( |
|||
time_line.date_start) |
|||
time_line.timer_duration = round(diff.total_seconds() / 60.0, 2) |
|||
time_line.unit_amount = round(diff.total_seconds() / (60.0 * 60.0), 2) |
|||
else: |
|||
time_line.unit_amount = 0.0 |
|||
time_line.timer_duration = 0.0 |
|||
|
|||
task_timer = fields.Boolean() |
|||
is_user_working = fields.Boolean( |
|||
'Is Current User Working', compute='_compute_is_user_working', |
|||
help="Technical field indicating whether the current user is working. ") |
|||
duration = fields.Float( |
|||
'Real Duration', compute='_compute_duration', |
|||
readonly=True, store=True) |
|||
|
|||
|
|||
|
|||
|
|||
|
Loading…
Reference in new issue