Files
tryton/modules/commission/doc/design.rst
T

154 lines
3.9 KiB
ReStructuredText

******
Design
******
The *Commission Module* introduces and extends the following concepts:
.. _model-commission.agent:
Agent
=====
An *Agent* links a party to a `Plan <model-commission.plan>`.
An *Agent* can be either an agent or a principal of the `Company
<company:model-company.company>`.
.. seealso::
Agents are found by opening the main menu item:
|Commission --> Agents|__
.. |Commission --> Agents| replace:: :menuselection:`Commission --> Agents`
__ https://demo.tryton.org/model/commission.agent
.. _model-commission.agent.selection:
Agent Selection
================
The *Agent Selection* contains a sets of rules to assign automatically an
`Agent <model-commission.agent>` to sales based on criteria.
.. _model-commission.plan:
Plan
====
A *Plan* defines how the `Commission <model-commission>` of an `Agent
<model-commission.agent>` is computed using a list of formula with criteria.
.. seealso::
Plans are found by opening the main menu item:
|Commission -> Configuration --> Plans|__
.. |Commission -> Configuration --> Plans| replace:: :menuselection:`Commission -> Configuration --> Plans`
__ https://demo.tryton.org/model/commission.plan
.. _model-commission:
Commission
==========
The *Commission* concept is used to register the amount that is due to an agent
or to receive from a principal.
An `Invoice <account_invoice:model-account.invoice>` can be generated using the
*Invoice* button.
The commissions invoiced together are grouped by `Agent
<model-commission.agent>`.
.. seealso::
Commissions are found by opening the main menu item:
|Commission --> Commissions|__
.. |Commission --> Commissions| replace:: :menuselection:`Commission --> Commissions`
__ https://demo.tryton.org/model/commission
Wizards
-------
.. _wizard-commission.create_invoice:
Create Commission Invoice
^^^^^^^^^^^^^^^^^^^^^^^^^
The *Create Commission Invoice* wizard helps the user to invoice all the
pending `Commission <model-commission>` based on search criteria like the date
period or the `Agent <model-commission.agent>`.
.. _model.commission.reporting.agent:
Commission Reporting Agent
==========================
The *Commission Reporting Agent* sums the commission amounts per `Agent
<model-commission.agent>` for the selected period from the ``Context``.
.. _concept-product:
Product
=======
The *Product* concept is extended to store the principals who pay a commission
when the product is sold.
.. seealso::
The `Product <product:concept-product>` concept is introduced by the
:doc:`Product Module <product:index>`.
.. _model-party.party:
Party
=====
The *Party* is extended to store its `Agent Selection
<model-commission.agent.selection>`.
.. seealso::
The `Party <party:model-party.party>` concept is introduced by the
:doc:`Party Module <party:index>`.
.. _model-sale.sale:
Sale
====
The *Sale* is extended to store an `Agent <model-commission.agent>` on the
header and `Principal <model-commission.agent>` on the lines.
Those values are copied to the generated `Invoice
<account_invoice:model-account.invoice>`.
When a `Product <product:concept-product>` is selected, its principal is copied
on the line.
When the *Sale* is quoted and if there is no *Agent* filled, one is computed
using the `Agent Selection <model-commission.agent.selection>`.
.. seealso::
The `Sale <sale:model-sale.sale>` concept is introduced by the :doc:`Sale
Module <sale:index>`.
.. _model-account.invoice:
Invoice
========
The *Invoice* concept is extended to store an `Agent <model-commission.agent>`
on the header and `Principal <model-commission.agent>` on the lines.
When the *Invoice* is posted the corresponding `Commissions <model-commission>`
are created.
Its due date is set later depending on the commission method.
.. seealso::
The `Invoice <account_invoice:model-account.invoice>` concept is introduced
by the :doc:`Account Invoice Module <account_invoice:index>`.