diff options
| author | jbm-odoo <jbm@odoo.com> | 2020-06-05 17:13:53 +0200 |
|---|---|---|
| committer | jbm-odoo <jbm@odoo.com> | 2020-06-15 15:51:20 +0200 |
| commit | d6a23144d5c5b85c2a02097bcbb3e006a9c2c52a (patch) | |
| tree | 2eb930372884160d675497ce415279374d21b48a /addons/timer | |
| parent | e7dda3fab002f5db930b4af340787177d597d59e (diff) | |
[MOV] timer: Move to Enterprise
taskId: 2217930
Diffstat (limited to 'addons/timer')
| -rw-r--r-- | addons/timer/__init__.py | 4 | ||||
| -rw-r--r-- | addons/timer/__manifest__.py | 27 | ||||
| -rw-r--r-- | addons/timer/i18n/timer.pot | 127 | ||||
| -rw-r--r-- | addons/timer/models/__init__.py | 5 | ||||
| -rw-r--r-- | addons/timer/models/timer.py | 70 | ||||
| -rw-r--r-- | addons/timer/security/ir.model.access.csv | 2 | ||||
| -rw-r--r-- | addons/timer/security/timer_security.xml | 30 | ||||
| -rw-r--r-- | addons/timer/static/src/js/timer.js | 63 | ||||
| -rw-r--r-- | addons/timer/static/src/js/timer_mixin.js | 119 | ||||
| -rw-r--r-- | addons/timer/static/src/js/timer_toggle_button.js | 3 | ||||
| -rw-r--r-- | addons/timer/static/src/scss/timer_button.scss | 26 | ||||
| -rw-r--r-- | addons/timer/views/assets.xml | 11 |
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> |
