summaryrefslogtreecommitdiff
path: root/addons/timer
diff options
context:
space:
mode:
authorjbm-odoo <jbm@odoo.com>2020-06-05 17:13:53 +0200
committerjbm-odoo <jbm@odoo.com>2020-06-15 15:51:20 +0200
commitd6a23144d5c5b85c2a02097bcbb3e006a9c2c52a (patch)
tree2eb930372884160d675497ce415279374d21b48a /addons/timer
parente7dda3fab002f5db930b4af340787177d597d59e (diff)
[MOV] timer: Move to Enterprise
taskId: 2217930
Diffstat (limited to 'addons/timer')
-rw-r--r--addons/timer/__init__.py4
-rw-r--r--addons/timer/__manifest__.py27
-rw-r--r--addons/timer/i18n/timer.pot127
-rw-r--r--addons/timer/models/__init__.py5
-rw-r--r--addons/timer/models/timer.py70
-rw-r--r--addons/timer/security/ir.model.access.csv2
-rw-r--r--addons/timer/security/timer_security.xml30
-rw-r--r--addons/timer/static/src/js/timer.js63
-rw-r--r--addons/timer/static/src/js/timer_mixin.js119
-rw-r--r--addons/timer/static/src/js/timer_toggle_button.js3
-rw-r--r--addons/timer/static/src/scss/timer_button.scss26
-rw-r--r--addons/timer/views/assets.xml11
12 files changed, 1 insertions, 486 deletions
diff --git a/addons/timer/__init__.py b/addons/timer/__init__.py
deleted file mode 100644
index dc5e6b693d1..00000000000
--- a/addons/timer/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from . import models
diff --git a/addons/timer/__manifest__.py b/addons/timer/__manifest__.py
deleted file mode 100644
index ee8832dfe1b..00000000000
--- a/addons/timer/__manifest__.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-
-{
- 'name': 'Timer',
- 'version': '1.0',
- 'sequence': 24,
- 'summary': 'Record time',
- 'category': 'Services/Timesheets',
- 'description': """
-This module implements a timer.
-==========================================
-
-It adds a timer to a view for time recording purpose
- """,
- 'depends': ['web', 'mail'],
- 'data': [
- 'security/timer_security.xml',
- 'security/ir.model.access.csv',
- 'views/assets.xml',
- ],
- 'demo': [],
- 'installable': True,
- 'application': False,
- 'auto_install': False,
-}
diff --git a/addons/timer/i18n/timer.pot b/addons/timer/i18n/timer.pot
deleted file mode 100644
index e9ffea53b48..00000000000
--- a/addons/timer/i18n/timer.pot
+++ /dev/null
@@ -1,127 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * timer
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server saas~13.2\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-13 07:24+0000\n"
-"PO-Revision-Date: 2020-02-13 07:24+0000\n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_timer__create_uid
-msgid "Created by"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_timer__create_date
-msgid "Created on"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_mixin__display_name
-#: model:ir.model.fields,field_description:timer.field_timer_timer__display_name
-msgid "Display Name"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_mixin__display_timer_pause
-msgid "Display Timer Pause"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_mixin__display_timer_resume
-msgid "Display Timer Resume"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_mixin__display_timer_start_primary
-msgid "Display Timer Start Primary"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_mixin__display_timer_stop
-msgid "Display Timer Stop"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_mixin__id
-#: model:ir.model.fields,field_description:timer.field_timer_timer__id
-msgid "ID"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_mixin__is_timer_running
-#: model:ir.model.fields,field_description:timer.field_timer_timer__is_timer_running
-msgid "Is Timer Running"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_mixin____last_update
-#: model:ir.model.fields,field_description:timer.field_timer_timer____last_update
-msgid "Last Modified on"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_timer__write_uid
-msgid "Last Updated by"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_timer__write_date
-msgid "Last Updated on"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.constraint,message:timer.constraint_timer_timer_unique_timer
-msgid "Only one timer occurrence by model, record and user"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_timer__res_id
-msgid "Res"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_timer__res_model
-msgid "Res Model"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_mixin__timer_pause
-#: model:ir.model.fields,field_description:timer.field_timer_timer__timer_pause
-msgid "Timer Last Pause"
-msgstr ""
-
-#. module: timer
-#: model:ir.model,name:timer.model_timer_mixin
-msgid "Timer Mixin"
-msgstr ""
-
-#. module: timer
-#: model:ir.model,name:timer.model_timer_timer
-msgid "Timer Module"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_mixin__timer_start
-#: model:ir.model.fields,field_description:timer.field_timer_timer__timer_start
-msgid "Timer Start"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_timer__user_id
-msgid "User"
-msgstr ""
-
-#. module: timer
-#: model:ir.model.fields,field_description:timer.field_timer_mixin__user_timer_id
-msgid "User Timer"
-msgstr ""
diff --git a/addons/timer/models/__init__.py b/addons/timer/models/__init__.py
deleted file mode 100644
index 66c7f179a40..00000000000
--- a/addons/timer/models/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from . import timer
-from . import timer_mixin
diff --git a/addons/timer/models/timer.py b/addons/timer/models/timer.py
deleted file mode 100644
index 0da18794cd2..00000000000
--- a/addons/timer/models/timer.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from odoo import models, fields, api
-from odoo.exceptions import ValidationError
-
-class TimerTimer(models.Model):
- _name = 'timer.timer'
- _description = 'Timer Module'
-
- timer_start = fields.Datetime("Timer Start")
- timer_pause = fields.Datetime("Timer Last Pause")
- is_timer_running = fields.Boolean(compute="_compute_is_timer_running")
- res_model = fields.Char(required=True)
- res_id = fields.Integer(required=True)
- user_id = fields.Many2one('res.users')
-
- _sql_constraints = [(
- 'unique_timer', 'UNIQUE(res_model, res_id, user_id)',
- 'Only one timer occurrence by model, record and user')]
-
- @api.depends('timer_start', 'timer_pause')
- def _compute_is_timer_running(self):
- for record in self:
- record.is_timer_running = record.timer_start and not record.timer_pause
-
- @api.model
- def create(self, vals):
- # Reset the user_timer_id to force the recomputation
- self.env[vals['res_model']].invalidate_cache(fnames=['user_timer_id'], ids=[vals['res_id']])
- return super().create(vals)
-
- def action_timer_start(self):
- if not self.timer_start:
- self.write({'timer_start': fields.Datetime.now()})
-
- def action_timer_stop(self):
- """ Stop the timer and return the spent minutes since it started
- :return minutes_spent if the timer is started,
- otherwise return False
- """
- if not self.timer_start:
- return False
- minutes_spent = self._get_minutes_spent()
- self.write({'timer_start': False, 'timer_pause': False})
- return minutes_spent
-
- def _get_minutes_spent(self):
- start_time = self.timer_start
- stop_time = fields.Datetime.now()
- # timer was either running or paused
- if self.timer_pause:
- start_time += (stop_time - self.timer_pause)
- return (stop_time - start_time).total_seconds() / 60
-
- def action_timer_pause(self):
- self.write({'timer_pause': fields.Datetime.now()})
-
- def action_timer_resume(self):
- new_start = self.timer_start + (fields.Datetime.now() - self.timer_pause)
- self.write({'timer_start': new_start, 'timer_pause': False})
-
- @api.model
- def get_server_time(self):
- """ Returns the server time.
- The timer widget needs the server time instead of the client time
- to avoid time desynchronization issues like the timer beginning at 0:00
- and not 23:59 and so on.
- """
- return fields.Datetime.now()
diff --git a/addons/timer/security/ir.model.access.csv b/addons/timer/security/ir.model.access.csv
deleted file mode 100644
index 852a5f208df..00000000000
--- a/addons/timer/security/ir.model.access.csv
+++ /dev/null
@@ -1,2 +0,0 @@
-id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_timer_user,timer.timer.user,timer.model_timer_timer,base.group_user,1,1,1,1
diff --git a/addons/timer/security/timer_security.xml b/addons/timer/security/timer_security.xml
deleted file mode 100644
index 8bad09e2641..00000000000
--- a/addons/timer/security/timer_security.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<odoo noupdate="1">
-
- <record id="timer_user_rule_create-write-delete" model="ir.rule">
- <field name="name">timer.user.rule.create-write-delete</field>
- <field name="model_id" ref="timer.model_timer_timer"/>
- <field name="domain_force">[
- ('user_id', '=', user.id)
- ]</field>
- <field name="groups" eval="[(4, ref('base.group_user'))]"/>
- <field name="perm_create" eval="1"/>
- <field name="perm_write" eval="1"/>
- <field name="perm_unlink" eval="1"/>
- <field name="perm_read" eval="1"/>
- </record>
-
- <record id="timer_not_user_rule_create-write-delete" model="ir.rule">
- <field name="name">timer.not.user.rule.create-write-delete</field>
- <field name="model_id" ref="timer.model_timer_timer"/>
- <field name="domain_force">[
- ('user_id', '!=', user.id)
- ]</field>
- <field name="groups" eval="[(4, ref('base.group_user'))]"/>
- <field name="perm_create" eval="0"/>
- <field name="perm_write" eval="0"/>
- <field name="perm_unlink" eval="0"/>
- <field name="perm_read" eval="1"/>
- </record>
-
-</odoo>
diff --git a/addons/timer/static/src/js/timer.js b/addons/timer/static/src/js/timer.js
deleted file mode 100644
index 0042ebfaead..00000000000
--- a/addons/timer/static/src/js/timer.js
+++ /dev/null
@@ -1,63 +0,0 @@
-odoo.define('timer.timer', function (require) {
-"use strict";
-
-var fieldRegistry = require('web.field_registry');
-var AbstractField = require('web.AbstractField');
-var Timer = require('timer.Timer');
-
-var TimerFieldWidget = AbstractField.extend({
-
- /**
- * @override
- * @private
- */
- isSet: function () {
- return true;
- },
- /**
- * @override
- * @private
- */
- _render: function () {
- this._super.apply(this, arguments);
- this._startTimeCounter();
- },
- /**
- * @override
- */
- destroy: function () {
- this._super.apply(this, arguments);
- clearInterval(this.timer);
- },
- /**
- * @private
- */
- _startTimeCounter: async function () {
- if (this.record.data.timer_start) {
- const serverTime = this.record.data.timer_pause || await this._getServerTime();
- this.time = Timer.createTimer(0, this.record.data.timer_start, serverTime);
- this.$el.text(this.time.toString());
- this.timer = setInterval(() => {
- if (this.record.data.timer_pause) {
- clearInterval(this.timer);
- } else {
- this.time.addSecond();
- this.$el.text(this.time.toString());
- }
- }, 1000);
- } else if (!this.record.data.timer_pause){
- clearInterval(this.timer);
- }
- },
- _getServerTime: function () {
- return this._rpc({
- model: 'timer.timer',
- method: 'get_server_time',
- args: []
- });
- }
-});
-
-fieldRegistry.add('timer_timer', TimerFieldWidget);
-
-});
diff --git a/addons/timer/static/src/js/timer_mixin.js b/addons/timer/static/src/js/timer_mixin.js
deleted file mode 100644
index 7a70e81341e..00000000000
--- a/addons/timer/static/src/js/timer_mixin.js
+++ /dev/null
@@ -1,119 +0,0 @@
-odoo.define('timer.Timer', function (require) {
-"use strict";
-
- /**
- * This class improves the timer display using the
- * unit_amount field on account.analytic.line.
- */
- class Timer {
- constructor(hours, minutes, seconds) {
- this.hours = hours;
- this.minutes = minutes;
- this.seconds = seconds;
- }
-
- /**
- * Convert float to time
- * @param {number} float
- */
- static convertFloatToTime(float) {
- if (float === 0) {
- return new Timer(0, 0, 0);
- }
-
- let minutes = float % 1;
- const hours = float - minutes;
- minutes *= 60;
-
- return new Timer(hours, Math.round(minutes), 0);
- }
-
- /**
- * Create timer
- * @param {number} unit_amount
- * @param {String} timer_start
- * @param {String} serverTime
- */
- static createTimer(unit_amount, timer_start, serverTime) {
- const timer = this.convertFloatToTime(unit_amount);
-
- timer.addTime(
- moment.utc(
- Math.abs(moment.utc(serverTime)
- .diff(moment.utc(timer_start))
- )).format("HH:mm:ss")
- );
-
- return timer;
- }
-
- addHours(hours) {
- this.hours += hours;
- }
-
- addMinutes(minutes) {
- minutes += this.minutes;
-
- this.minutes = minutes % 60;
- this.addHours(Math.floor(minutes / 60));
- }
-
- addSeconds(seconds) {
- seconds += this.seconds;
- this.seconds = seconds % 60;
- this.addMinutes(Math.floor(seconds / 60));
- }
-
- display2digits(number) {
- return number > 9 ? "" + number : "0" + number;
- }
-
- addSecond() {
- this.seconds += 1;
- if (this.seconds === 60) {
- this.minutes += 1;
- this.seconds = 0;
-
- if (this.minutes === 60) {
- this.hours += 1;
- this.minutes = 0;
- }
- }
- }
-
- addTime(time) {
- if (typeof time == 'string' && time.indexOf(':') !== -1) {
- let [hour, minute, second] = time.split(':');
-
- hour = parseInt(hour);
- minute = parseInt(minute);
- second = (second === undefined) ? 0 : parseInt(second);
-
- this.addSeconds(second);
- this.addMinutes(minute);
- this.addHours(hour);
- }
- }
-
- convertToFloat() {
- return (this.hours * 60 + this.minutes) * 60 / 3600;
- }
-
- convertToSeconds() {
- return (this.hours * 60 + this.minutes) * 60 + this.seconds;
- }
-
- toString() {
- const time = {
- hours: this.display2digits(this.hours),
- minutes: this.display2digits(this.minutes),
- seconds: this.display2digits(this.seconds)
- };
-
- return `${time.hours}:${time.minutes}:${time.seconds}`;
- }
- }
-
- return Timer;
-
-});
diff --git a/addons/timer/static/src/js/timer_toggle_button.js b/addons/timer/static/src/js/timer_toggle_button.js
index 78274e05e0c..d189d996502 100644
--- a/addons/timer/static/src/js/timer_toggle_button.js
+++ b/addons/timer/static/src/js/timer_toggle_button.js
@@ -52,12 +52,11 @@ const TimerToggleButton = FieldToggleBoolean.extend({
*/
_onToggleButton: async function (event) {
const context = this.record.getContext();
- const prevent_deletion = this.attrs.options && this.attrs.options.prevent_deletion || false;
event.stopPropagation();
const result = await this._rpc({
model: this.model,
method: this._getActionButton(),
- context: $.extend({}, context, {prevent_deletion: prevent_deletion}),
+ context: context,
args: [this.res_id]
});
diff --git a/addons/timer/static/src/scss/timer_button.scss b/addons/timer/static/src/scss/timer_button.scss
deleted file mode 100644
index 8b269fa8b20..00000000000
--- a/addons/timer/static/src/scss/timer_button.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-.o-timer-button {
- &:focus {
- border: none !important;
- outline: 0 !important;
- }
-
- & > i {
- transition: 0.3s;
-
- &.o-timer-play-button {
- color: $link-color !important;
- }
-
- &.o-timer-stop-button {
- color: $red !important;
- }
- }
-
- &:hover > i.o-timer-play-button {
- color: $link-hover-color !important;
- }
-
- &:hover > i.o-timer-stop-button {
- color: darken($red, 15%) !important;
- }
-}
diff --git a/addons/timer/views/assets.xml b/addons/timer/views/assets.xml
deleted file mode 100644
index a8565a53515..00000000000
--- a/addons/timer/views/assets.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-<odoo>
- <template id="assets_backend" name="timer assets" inherit_id="web.assets_backend">
- <xpath expr="." position="inside">
- <link type="text/scss" href="/timer/static/src/scss/timer_button.scss" rel="stylesheet"/>
- <script type="text/javascript" src="/timer/static/src/js/timer_mixin.js"/>
- <script type="text/javascript" src="/timer/static/src/js/timer.js"/>
- <script type="text/javascript" src="/timer/static/src/js/timer_toggle_button.js"/>
- </xpath>
- </template>
-</odoo>