Files
odoo_source/addons/project/views/project_update_views.xml
T
Vincent Larcin d161d28782 [IMP] sale_timesheet: link milestones to SOLs
Currently, a service can be configured to be invoiced on milestones.
This means that the user has to manually update the delivered quantity on the SO in order to invoice it.

We now also have the notion of milestones in the project module.
It would be nice to have a link in between the milestone and the corresponding SOL, so that the delivered quantity is automatically updated when the milestone is reached.
This would help the users save time, limit the risk of error and reduce the confusion of having unrelated milestones at two different places.

To this end, this commit adds a new "milestones" invoice policy that computes the delivered quantity of a SOL based on the milestones that have been reached, and renames the previous "milestones" policy into "manual".

Task-2558889

Closes https://github.com/odoo/odoo/pull/81684

closes odoo/odoo#81684

Related: odoo/upgrade#3265
Signed-off-by: Laurent Stukkens (ltu) <ltu@odoo.com>
2022-02-28 13:52:41 +00:00

154 lines
7.3 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="project_update_view_search" model="ir.ui.view">
<field name="name">project.update.view.search</field>
<field name="model">project.update</field>
<field name="arch" type="xml">
<search string="Search Update">
<field name="name"/>
<field name="project_id" invisible="1"/>
</search>
</field>
</record>
<record id="project_update_view_form" model="ir.ui.view">
<field name="name">project.update.view.form</field>
<field name="model">project.update</field>
<field name="arch" type="xml">
<form string="Project Update" class="o_form_project_update" js_class="form_description_expander">
<sheet>
<div class="oe_title">
<h1>
<field name="name" class="o_text_overflow" placeholder="Title of the Update"/>
</h1>
</div>
<group>
<group>
<field name="project_id" invisible="1"/>
<field name="color" invisible="1"/>
<field name="status" widget="status_with_color" options="{'color_field': 'color'}"/>
<field name="progress" widget="progressbar" options="{'current_value': 'progress', 'max_value': '100', 'editable': true}"/>
</group>
<group>
<field name="user_id" widget="many2one_avatar_user" readonly="1"/>
<field name="date"/>
</group>
</group>
<separator/>
<notebook>
<page string="Description" name="description">
<field name="description" widget="html_with_action" nolabel="1" class="o_project_update_description" options="{'resizable': false}"/>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" options="{'post_refresh':True}" groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<record id="project_update_view_kanban" model="ir.ui.view">
<field name="name">project.update.view.kanban</field>
<field name="model">project.update</field>
<field name="arch" type="xml">
<kanban class="o_pupdate_kanban" sample="1" js_class="project_update_kanban">
<field name="color"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="{{!selection_mode ? 'oe_kanban_color_' + record.color.raw_value : ''}} oe_kanban_global_click o_pupdate_kanban_card">
<!-- Project Update Kanban View is always ungrouped - see js_class -->
<div class="o_kanban_detail_ungrouped row">
<div class="col-lg-4 o_pupdate_name">
<b><field name="name_cropped"/></b>
<div>
<field name="user_id" widget="many2one_avatar_user"/>
<t t-esc="record.user_id.value"/>
</div>
</div>
<div class="col-lg-2">
<field name="color" invisible="1"/>
<b><field name="status" widget="status_with_color" options="{'color_field': 'color'}"/></b>
</div>
<div class="col-lg-2">
<b><field name="progress_percentage" widget="percentage"/></b>
<div>Progress</div>
</div>
<div class="col-lg-2">
<b><field name="date"/></b>
<div>Date</div>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="project_update_view_tree" model="ir.ui.view">
<field name="name">project.update.view.tree</field>
<field name="model">project.update</field>
<field name="arch" type="xml">
<tree sample="1" js_class="project_update_list">
<field name="name"/>
<field name="user_id" widget="many2one_avatar_user" optional="show"/>
<field name="progress_percentage" string="Progress" widget="percentage" optional="show"/>
<field name="date" optional="show"/>
<field name="color" invisible="1"/>
<field name="status" widget="status_with_color" options="{'color_field': 'color'}"/>
</tree>
</field>
</record>
<record id="project_update_all_action" model="ir.actions.act_window">
<field name="name">Project Updates</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">project.update</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain">[('project_id', '=', active_id)]</field>
<field name="search_view_id" ref="project_update_view_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No updates found. Let's create one!
</p><p>
Get a snapshot of the status of your project and share its progress with key stakeholders.
</p>
</field>
</record>
<record id="project_milestone_view_form" model="ir.ui.view">
<field name="name">project.milestone.view.form</field>
<field name="model">project.milestone</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group name="main_details">
<field name="project_id" invisible="1"/>
<field name="name" placeholder="E.g: Product Launch"/>
<field name="deadline"/>
<field name="is_reached"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="project_milestone_view_tree" model="ir.ui.view">
<field name="name">project.milestone.view.tree</field>
<field name="model">project.milestone</field>
<field name="arch" type="xml">
<tree decoration-danger="is_deadline_exceeded" decoration-muted="is_reached" editable="bottom">
<field name="name"/>
<field name="deadline" optional="show"/>
<field name="is_reached" optional="show"/>
<field name="is_deadline_exceeded" invisible="1"/>
</tree>
</field>
</record>
</odoo>