Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MIG] project_forecast_line: migration to 16 #1140

Closed
wants to merge 85 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
cbd0533
[ADD][12.0]project_parent_task_filter
emagdalenaC2i Apr 9, 2019
8be88f0
[12.0][IMP]project_parent_task_filter-Add-group
emagdalenaC2i Apr 16, 2019
126a9be
[12.0][IMP]project_parent_task_filter Add subtask number
emagdalenaC2i Apr 23, 2019
a98b331
Added translation using Weblate (Spanish)
emagdalenaC2i Apr 24, 2019
519b16a
Added translation using Weblate (Spanish)
emagdalenaC2i Apr 24, 2019
3571ab6
[FIX][12.0] parent_task_filter missing newline
tbaden Apr 30, 2019
dcecdf4
Added translation using Weblate (German)
marylla Jul 9, 2019
516679f
[IMP] : black, isort
emagdalenaC2i Oct 16, 2019
6aad8e1
[MIG] project_parent_task_filter: Migration to 13.0
emagdalenaC2i Oct 16, 2019
a90f82f
Added translation using Weblate (Catalan)
eduardgm Feb 2, 2020
c69831e
[MIG] project_parent_task_filter: Migration to 14.0
emagdalenaC2i Oct 12, 2020
e33ecb3
[IMP] project_parent_task_filter: Activate subtasks on installation
skeller1 Nov 9, 2020
8df9497
Added translation using Weblate (Dutch)
Jan 28, 2021
75b7be2
Added translation using Weblate (Spanish (Argentina))
ibuioli Apr 1, 2021
2573e36
Added translation using Weblate (French (France))
Yvesldff Apr 11, 2021
3ce36e6
Added translation using Weblate (French)
Yvesldff May 14, 2021
f107b16
[IMP] project_parent_task_filter: black, isort, prettier
mariadforgeflow Dec 13, 2021
dac283f
[MIG] project_parent_task_filter: Migration to 15.0
mariadforgeflow Dec 14, 2021
891e92e
[IMP][15.0] project_parent_task_filter
emagdalenaC2i Feb 6, 2022
8056193
[IMP] project_parent_task_filter: pre-commit stuff
emagdalenaC2i Nov 28, 2022
02505d9
[MIG] project_parent_task_filter: Migration to 16.0
emagdalenaC2i Nov 28, 2022
3c9bad3
Added translation using Weblate (Italian)
mymage May 15, 2023
58ae433
[ADD] project_hr: Link HR with project
pedrobaeza Nov 17, 2018
f1b5149
Added translation using Weblate (German)
marylla Jul 12, 2019
0c7a8a7
Added translation using Weblate (Slovenian)
sysadminmatmoz Jul 23, 2019
587c7c1
[MIG] project_hr: Migration to v12
Aug 20, 2019
276fd3d
Fix syntax error in project_hr es.po
sbidoul Aug 29, 2019
ca70434
[FIX] project_hr: domain on field breaks other modules
alexey-pelykh Sep 1, 2019
6f53330
[IMP] project_hr: black, isort
Feb 26, 2020
87f8b68
[MIG] project_hr: Migration to 13.0
Feb 26, 2020
e84c297
[ADD] increase test coverage
Apr 10, 2020
5cb7af1
[UPD] Brainbean Apps => CorporateHub
alexey-pelykh Nov 8, 2020
7362edf
[FIX] project_hr: forbid employee tag creation on project task form
skeller1 Nov 9, 2020
93d87e6
Added translation using Weblate (Catalan)
pere-aquarian Nov 18, 2021
73bf471
[MIG] project_hr: Migration to 14.0
Mar 16, 2022
deac7a1
[IMP] project_hr: Compute method name according guidelines
pedrobaeza Mar 22, 2022
9d0fbe3
Added translation using Weblate (Italian)
primes2h Oct 19, 2022
eb089c2
[MIG] project_hr: Migration to 15.0
chandni299 Feb 1, 2023
1bbf56e
[MIG] project_hr: Migration to version 16.0
pilarvargas-tecnativa May 22, 2023
64ba284
[ADD] - Added Project Parent module (#326)
YogeshMahera-SerpentCS Oct 10, 2017
cfda133
[IMP/ADD]Added Child Project Smart button in parent project module
YogeshMahera-SerpentCS Oct 18, 2017
020a38a
[MIG] Migrate project_parent from 10.0 to 12.0
Mar 29, 2019
7844937
[UPD] [no task] parent_project v12
gfcapalbo Dec 13, 2019
64189bf
[FIX] naming
gfcapalbo Mar 10, 2020
e7f1d8e
[FIX] review fixes
gfcapalbo Mar 30, 2020
5b8223a
[FIX]
gfcapalbo Apr 28, 2020
b6f8d05
[IMP] project_parent: black, isort, prettier
Aug 26, 2020
b2d5677
parent_project mig to v13: Add test, refactore a bit project_parent_v…
Aug 25, 2020
18bba8f
parent_project mig to v13: Add project childs count + default_parent_…
Aug 26, 2020
e78b162
[IMP] project_parent: pre-commit stuff
Apr 11, 2023
1fb1a37
[MIG] project_parent: Migration to 16.0
Apr 11, 2023
4f4abee
[15.0][ADD] project_forecast_line
yankinmax Jul 18, 2022
fe5f9fc
project_forecast_line: improve documentation
gurneyalex Aug 17, 2022
8a06116
[FIX] project_forecast_line consolidated capacity
gurneyalex Aug 31, 2022
fe6bff3
[15.0][FIX] project_forecast_line: take roles into account on calc
yankinmax Aug 30, 2022
c2940a9
[15.0][IMP] project_forecast_line: setting to control consumption states
yankinmax Sep 5, 2022
1dc43d9
bump version after clicking on merge by mistake
gurneyalex Sep 5, 2022
bb55fc7
[15.0][FIX] project_forecast_line: add missing access rights
yankinmax Sep 7, 2022
39a0852
[FIX] project_forecast_line: error in consolidated capacity
gurneyalex Sep 13, 2022
db43ab2
Revert "[15.0][IMP] project_forecast_line: setting to control consump…
yankinmax Sep 15, 2022
a815ae4
[FIX] project_forecast_line:
yankinmax Sep 15, 2022
1e4645a
[FIX] project_forecast_line: give sudo rights on hr.leave to create f…
yankinmax Sep 16, 2022
31d35d1
fix the computation of the field and the tests
gurneyalex Oct 11, 2022
1798e34
[15.0][IMP] project_forecast_line:
yankinmax Oct 18, 2022
f7f2a81
[15.0][IMP] project_forecast_line:
yankinmax Oct 20, 2022
b0ecbc3
[IMP] Reorder search filters
yankinmax Nov 2, 2022
74dfb56
[15.0][UPD] project_forecast_line: update forecast lines even if empl…
yankinmax Nov 21, 2022
edb5eca
project_forecast_line: add demo data
gurneyalex Oct 11, 2022
21eef55
fix: check on employee main role computation
gurneyalex Oct 12, 2022
4f05ea3
refactor(project_forecast_line): computed field trigger
gurneyalex Nov 27, 2022
799c5ed
[IMP] speed up for project task forecast
gurneyalex Dec 4, 2022
dc019e1
fix: unlink forecast lines when parent model is unlinked
gurneyalex Dec 6, 2022
c2e877a
refactor: extract a mixin class
gurneyalex Dec 6, 2022
222a581
add some logging about forecast line creation / update
gurneyalex Dec 6, 2022
5f73ee0
switch to forecast line update on employee role update
gurneyalex Dec 6, 2022
5f7f1e1
handle refusal of leaves after validation
gurneyalex Dec 6, 2022
cda57c1
speed up leave approbation
gurneyalex Dec 6, 2022
b260ef1
reduce log verbosity
gurneyalex Dec 6, 2022
2a810a6
refactor SaleOrder tests
gurneyalex Dec 8, 2022
7375574
improve unlink() management
gurneyalex Dec 8, 2022
08ef69e
fix project_forecast_line_holidays_public
gurneyalex Dec 8, 2022
c528c6d
[FIX] project_forecast_line: disappearing forecast
gurneyalex Apr 5, 2023
27ede06
Added translation using Weblate (Italian)
mymage Apr 11, 2023
a0987fb
[IMP] project_forecast_line: pre-commit stuff
martiqubiq Jun 7, 2023
7331cf5
[MIG] project_forecast_line: update version module
martiqubiq Jun 7, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ Available addons
addon | version | maintainers | summary
--- | --- | --- | ---
[project_department](project_department/) | 16.0.1.0.0 | | Project Department Categorization
[project_hr](project_hr/) | 16.0.1.0.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Link HR with project
[project_list](project_list/) | 16.0.1.0.0 | | Projects list view
[project_parent](project_parent/) | 16.0.1.0.0 | | Project Parent
[project_parent_task_filter](project_parent_task_filter/) | 16.0.1.0.0 | | Add a filter to show the parent tasks
[project_role](project_role/) | 16.0.1.0.0 | [![alexey-pelykh](https://github.com/alexey-pelykh.png?size=30px)](https://github.com/alexey-pelykh) | Project role-based roster
[project_stock](project_stock/) | 16.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Project Stock
[project_task_add_very_high](project_task_add_very_high/) | 16.0.1.0.0 | [![astirpe](https://github.com/astirpe.png?size=30px)](https://github.com/astirpe) | Adds extra options 'High' and 'Very High' on tasks
Expand Down
171 changes: 171 additions & 0 deletions project_forecast_line/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
======================
Project Forecast Lines
======================

.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
:target: https://odoo-community.org/page/development-status
:alt: Alpha
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproject-lightgray.png?logo=github
:target: https://github.com/OCA/project/tree/16.0/project_forecast_line
:alt: OCA/project
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/project-16-0/project-16-0-project_forecast_line
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/140/16.0
:alt: Try me on Runbot

|badge1| |badge2| |badge3| |badge4| |badge5|

This module allows to plan your resources using forecast lines.

For each employee of the company, the module will generate forecast line
records with a positive capacity based on their working time schedules. Then,
tasks assigned to employees will generate forecast lines with a negative
capacity which will "consume" the work time capacity of the employees.

The idea is that you can then see the work capacity and scheduled work of
people by summing the "forecasts" per time period. If you have more resources
(positive forecast) than work (negative forecast) you will have a positive net
sum. Otherwise you are in trouble and need to recruit or reschedule your
work. Another way to use the report is checking when the work capacity of a
department becomes positive (or high enough) in order to provide you potential
customers with an estimate of when a project would be able to start.

Forecast lines also come in two states "forecast" or "confirmed", depending on
whether the consumption is confirmed or not. For instance, holidays requests
and sales quotation lines create lines of type "forecast", whereas tasks for
project which are in a running state create lines with type "confirmed".

To get the best experience using the Forecast application you may want to install:

* project_forecast_line_holidays_public module which takes public holidays into
account during forecast lines creation

* project_forecast_line_bokeh_chart module which improves the reports of
project_forecast_line module by using the bokeh widget available in OCA/web

.. IMPORTANT::
This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
`More details on development status <https://odoo-community.org/page/development-status>`_

**Table of contents**

.. contents::
:local:

Usage
=====

Forecast lines have the following data:

* Forecast hours: it is positive for resources (employees) and negative for
things which consume time (project tasks, for instance)

* From and To date which are the beginning and ending of the period of the
capacity

* Consolidated forecast: this is a computed field, which is computed as follows:

* for costs (project tasks for instance) we take the absolute value of the
forecast hours (so it is a positive number)

* for resources (employee capacity for a period), we take the capacity and
substract all the costs for that employee on the same period. So it will be
positive if the employee still has some free time, and negative if he is
overloaded with work.

* this consolidated forecast is currently converted to days to ease
readability of the forecast report


Objects creating forecast lines:

* employees with a forecast role will create forecast line with a positive
capacity and type "confirmed" for each day on which they work. This
information comes from their work calendar, and the different roles that are
linked to the employee.

* draft sale orders (if enabled in the settings) will create forecast lines of
type "forecast" for each sale order line having a product with a forecast
role and start and end dates. The forecast hours are negative

* confirmed sale orders don't create forecast lines. This is handled by the
tasks created at the confirmation of the sale order

* project tasks create forecast lines if they have a linked role and planned start/end
dates. The type of the line will depend on the related project's stage. The
`forecast_hours` field is based on the remaining time of the task, which is spread
on the work days of the planned start and end date of the task. If the
current date is in the middle of the planned duration of the task, it is used
as the start date. If the planned end date is in the past the task does not
generate forecast lines (and you need to fix your planning). In case multiple
employees are assigned to the task the forecast is split equally between
them.

* holiday requests create negative forecast lines with type "forecast" when
they are pending manager validation.

* Validated holiday requests do not generate forecast lines, as they alter the
work calendar of the employee: the employee will not have a positive line
associated to his leave days.

The creation of forecast lines is done either in real time when some actions
are performed by the user (requesting leaves, updating the remaining time on a
project task, timesheeting) and also via a cron that runs on a daily basis. The
cron is required to cleanup lines related to dates in the past and to recompute
the lines related to project tasks by computing the ratio of remaing time on
the tasks on the remaining days, for tasks which are in progress. So, to start
using consolidated forecast report you first need to set everything mentioned
in Usage section. Then, probably run Forecast recomputation cron manually from
Scheduled Actions or wait till cron creates records.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/project/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/project/issues/new?body=module:%20project_forecast_line%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
~~~~~~~

* Camptocamp SA

Contributors
~~~~~~~~~~~~

* Alexandre Fayolle <alexandre.fayolle@camptocamp.com>
* Maksym Yankin <maksym.yankin@camptocamp.com>

Maintainers
~~~~~~~~~~~

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

This module is part of the `OCA/project <https://github.com/OCA/project/tree/16.0/project_forecast_line>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions project_forecast_line/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
38 changes: 38 additions & 0 deletions project_forecast_line/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Copyright 2022 Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Project Forecast Lines",
"summary": "Project Forecast Lines",
"version": "16.0.1.3.1",
"author": "Camptocamp SA, Odoo Community Association (OCA)",
"license": "AGPL-3",
"category": "Project",
"website": "https://github.com/OCA/project",
"depends": ["sale_timesheet", "sale_project", "hr_holidays", "hr_hourly_cost"],
"data": [
"security/forecast_line_security.xml",
"security/ir.model.access.csv",
"views/sale_order_views.xml",
"views/hr_employee_views.xml",
"views/forecast_line_views.xml",
"views/forecast_role_views.xml",
"views/product_views.xml",
"views/project_task_views.xml",
"views/project_project_stage_views.xml",
"views/res_config_settings_views.xml",
"data/ir_cron.xml",
"data/project_data.xml",
],
"demo": [
"demo/res_users.xml",
"demo/forecast_role.xml",
"demo/hr_job.xml",
"demo/hr_employee.xml",
"demo/product.xml",
"demo/project.xml",
"demo/sale.xml",
],
"installable": True,
"development_status": "Alpha",
"application": True,
}
14 changes: 14 additions & 0 deletions project_forecast_line/data/ir_cron.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="cron_forecast_lines" model="ir.cron">
<field name="name">Forecast recomputation</field>
<field name="model_id" ref="project_forecast_line.model_forecast_line" />
<field name="user_id" ref="base.user_root" />
<field name="state">code</field>
<field name="code">model._cron_recompute_all()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False" />
</record>
</odoo>
19 changes: 19 additions & 0 deletions project_forecast_line/data/project_data.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Project Stages -->
<record id="project.project_project_stage_0" model="project.project.stage">
<field name="forecast_line_type">forecast</field>
</record>

<record id="project.project_project_stage_1" model="project.project.stage">
<field name="forecast_line_type">confirmed</field>
</record>

<record id="project.project_project_stage_2" model="project.project.stage">
<field name="forecast_line_type" />
</record>

<record id="project.project_project_stage_3" model="project.project.stage">
<field name="forecast_line_type" />
</record>
</odoo>
15 changes: 15 additions & 0 deletions project_forecast_line/demo/forecast_role.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="forecast_role_pm" model="forecast.role">
<field name="name">Project Manager</field>
<field name="description">Takes care of project management tasks</field>
</record>
<record id="forecast_role_consultant" model="forecast.role">
<field name="name">Consultant</field>
<field name="description">Takes care of business analysis</field>
</record>
<record id="forecast_role_dev" model="forecast.role">
<field name="name">Software Development</field>
<field name="description">Takes care of writing code and solving bugs</field>
</record>
</odoo>
66 changes: 66 additions & 0 deletions project_forecast_line/demo/hr_employee.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="role_employee_mit" model="hr.employee.forecast.role">
<field name="employee_id" ref="hr.employee_mit" />
<field name="role_id" ref="forecast_role_dev" />
</record>
<record id="role_employee_niv" model="hr.employee.forecast.role">
<field name="employee_id" ref="hr.employee_niv" />
<field name="role_id" ref="forecast_role_dev" />
</record>
<record id="role_employee_stw" model="hr.employee.forecast.role">
<field name="employee_id" ref="hr.employee_stw" />
<field name="role_id" ref="forecast_role_dev" />
</record>
<record id="role_employee_chs" model="hr.employee.forecast.role">
<field name="employee_id" ref="hr.employee_chs" />
<field name="role_id" ref="forecast_role_dev" />
</record>
<record id="role_employee_qdp" model="hr.employee.forecast.role">
<field name="employee_id" ref="hr.employee_qdp" />
<field name="role_id" ref="forecast_role_dev" />
</record>
<record id="role_employee_fme" model="hr.employee.forecast.role">
<field name="employee_id" ref="hr.employee_fme" />
<field name="role_id" ref="forecast_role_dev" />
</record>
<record id="role_employee_fpi_consultant" model="hr.employee.forecast.role">
<field name="employee_id" ref="hr.employee_fpi" />
<field name="role_id" ref="forecast_role_consultant" />
<field name="rate" eval="60" />
</record>
<record id="role_employee_fpi_pm" model="hr.employee.forecast.role">
<field name="employee_id" ref="hr.employee_fpi" />
<field name="role_id" ref="forecast_role_pm" />
<field name="rate" eval="40" />
</record>
<record id="role_employee_jth" model="hr.employee.forecast.role">
<field name="employee_id" ref="hr.employee_jth" />
<field name="role_id" ref="forecast_role_consultant" />
</record>
<record id="role_employee_han" model="hr.employee.forecast.role">
<field name="employee_id" ref="hr.employee_han" />
<field name="role_id" ref="forecast_role_dev" />
</record>
<record id="role_employee_jve" model="hr.employee.forecast.role">
<field name="employee_id" ref="hr.employee_jve" />
<field name="role_id" ref="forecast_role_dev" />
</record>
<record id="role_employee_jep" model="hr.employee.forecast.role">
<field name="employee_id" ref="hr.employee_jep" />
<field name="role_id" ref="forecast_role_consultant" />
</record>
<record id="role_employee_jog" model="hr.employee.forecast.role">
<field name="employee_id" ref="hr.employee_jog" />
<field name="role_id" ref="forecast_role_dev" />
</record>
<record id="role_employee_jgo" model="hr.employee.forecast.role">
<field name="employee_id" ref="hr.employee_jgo" />
<field name="role_id" ref="forecast_role_consultant" />
</record>
<record id="role_employee_hne" model="hr.employee.forecast.role">
<field name="employee_id" ref="hr.employee_hne" />
<field name="role_id" ref="forecast_role_consultant" />
</record>

</odoo>
9 changes: 9 additions & 0 deletions project_forecast_line/demo/hr_job.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="hr.job_consultant" model="hr.job">
<field name="role_id" ref="forecast_role_consultant" />
</record>
<record id="hr.job_developer" model="hr.job">
<field name="role_id" ref="forecast_role_dev" />
</record>
</odoo>
40 changes: 40 additions & 0 deletions project_forecast_line/demo/product.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="product_product_consultant" model="product.product">
<field name="name">Consultant</field>
<field name="categ_id" ref="product.product_category_1" />
<field name="standard_price">80</field>
<field name="list_price">120</field>
<field name="detailed_type">service</field>
<field name="uom_id" ref="uom.product_uom_hour" />
<field name="uom_po_id" ref="uom.product_uom_hour" />
<field name="forecast_role_id" ref="forecast_role_consultant" />
<field name="service_tracking">task_in_project</field>
<field name="service_policy">delivered_timesheet</field>
</record>
<record id="product_product_pm" model="product.product">
<field name="name">Project Manager</field>
<field name="categ_id" ref="product.product_category_1" />
<field name="standard_price">950</field>
<field name="list_price">150</field>
<field name="detailed_type">service</field>
<field name="uom_id" ref="uom.product_uom_hour" />
<field name="uom_po_id" ref="uom.product_uom_hour" />
<field name="forecast_role_id" ref="forecast_role_pm" />
<field name="service_tracking">task_in_project</field>
<field name="service_policy">delivered_timesheet</field>
</record>
<record id="product_product_dev" model="product.product">
<field name="name">Software Developer</field>
<field name="categ_id" ref="product.product_category_1" />
<field name="standard_price">80</field>
<field name="list_price">120</field>
<field name="detailed_type">service</field>
<field name="uom_id" ref="uom.product_uom_hour" />
<field name="uom_po_id" ref="uom.product_uom_hour" />
<field name="forecast_role_id" ref="forecast_role_dev" />
<field name="service_tracking">task_in_project</field>
<field name="service_policy">delivered_timesheet</field>
</record>

</odoo>
Loading