diff --git a/addons/analytic/i18n/analytic.pot b/addons/analytic/i18n/analytic.pot index 1186f83eada..93c39d0fe1e 100644 --- a/addons/analytic/i18n/analytic.pot +++ b/addons/analytic/i18n/analytic.pot @@ -419,14 +419,7 @@ msgstr "" #. openerp-web #: code:addons/analytic/static/src/components/analytic_distribution/analytic_distribution.js:0 #, python-format -msgid "Editing (Incomplete)" -msgstr "" - -#. module: analytic -#. openerp-web -#: code:addons/analytic/static/src/components/analytic_distribution/analytic_distribution.js:0 -#, python-format -msgid "Editing (OK)" +msgid "Editing" msgstr "" #. module: analytic @@ -546,6 +539,7 @@ msgid "Main Attachment" msgstr "" #. module: analytic +#: code:addons/analytic/static/src/components/analytic_distribution/analytic_distribution.js:0 #: model:ir.model.fields.selection,name:analytic.selection__account_analytic_applicability__applicability__mandatory #: model:ir.model.fields.selection,name:analytic.selection__account_analytic_plan__default_applicability__mandatory msgid "Mandatory" @@ -639,6 +633,7 @@ msgid "Operating Costs" msgstr "" #. module: analytic +#: code:addons/analytic/static/src/components/analytic_distribution/analytic_distribution.js:0 #: model:ir.model.fields.selection,name:analytic.selection__account_analytic_applicability__applicability__optional #: model:ir.model.fields.selection,name:analytic.selection__account_analytic_plan__default_applicability__optional msgid "Optional" diff --git a/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.js b/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.js index 1fcec4c6f5e..592d77f65de 100644 --- a/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.js +++ b/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.js @@ -7,6 +7,7 @@ import { getNextTabableElement, getPreviousTabableElement } from "@web/core/util import { usePosition } from "@web/core/position_hook"; import { getActiveHotkey } from "@web/core/hotkeys/hotkey_service"; import { shallowEqual } from "@web/core/utils/arrays"; +import { _lt } from "@web/core/l10n/translation"; import { AnalyticAutoComplete } from "../autocomplete/autocomplete"; import { standardFieldProps } from "@web/views/fields/standard_field_props"; @@ -17,7 +18,15 @@ import { formatPercentage } from "@web/views/fields/formatters"; const { Component, useState, useRef, useExternalListener, onWillUpdateProps, onWillStart, onPatched } = owl; - +const PLAN_APPLICABILITY = { + mandatory: _lt("Mandatory"), + optional: _lt("Optional"), +} +const PLAN_STATUS = { + editing: _lt("Editing"), + invalid: _lt("Invalid"), + ok: _lt("OK"), +} export class AnalyticDistribution extends Component { setup(){ this.orm = useService("orm"); @@ -285,7 +294,7 @@ export class AnalyticDistribution extends Component { get firstIncompletePlanId() { for (const group_id in this.list) { const group_status = this.groupStatus(group_id); - if (["orange", "red"].includes(group_status)) return group_id; + if (["editing", "invalid"].includes(group_status)) return group_id; } return 0; } @@ -316,7 +325,7 @@ export class AnalyticDistribution extends Component { get allowSave() { for (const group_id in this.list) { - if (['orange', 'red'].includes(this.groupStatus(group_id))) return false; + if (['editing', 'invalid'].includes(this.groupStatus(group_id))) return false; } return this.props.allow_save; } @@ -329,41 +338,26 @@ export class AnalyticDistribution extends Component { return this.state.showDropdown && !!this.dropdownRef.el; } - applicabilityStatus(group_id) { + statusDescription(group_id) { const group = this.list[group_id]; - const status = this.groupStatus(group_id); - let description; - switch(status){ - case "gray": - description = this.env._t("Editing (OK)"); - break; - case "orange": { - description = this.env._t("Editing (Incomplete)"); - break; - } - case "red": { - description = this.env._t("Invalid"); - break; - } - case "green": { - description = this.env._t("OK"); - break; - } - } - return `${group.applicability.charAt(0).toUpperCase()}${group.applicability.slice(1)} - ${description}`; + const applicability = PLAN_APPLICABILITY[group.applicability]; + const status = PLAN_STATUS[this.groupStatus(group_id)]; + return `${applicability} - ${status} ${this.formatPercentage(this.sumByGroup(group_id))}`; } groupStatus(id) { const group = this.list[id]; const ready_tags = this.listReadyByGroup(id); - if (group.distribution.length > ready_tags.length) { - return group.applicability === 'mandatory' ? 'orange' : 'gray'; + if (group.applicability === 'mandatory') { + if (group.distribution.length > ready_tags.length) { + return 'editing' + } + const sum = this.sumByGroup(id); + if (sum < 99.99 || sum >= 100.01) { + return 'invalid'; + } } - const sum = this.sumByGroup(id); - if (group.applicability === 'mandatory' && (sum < 99.99 || sum >= 100.01)){ - return 'red'; - } - return 'green'; + return 'ok'; } listReadyByGroup(id) { @@ -410,7 +404,7 @@ export class AnalyticDistribution extends Component { validate() { for (const group_id in this.list) { - if (this.groupStatus(group_id) === 'red') { + if (this.groupStatus(group_id) === 'invalid') { this.props.record.setInvalidField(this.props.name); return false; } diff --git a/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.scss b/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.scss index 38e2b592bb0..8757b4deefb 100644 --- a/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.scss +++ b/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.scss @@ -14,22 +14,18 @@ .o_analytic_percentage { width: 45px !important; } - .o_analytic_status_red { + .o_analytic_status_invalid { background-color: $o-danger; margin-left:8px; } - .o_analytic_status_green { + .o_analytic_status_ok { background-color: $o-success; margin-left:8px; } - .o_analytic_status_orange { + .o_analytic_status_editing { background-color: $o-warning; margin-left:8px; } - .o_analytic_status_gray { - background-color: $gray-200; - margin-left:8px; - } tr:hover { outline: none !important; } diff --git a/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.xml b/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.xml index a27f0089fc5..282c6f1dbf1 100644 --- a/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.xml +++ b/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.xml @@ -52,7 +52,7 @@ (no accounts) - + diff --git a/addons/analytic/static/tests/analytic_distribution_tests.js b/addons/analytic/static/tests/analytic_distribution_tests.js index e1fd652f259..eacd4311b3b 100644 --- a/addons/analytic/static/tests/analytic_distribution_tests.js +++ b/addons/analytic/static/tests/analytic_distribution_tests.js @@ -144,7 +144,7 @@ QUnit.module("Analytic", (hooks) => { const input = document.activeElement; await editInput(input, null, "19"); - assert.containsOnce(planTable, '.o_analytic_status_orange', "Mandatory plan has incomplete status"); + assert.containsOnce(planTable, '.o_analytic_status_editing', "Mandatory plan has incomplete status"); let incompleteInputName = planTable.querySelector('tr.incomplete .o_analytic_account_name input'); assert.strictEqual(document.activeElement, incompleteInputName,