Author: |
Numigi |
License: |
LGPL-3 |
Branch: |
TA#48575 |
Repository: |
Numigi/odoo-project-addons |
Dependencies: |
account,
analytic,
and
hr_timesheet |
Languages: |
PO File (80, 9.1%),
Python (577, 65.6%),
XML (157, 17.8%),
and
reStructuredText (66, 7.5%) |
Other branches: |
11.0,
12.0,
14.0,
452,
TA#42546,
TA#43556,
TA#44075---manage_project_budget_using_milestone,
TA#44076---Update-dockerfile,
TA#44215---project_task_kanban_view_partner,
TA#445738---project_outsourcing_timesheet_manage_contacts,
TA#45451---add_project_milestone_week_duration,
TA#45451---fix_after_test,
TA#45452,
TA#45459---project_milestone_timeline_dynamic,
TA#45464---project_manager_access_right,
TA#45526,
TA#45528,
TA#45902---analytic_line_revenue_v14,
TA#45902---project_cost_smart_button_migration,
TA#45902-analytic_line_employee_migration,
TA#46088---project_timesheet_time_control_employee_pin,
TA#46412---project_default_task_stage,
TA#46412---project_stage_no_quick_create,
TA#46412---project_task_date_planned,
TA#46412---project_type,
TA#46412--project_task_full_text_search,
TA#47760---correctif#6,
TA#47906,
TA#51167,
TumbaoJu-patch-1,
abenzbiria-patch-1,
jbreard-patch-2,
and
timesheet_analytic_update |
<h1 class="title">Project Task Analytic Lines</h1>
<div class="contents topic" id="table-of-contents">
<p class="topic-title">Table of Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#odoo-context" id="id1">Odoo Context</a></li>
<li><a class="reference internal" href="#summary" id="id2">Summary</a></li>
<li><a class="reference internal" href="#journal-entries" id="id3">Journal Entries</a></li>
<li><a class="reference internal" href="#supplier-invoices" id="id4">Supplier Invoices</a><ul>
<li><a class="reference internal" href="#taxes-included-in-cost" id="id5">Taxes Included In Cost</a></li>
</ul>
</li>
<li><a class="reference internal" href="#list-views-filters" id="id6">List Views Filters</a><ul>
<li><a class="reference internal" href="#analytic-lines" id="id7">Analytic Lines</a></li>
<li><a class="reference internal" href="#journal-items" id="id8">Journal Items</a></li>
</ul>
</li>
<li><a class="reference internal" href="#constraints" id="id9">Constraints</a></li>
<li><a class="reference internal" href="#limits" id="id10">Limits</a><ul>
<li><a class="reference internal" href="#purchase-orders" id="id11">Purchase Orders</a></li>
<li><a class="reference internal" href="#stockable-products" id="id12">Stockable Products</a></li>
</ul>
</li>
<li><a class="reference internal" href="#contributors" id="id13">Contributors</a></li>
</ul>
</div>
<a name="odoo-context"></a>
<h2><a class="toc-backref" href="#id1">Odoo Context</a></h2>
<p>In vanilla Odoo, analytic lines can not be grouped or filtered by task, except for timesheet lines.</p>
<p>Therefore, if you need to generate a cost report, only the timesheet lines will be shown per task.</p>
<a name="summary"></a>
<h2><a class="toc-backref" href="#id2">Summary</a></h2>
<p>This module adds a <cite>Task</cite> field on supplier invoice lines and journal entries.</p>
<p>The task is propagated:</p>
<ol class="arabic simple">
<li>from invoice lines to journal entries</li>
<li>from journal entries to analytic lines</li>
</ol>
<p>Then, the analytic lines can be filtered and grouped by task.</p>
<a name="journal-entries"></a>
<h2><a class="toc-backref" href="#id3">Journal Entries</a></h2>
<p>As member of the group <cite>Accounting / Billing</cite>, on a draft journal entry, I find a new field <cite>Task</cite>.</p>
<img alt="static/description/journal_entry_task.png" src="static/description/journal_entry_task.png" />
<p>The field is readonly if the analytic account is not filled.</p>
<img alt="static/description/journal_entry_task_readonly.png" src="static/description/journal_entry_task_readonly.png" />
<p>If an analytic account is selected, I am able to select a task related to project of the analytic account.</p>
<img alt="static/description/journal_entry_task_selected.png" src="static/description/journal_entry_task_selected.png" />
<p>I post the journal entry.</p>
<img alt="static/description/journal_entry_posted.png" src="static/description/journal_entry_posted.png" />
<p>In the list of analytic lines, I notice that the task was propagated.</p>
<img alt="static/description/journal_entry_analytic_lines.png" src="static/description/journal_entry_analytic_lines.png" />
<a name="supplier-invoices"></a>
<h2><a class="toc-backref" href="#id4">Supplier Invoices</a></h2>
<p>As member of the group <cite>Accounting / Billing</cite>, on a draft supplier invoice, I find a new field <cite>Task</cite>.</p>
<img alt="static/description/supplier_invoice_form.png" src="static/description/supplier_invoice_form.png" />
<p>The field is readonly if the analytic account is not filled.</p>
<img alt="static/description/supplier_invoice_task_readonly.png" src="static/description/supplier_invoice_task_readonly.png" />
<p>If an analytic account is selected, I am able to select a task related to project of the analytic account.</p>
<img alt="static/description/supplier_invoice_task_selected.png" src="static/description/supplier_invoice_task_selected.png" />
<p>I validate the invoice.</p>
<img alt="static/description/supplier_invoice_validated.png" src="static/description/supplier_invoice_validated.png" />
<p>On the journal entry, I notice that the task was propagated to the expense line.</p>
<img alt="static/description/supplier_invoice_move.png" src="static/description/supplier_invoice_move.png" />
<p>In the list of analytic lines, I notice that the task was propagated.</p>
<img alt="static/description/supplier_invoice_analytic_lines.png" src="static/description/supplier_invoice_analytic_lines.png" />
<a name="taxes-included-in-cost"></a>
<h3><a class="toc-backref" href="#id5">Taxes Included In Cost</a></h3>
<p>The module supports taxes included in the analytic cost.</p>
<p>In the form view of a tax, I check the field "Included in Analytic Cost".</p>
<img alt="static/description/tax_with_analytic.png" src="static/description/tax_with_analytic.png" />
<p>On the invoice, when selecting the tax, the task is propagated along with the analytic account.</p>
<img alt="static/description/supplier_invoice_with_tax.png" src="static/description/supplier_invoice_with_tax.png" />
<p>On the journal entry, the task is propagated from the invoice tax.</p>
<img alt="static/description/supplier_invoice_with_tax_move.png" src="static/description/supplier_invoice_with_tax_move.png" />
<a name="list-views-filters"></a>
<h2><a class="toc-backref" href="#id6">List Views Filters</a></h2>
<a name="analytic-lines"></a>
<h3><a class="toc-backref" href="#id7">Analytic Lines</a></h3>
<p>In the list of analytic lines, I see a new field <cite>Task</cite>.</p>
<blockquote>
<p>A new technical field (origin_task_id) was added because the field task_id
available in vanilla Odoo could not be used.</p>
<p>The field task_id is used by Odoo for timesheet lines.
If task_id was used for any other purpose, some standard functionalities would be broken.</p>
</blockquote>
<img alt="static/description/analytic_lines_origin_task_column.png" src="static/description/analytic_lines_origin_task_column.png" />
<p>I am able to search by task:</p>
<img alt="static/description/analytic_lines_search.png" src="static/description/analytic_lines_search.png" />
<p>I am able to group by task:</p>
<img alt="static/description/analytic_lines_group.png" src="static/description/analytic_lines_group.png" />
<a name="journal-items"></a>
<h3><a class="toc-backref" href="#id8">Journal Items</a></h3>
<p>In the list view of journal items, I see a new field <cite>Task</cite>.</p>
<img alt="static/description/journal_items_task_column.png" src="static/description/journal_items_task_column.png" />
<p>I am able to search by task:</p>
<img alt="static/description/journal_items_search.png" src="static/description/journal_items_search.png" />
<p>I am able to group by task:</p>
<img alt="static/description/journal_items_group.png" src="static/description/journal_items_group.png" />
<a name="constraints"></a>
<h2><a class="toc-backref" href="#id9">Constraints</a></h2>
<p>Once a task is selected on an invoice or a journal entry, it is not possible to move the task to another project.</p>
<p>Otherwise, when changing the project on the task, a blocking message is displayed.</p>
<img alt="static/description/task_change_project_constraint.png" src="static/description/task_change_project_constraint.png" />
<a name="limits"></a>
<h2><a class="toc-backref" href="#id10">Limits</a></h2>
<a name="purchase-orders"></a>
<h3><a class="toc-backref" href="#id11">Purchase Orders</a></h3>
<p>This module does not define how tasks are propagated from a purchase order to a supplier invoice.</p>
<p>The module <cite>project_wip_outsourcing</cite> inherits this module and adds the business logic related to outsourcing.
For now, outsourcing is the only known case where defining a task on a PO is relevant.</p>
<a name="stockable-products"></a>
<h3><a class="toc-backref" href="#id12">Stockable Products</a></h3>
<p>An analytic account and a task should not be set on a supplier invoice for stockable products.
The expense for a stockable product is recognized in Odoo at the customer invoice validation.</p>
<p>The module is intended for services (or even consummable products).</p>
<p>However, the module does not constrain on which type of product a task can be used.</p>
<a name="contributors"></a>
<h2><a class="toc-backref" href="#id13">Contributors</a></h2>
<ul class="simple">
<li>Numigi (tm) and all its contributors (<a class="reference external" href="https://bit.ly/numigiens">https://bit.ly/numigiens</a>)</li>
</ul>