This commit reviews the UX and UI in Project app and improves the usability of the
new features recently added (subtasks list in kanban card, state field replacing
kanban_state field, etc).
The following changes are made in this commit:
- swap of user_id icon in the kanban box and the removal of the allow_unassign field and setting
- change the ordering of the fields in the subtask list
- make small layout changes in the project.task and project.project kanban cards
- remove the "lock-icon private" sub-title of private tasks, replace it with a
little lock icon on the bottom right icons of the kanban card.
- remove the break tag in the project.task kanban card that was unecessary
given the new display and margin style settings
- lock icon is bigger
- kanban icons are better aligned
- state is as big as avatar
- remove the 'remaining hours on SO' field
- deadline field will be optional and hidden by default in project.task list view
- remove the rating field
- add stage field as optional in project.task list views
- priority and state fields will no longer be optional
- stage_id will be copied when duplicating a task, except when the task is
generated through the recurrence
- remove the tooltip of the tag_ids field
- When duplicating a task having sub-tasks, '(copy)' is no longer
added to the name of the sub-tasks of this task.
- project.task kanban view:
* (+ x tasks) mention next to the name is removed
* The caret is replaced with 'fa-check-square-o x/y'
which will represent the number of sub-tasks closed
compared to the total number of sub-tasks
* Only open subtasks are displayed
* When changing the state of a sub-task to a closing one,
the sub-task is muted and removed from the list on the view reload
* The name of the parent task on the kanban card of sub-tasks is
displayed except when viewing the sub-tasks of a particular task
through the sub-tasks stat button
* project.project kanban view: the fa-check-square-o icon of
milestones is replaced with fa-flag-o
* project.task kanban card: the fa-play and fa-pause icons
are moved on the right of the remaining hours widge.
* Allow users to edit the stage_id in batch from the list view of tasks
if all of the selected tasks are part of the same project.
* the state will have the same size as the avatar
* change the opacity of the tasks that are closed
* state is at the right of subtask list
* the striked should be replaced by the opacity on the kanban card
Enterprise PR: odoo/enterprise#38132
Task-3229873
closes odoo/odoo#116628
X-original-commit: 09b5d5843096d27b5a4ab0f603ad44bdb2e74723
Related: odoo/upgrade#4478
Related: odoo/enterprise#38771
Signed-off-by: Xavier Bol (xbo) <xbo@odoo.com>
Co-authored-by: Panagiotis Kyriakou <paky@odoo.com>
Co-authored-by: Bastien (bvdn) <bvdn@odoo.com>
61 lines
2.2 KiB
Python
61 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import logging
|
|
|
|
from .test_project_base import TestProjectCommon
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class TestProjectConfig(TestProjectCommon):
|
|
"""Test module configuration and its effects on projects."""
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super(TestProjectConfig, cls).setUpClass()
|
|
cls.Project = cls.env["project.project"]
|
|
cls.Settings = cls.env["res.config.settings"]
|
|
cls.features = (
|
|
# Pairs of associated (config_flag, project_flag)
|
|
("group_project_recurring_tasks", "allow_recurring_tasks"),
|
|
("group_project_rating", "rating_active"),
|
|
)
|
|
|
|
# Start with a known value on feature flags to ensure validity of tests
|
|
cls._set_feature_status(is_enabled=False)
|
|
|
|
@classmethod
|
|
def _set_feature_status(cls, is_enabled):
|
|
"""Set enabled/disabled status of all optional features in the
|
|
project app config to is_enabled (boolean).
|
|
"""
|
|
features_config = cls.Settings.create(
|
|
{feature[0]: is_enabled for feature in cls.features})
|
|
features_config.execute()
|
|
|
|
def test_existing_projects_enable_features(self):
|
|
"""Check that *existing* projects have features enabled when
|
|
the user enables them in the module configuration.
|
|
"""
|
|
self._set_feature_status(is_enabled=True)
|
|
for config_flag, project_flag in self.features:
|
|
self.assertTrue(
|
|
self.project_pigs[project_flag],
|
|
"Existing project failed to adopt activation of "
|
|
f"{config_flag}/{project_flag} feature")
|
|
|
|
def test_new_projects_enable_features(self):
|
|
"""Check that after the user enables features in the module
|
|
configuration, *newly created* projects have those features
|
|
enabled as well.
|
|
"""
|
|
self._set_feature_status(is_enabled=True)
|
|
project_cows = self.Project.create({
|
|
"name": "Cows",
|
|
"partner_id": self.partner_1.id})
|
|
for config_flag, project_flag in self.features:
|
|
self.assertTrue(
|
|
project_cows[project_flag],
|
|
f"Newly created project failed to adopt activation of "
|
|
f"{config_flag}/{project_flag} feature")
|