diff --git a/addons/project/__manifest__.py b/addons/project/__manifest__.py index d635e16c866..831a8482575 100644 --- a/addons/project/__manifest__.py +++ b/addons/project/__manifest__.py @@ -59,6 +59,7 @@ 'post_init_hook': '_project_post_init', 'assets': { 'web.assets_backend': [ + 'project/static/src/project_control_panel/*', 'project/static/src/css/project.css', 'project/static/src/js/project_activity.js', 'project/static/src/js/project_control_panel.js', @@ -85,7 +86,7 @@ 'project/static/src/js/portal_rating.js', ], 'web.assets_qweb': [ - 'project/static/src/xml/**/*', + 'project/static/src/**/*.xml', ], 'web.qunit_suite_tests': [ 'project/static/tests/burndown_chart_tests.js', diff --git a/addons/project/static/src/project_control_panel/project_control_panel.js b/addons/project/static/src/project_control_panel/project_control_panel.js new file mode 100644 index 00000000000..6d415a547ff --- /dev/null +++ b/addons/project/static/src/project_control_panel/project_control_panel.js @@ -0,0 +1,51 @@ +/** @odoo-module **/ + +import { ControlPanel } from "@web/search/control_panel/control_panel"; +import { useService } from "@web/core/utils/hooks"; + +export class ProjectControlPanel extends ControlPanel { + constructor() { + super(...arguments); + this.orm = useService("orm"); + this.user = useService("user"); + const { active_id, show_project_update } = this.env.searchModel.globalContext; + this.showProjectUpdate = this.env.searchModel.view.type === "form" || show_project_update; + this.projectId = this.showProjectUpdate ? active_id : false; + } + + async willStart() { + const proms = [super.willStart(...arguments)]; + if (this.showProjectUpdate) { + proms.push(this.loadData()); + } + await Promise.all(proms); + } + + async willUpdateProps() { + const proms = [super.willUpdateProps(...arguments)]; + if (this.showProjectUpdate) { + proms.push(this.loadData()); + } + await Promise.all(proms); + } + + async loadData() { + const [data, isProjectUser] = await Promise.all([ + this.orm.call("project.project", "get_last_update_or_default", [this.projectId]), + this.user.hasGroup("project.group_project_user"), + ]); + this.data = data; + this.isProjectUser = isProjectUser; + } + + async onStatusClick(ev) { + ev.preventDefault(); + this.actionService.doAction("project.project_update_all_action", { + additionalContext: { + default_project_id: this.projectId, + active_id: this.projectId, + }, + }); + } +} +ProjectControlPanel.template = "project.ProjectControlPanel"; diff --git a/addons/project/static/src/project_control_panel/project_control_panel.xml b/addons/project/static/src/project_control_panel/project_control_panel.xml new file mode 100644 index 00000000000..44aa7941a7f --- /dev/null +++ b/addons/project/static/src/project_control_panel/project_control_panel.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + +
  • + +
  • +
  • + +
  • +
    +
    + + + + + + + + + + + + + +
    diff --git a/addons/project/static/src/xml/project_templates.xml b/addons/project/static/src/xml/project_templates.xml index 55aad92746c..1369eefb859 100644 --- a/addons/project/static/src/xml/project_templates.xml +++ b/addons/project/static/src/xml/project_templates.xml @@ -19,28 +19,13 @@
    - + + + +
    - - - - - - - - - -
  • - -
  • -
  • - -
  • -
    -
    -