Compare commits

...

8 Commits

Author SHA1 Message Date
Florian da Costa
3f133ab663 [IMP] Add default agent boolean when creating an agent from the commission profile view 2025-09-10 10:46:26 +02:00
Florian da Costa
47197eb5f6 [FIX] chatter in commission result view + add action name for all commission related new actions 2025-09-09 12:21:32 +02:00
Florian da Costa
5ca18e6374 [MIG] commission_simple_agent_purchase to 18 2025-09-09 12:04:37 +02:00
Benoît
4d52d54460 fix missing import 2025-09-02 17:50:27 +02:00
Benoît
0a260e0b54 mig report 2025-09-02 17:30:48 +02:00
Florian da Costa
46e11948fd [MIG] commission_simple_agent : technical migration to 18 2025-09-02 16:02:40 +02:00
Florian da Costa
a19ec0db45 [MIG] commission_simple to 18 2025-09-02 15:59:08 +02:00
Florian da Costa
6af8aac67e [MIG] sale_agent to v18 2025-09-02 15:32:29 +02:00
16 changed files with 57 additions and 275 deletions

View File

@@ -4,7 +4,7 @@
{
'name': 'Commission Simple',
'version': '16.0.1.0.0',
'version': '18.0.1.0.0',
'category': 'Sales',
'license': 'AGPL-3',
'summary': 'Compute commissions for salesman',
@@ -44,5 +44,5 @@ This module has been written by Alexis de Lattre from Akretion
'views/res_config_settings.xml',
'wizards/commission_compute_view.xml',
],
'installable': False,
'installable': True,
}

View File

@@ -13,7 +13,7 @@
<field name="inherit_id" ref="account.view_move_line_form"/>
<field name="arch" type="xml">
<notebook position="inside">
<page name="commission" string="Commission" attrs="{'invisible': [('display_type', '!=', 'product')]}">
<page name="commission" string="Commission" invisible="display_type != 'product'">
<group name="commission_grp">
<field name="commission_base"/>
<label for="commission_rate"/>

View File

@@ -1,206 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2019 Akretion France (http://www.akretion.com)
@author Alexis de Lattre <alexis.delattre@akretion.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
-->
<odoo>
<menuitem id="commission_root" name="Commissions" parent="account.menu_finance" sequence="11"/>
<menuitem id="commission_config_root" name="Commissions" parent="account.menu_finance_configuration" sequence="110"/>
<!-- PROFILE -->
<record id="commission_profile_form" model="ir.ui.view">
<field name="name">commission.profile.form</field>
<field name="model">commission.profile</field>
<field name="arch" type="xml">
<form>
<sheet>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<group name="main">
<field name="name"/>
<field name="active" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="trigger_type"/>
</group>
<group name="lines" string="Rules">
<field name="line_ids" nolabel="1" colspan="2"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="commission_profile_tree" model="ir.ui.view">
<field name="name">commission.profile.tree</field>
<field name="model">commission.profile</field>
<field name="arch" type="xml">
<tree>
<field name="sequence" widget="handle"/>
<field name="name" decoration-bf="1"/>
<field name="trigger_type" optional="show"/>
<field name="company_id" groups="base.group_multi_company"/>
</tree>
</field>
</record>
<record id="commission_profile_action" model="ir.actions.act_window">
<field name="name">Commission Profiles</field>
<field name="res_model">commission.profile</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="commission_profile_menu" action="commission_profile_action" parent="commission_config_root" sequence="18"/>
<!-- RULE -->
<record id="commission_rule_form" model="ir.ui.view">
<field name="name">commission.rule.form</field>
<field name="model">commission.rule</field>
<field name="arch" type="xml">
<form>
<sheet>
<group name="main">
<field name="profile_id" invisible="not context.get('commission_rule_main_view')"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="company_id" invisible="1"/>
<field name="applied_on" widget="radio"/>
</group>
<group name="match" string="Match">
<field name="partner_ids" attrs="{'invisible': [('applied_on', 'not in', ('0_customer_product', '1_customer_product_category'))], 'required': [('applied_on', 'in', ('0_customer_product', '1_customer_product_category'))]}"/>
<field name="product_categ_ids" attrs="{'invisible': [('applied_on', 'not in', ('1_customer_product_category', '3_product_category'))], 'required': [('applied_on', 'in', ('1_customer_product_category', '3_product_category'))]}"/>
<field name="product_ids" attrs="{'invisible': [('applied_on', 'not in', ('0_customer_product', '2_product'))], 'required': [('applied_on', 'in', ('0_customer_product', '2_product'))]}"/>
<field name="date_start"/>
<field name="date_end"/>
</group>
<group name="compute" string="Compute">
<label for="rate"/>
<div name="rate">
<field name="rate" class="oe_inline"/> %
</div>
</group>
</sheet>
</form>
</field>
</record>
<record id="commission_rule_tree" model="ir.ui.view">
<field name="name">commission.rule.tree</field>
<field name="model">commission.rule</field>
<field name="arch" type="xml">
<tree>
<field name="profile_id" invisible="not context.get('commission_rule_main_view')"/>
<field name="applied_on"/>
<field name="date_start"/>
<field name="date_end"/>
<field name="rate" string="Rate (%)"/>
</tree>
</field>
</record>
<record id="commission_rule_search" model="ir.ui.view">
<field name="name">commission.rule.search</field>
<field name="model">commission.rule</field>
<field name="arch" type="xml">
<search>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
<group name="groupby">
<filter name="profile_groupby" string="Profile" context="{'group_by': 'profile_id'}"/>
</group>
</search>
</field>
</record>
<record id="commission_rule_action" model="ir.actions.act_window">
<field name="name">Commission Rules</field>
<field name="res_model">commission.rule</field>
<field name="view_mode">tree,form</field>
<field name="context">{'commission_rule_main_view': True}</field>
</record>
<menuitem id="commission_rule_menu" action="commission_rule_action" parent="commission_config_root" sequence="20"/>
<!-- RESULT -->
<record id="commission_result_form" model="ir.ui.view">
<field name="name">commission.result.form</field>
<field name="model">commission.result</field>
<field name="arch" type="xml">
<form>
<group name="main">
<group name="main-left">
<field name="partner_id"/>
<field name="profile_id" groups="account.group_account_manager"/>
<field name="company_currency_id" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="amount_total"/>
</group>
<group name="main-right">
<field name="date_range_id"/>
<field name="date_start"/>
<field name="date_end"/>
</group>
</group>
<group name="lines" string="Commission Lines">
<field nolabel="1" name="line_ids" colspan="2">
<tree>
<field name="move_id"/>
<field name="move_line_id"/>
<field name="base"/>
<field name="rate" string="Rate (%)"/>
<field name="amount" sum="1"/>
<field name="rule_id"/>
<field name="company_currency_id" invisible="1"/>
</tree>
</field>
</group>
</form>
</field>
</record>
<record id="commission_result_tree" model="ir.ui.view">
<field name="name">commission.result.tree</field>
<field name="model">commission.result</field>
<field name="arch" type="xml">
<tree>
<field name="date_range_id" optional="show"/>
<field name="date_start" optional="hide"/>
<field name="date_end" optional="hide"/>
<field name="partner_id"/>
<field name="profile_id" groups="account.group_account_manager"/>
<field name="company_currency_id" invisible="1"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="amount_total" sum="1" optional="show"/>
</tree>
</field>
</record>
<record id="commission_result_search" model="ir.ui.view">
<field name="name">commission.result.search</field>
<field name="model">commission.result</field>
<field name="arch" type="xml">
<search>
<field name="partner_id"/>
<field name="date_range_id"/>
<group name="groupby">
<filter name="partner_groupby" string="Salesman" context="{'group_by': 'partner_id'}"/>
<filter name="date_range_groupby" string="Period" context="{'group_by': 'date_range_id'}"/>
</group>
</search>
</field>
</record>
<record id="commission_result_action" model="ir.actions.act_window">
<field name="name">Commissions</field>
<field name="res_model">commission.result</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="commission_result_menu" action="commission_result_action" parent="commission_root" sequence="10"/>
</odoo>

View File

@@ -16,7 +16,7 @@
<field name="arch" type="xml">
<form>
<sheet>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" invisible="active"/>
<group name="main">
<group name="main-left">
<field name="name"/>
@@ -31,12 +31,12 @@
<notebook>
<page name="assignments" string="Assignments">
<field name="assign_ids">
<tree editable="bottom">
<list editable="bottom">
<field name="assign_type"/>
<field name="user_id" attrs="{'required': [('assign_type', '=', 'user')], 'readonly': [('assign_type', '!=', 'user')]}"/>
<field name="user_id" required="assign_type == 'user'" readonly="assign_type != 'user'"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="company_id" invisible="1"/>
</tree>
</list>
</field>
</page>
<page name="rules" string="Rules">
@@ -48,23 +48,24 @@
</field>
</record>
<record id="commission_profile_tree" model="ir.ui.view">
<field name="name">commission.profile.tree</field>
<record id="commission_profile_list" model="ir.ui.view">
<field name="name">commission.profile.list</field>
<field name="model">commission.profile</field>
<field name="arch" type="xml">
<tree>
<list>
<field name="sequence" widget="handle"/>
<field name="name" decoration-bf="1"/>
<field name="trigger_type" optional="show"/>
<field name="company_id" groups="base.group_multi_company"/>
</tree>
</list>
</field>
</record>
<record id="commission_profile_action" model="ir.actions.act_window">
<field name="name">Commission Profiles</field>
<field name="path">commission-profile</field>
<field name="res_model">commission.profile</field>
<field name="view_mode">tree,form</field>
<field name="view_mode">list,form</field>
</record>
<menuitem id="commission_profile_menu" action="commission_profile_action" parent="commission_config_root" sequence="18"/>

View File

@@ -13,8 +13,8 @@
<field name="arch" type="xml">
<form>
<header>
<button name="draft2done" type="object" states="draft" string="Confirm" class="btn-primary"/>
<button name="backtodraft" type="object" states="done" string="Back to Draft" confirm="Are you sure you want to go back to draft?"/>
<button name="draft2done" type="object" invisible="state != 'draft'" string="Confirm" class="btn-primary"/>
<button name="backtodraft" type="object" invisible="state != 'done'" string="Back to Draft" confirm="Are you sure you want to go back to draft?"/>
<field name="state" widget="statusbar"/>
</header>
<group name="main">
@@ -35,7 +35,7 @@
</group>
<group name="lines" string="Commission Lines">
<field nolabel="1" name="line_ids" colspan="2">
<tree>
<list>
<field name="move_id"/>
<field name="date" optional="hide"/>
<field name="partner_id"/>
@@ -49,23 +49,19 @@
<field name="commission_rule_id" optional="hide"/>
<field name="company_currency_id" invisible="1"/>
<field name="currency_id" invisible="1"/>
</tree>
</list>
</field>
</group>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="activity_ids" widget="mail_activity"/>
<field name="message_ids" widget="mail_thread"/>
</div>
<chatter />
</form>
</field>
</record>
<record id="commission_result_tree" model="ir.ui.view">
<field name="name">commission.result.tree</field>
<record id="commission_result_list" model="ir.ui.view">
<field name="name">commission.result.list</field>
<field name="model">commission.result</field>
<field name="arch" type="xml">
<tree>
<list>
<field name="date_range_id" optional="show"/>
<field name="date_start" optional="hide"/>
<field name="date_end" optional="hide"/>
@@ -76,7 +72,7 @@
<field name="company_id" groups="base.group_multi_company"/>
<field name="amount_total" sum="1" optional="show"/>
<field name="state" decoration-info="state == 'draft'" decoration-success="state == 'done'" widget="badge"/>
</tree>
</list>
</field>
</record>
@@ -103,8 +99,9 @@
<record id="commission_result_action" model="ir.actions.act_window">
<field name="name">Commissions</field>
<field name="path">commission-result</field>
<field name="res_model">commission.result</field>
<field name="view_mode">tree,form</field>
<field name="view_mode">list,form</field>
</record>
<menuitem id="commission_result_menu" action="commission_result_action" parent="commission_root" sequence="10"/>

View File

@@ -19,9 +19,9 @@
<field name="company_id" invisible="1"/>
</group>
<group name="match" string="Match">
<field name="partner_ids" attrs="{'invisible': [('applied_on', 'not in', ('0_customer_product', '1_customer_product_category'))], 'required': [('applied_on', 'in', ('0_customer_product', '1_customer_product_category'))]}"/>
<field name="product_categ_ids" attrs="{'invisible': [('applied_on', 'not in', ('1_customer_product_category', '3_product_category'))], 'required': [('applied_on', 'in', ('1_customer_product_category', '3_product_category'))]}"/>
<field name="product_ids" attrs="{'invisible': [('applied_on', 'not in', ('0_customer_product', '2_product'))], 'required': [('applied_on', 'in', ('0_customer_product', '2_product'))]}"/>
<field name="partner_ids" invisible="applied_on not in ('0_customer_product', '1_customer_product_category')" required="applied_on in ('0_customer_product', '1_customer_product_category')"/>
<field name="product_categ_ids" invisible="applied_on not in ('1_customer_product_category', '3_product_category')" required="applied_on in ('1_customer_product_category', '3_product_category')"/>
<field name="product_ids" invisible="applied_on not in ('0_customer_product', '2_product')" required="applied_on in ('0_customer_product', '2_product')"/>
<field name="date_start"/>
<field name="date_end"/>
</group>
@@ -37,18 +37,18 @@
</field>
</record>
<record id="commission_rule_tree" model="ir.ui.view">
<field name="name">commission.rule.tree</field>
<record id="commission_rule_list" model="ir.ui.view">
<field name="name">commission.rule.list</field>
<field name="model">commission.rule</field>
<field name="arch" type="xml">
<tree>
<list>
<field name="profile_id" invisible="not context.get('commission_rule_main_view')"/>
<field name="applied_on"/>
<field name="date_start"/>
<field name="date_end"/>
<field name="rate" string="Rate (%)"/>
<field name="base"/>
</tree>
</list>
</field>
</record>
@@ -68,8 +68,9 @@
<record id="commission_rule_action" model="ir.actions.act_window">
<field name="name">Commission Rules</field>
<field name="path">commission-rule</field>
<field name="res_model">commission.rule</field>
<field name="view_mode">tree,form</field>
<field name="view_mode">list,form</field>
<field name="context">{'commission_rule_main_view': True}</field>
</record>

View File

@@ -13,22 +13,12 @@
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="account.res_config_settings_view_form" />
<field name="arch" type="xml">
<xpath expr="//div[@id='storno']" position="after">
<h2>Commissions</h2>
<div class="row mt16 o_settings_container" id="commission_simple">
<div class="col-12 col-lg-12 o_setting_box" id="commission_simple-settings">
<div class="o_setting_left_pane" />
<div class="o_setting_right_pane">
<div class="row" id="commission_date_range_type_id">
<label
for="commission_date_range_type_id"
class="col-md-5"
/>
<xpath expr="//block[@id='storno']" position="after">
<block title="Commissions" id="commission_simple">
<setting id="commission_date_range_type" title="Date range type">
<field name="commission_date_range_type_id"/>
</div>
</div>
</div>
</div>
</setting>
</block>
</xpath>
</field>
</record>

View File

@@ -4,7 +4,7 @@
{
'name': 'Commission Simple Agent',
'version': '16.0.1.0.0',
'version': '18.0.1.0.0',
'category': 'Sales',
'license': 'AGPL-3',
'summary': 'Glue module between commission_simple and sale_agent',
@@ -18,5 +18,5 @@
'views/commission_profile.xml',
'views/commission_result.xml',
],
'installable': False,
'installable': True,
}

View File

@@ -11,8 +11,8 @@
<field name="model">commission.profile</field>
<field name="inherit_id" ref="commission_simple.commission_profile_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='assign_ids']/tree/field[@name='user_id']" position="after">
<field name="agent_id" attrs="{'required': [('assign_type', '=', 'agent')], 'readonly': [('assign_type', '!=', 'agent')]}"/>
<xpath expr="//field[@name='assign_ids']/list/field[@name='user_id']" position="after">
<field name="agent_id" required="assign_type == 'agent'" readonly="assign_type != 'agent'" context="{'default_agent': True}"/>
</xpath>
</field>
</record>

View File

@@ -7,9 +7,9 @@
<odoo>
<record id="commission_result_tree" model="ir.ui.view">
<record id="commission_result_list" model="ir.ui.view">
<field name="model">commission.result</field>
<field name="inherit_id" ref="commission_simple.commission_result_tree"/>
<field name="inherit_id" ref="commission_simple.commission_result_list"/>
<field name="arch" type="xml">
<field name="assign_type" position="attributes">
<attribute name="decoration-danger">assign_type == 'agent'</attribute>

View File

@@ -4,7 +4,7 @@
{
'name': 'Commission Simple Agent Purchase',
'version': '16.0.1.0.0',
'version': '18.0.1.0.0',
'category': 'Sales',
'license': 'AGPL-3',
'summary': 'Glue module between commission_simple_agent and purchase',
@@ -18,5 +18,5 @@
'views/commission_result.xml',
'wizards/res_config_settings.xml',
],
'installable': False,
'installable': True,
}

View File

@@ -12,7 +12,7 @@
<field name="inherit_id" ref="commission_simple.commission_result_form"/>
<field name="arch" type="xml">
<group name="main-right" position="inside">
<field name="purchase_id" attrs="{'invisible': [('assign_type', '!=', 'agent')]}"/>
<field name="purchase_id" invisible="assign_type != 'agent'"/>
</group>
</field>
</record>

View File

@@ -13,11 +13,10 @@
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="commission_simple.res_config_settings_view_form" />
<field name="arch" type="xml">
<xpath expr="//div[@id='commission_simple-settings']/div[hasclass('o_setting_right_pane')]" position="inside">
<div class="row" id="commission_product_id">
<label for="commission_product_id" class="col-md-5" />
<field name="commission_product_id" context="{'default_detailed_type': 'service', 'default_purchase_ok': True, 'default_sale_ok': False, 'default_available_in_pos': False, 'default_purchase_method': 'purchase'}"/>
</div>
<xpath expr="//block[@id='commission_simple']" position="inside">
<setting id="commission_product" title="Commission Product">
<field name="commission_product_id" context="{'default_type': 'service', 'default_purchase_ok': True, 'default_sale_ok': False, 'default_available_in_pos': False, 'default_purchase_method': 'purchase'}"/>
</setting>
</xpath>
</field>
</record>

View File

@@ -4,7 +4,7 @@
{
'name': 'Sale Agent',
'version': '16.0.1.0.0',
'version': '18.0.1.0.0',
'category': 'Sales',
'license': 'AGPL-3',
'summary': 'Add agent on partner, sale order and customer invoice/refund',
@@ -19,5 +19,5 @@
"views/account_invoice_report.xml",
],
'demo': ['demo/demo.xml'],
'installable': False,
'installable': True,
}

View File

@@ -3,6 +3,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
from odoo.tools import SQL
class AccountInvoiceReport(models.Model):
@@ -11,5 +12,4 @@ class AccountInvoiceReport(models.Model):
invoice_agent_id = fields.Many2one("res.partner", string="Agent", readonly=True)
def _select(self):
select_str = super()._select()
return f"{select_str}, move.invoice_agent_id AS invoice_agent_id"
return SQL("%s, move.invoice_agent_id AS invoice_agent_id", super()._select())

View File

@@ -14,7 +14,7 @@
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='sales_purchases']//group[@name='sale']/field[@name='user_id']" name="user_id" position="after">
<field name="agent_id" attrs="{'invisible': [('parent_id', '!=', False)]}"/>
<field name="agent_id" invisible="parent_id"/>
</xpath>
<group name="misc" position="inside">
<field name="agent"/>