Skip to content

Commit afae1da

Browse files
committed
[ADD] account_portal_commission
1 parent 2dd4675 commit afae1da

10 files changed

Lines changed: 422 additions & 0 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg
2+
:target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
3+
:alt: License: LGPL-3
4+
5+
=====================
6+
Account Portal Commission
7+
=====================
8+
9+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import controllers
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Copyright 2025 Dixmit
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
{
5+
"name": "Account Portal Commission",
6+
"summary": """Add account restriction to portal users to see only their invoices
7+
and add route to show user commissions""",
8+
"version": "16.0.1.0.0",
9+
"license": "AGPL-3",
10+
"author": "Dixmit, CreuBlanca",
11+
"website": "https://github.com/tegin/cb-addons",
12+
"depends": [
13+
"account",
14+
"account_commission",
15+
"portal",
16+
],
17+
"data": [
18+
"views/account_portal_templates.xml",
19+
"security/account_portal_security.xml",
20+
],
21+
"demo": [],
22+
"assets": {
23+
"web.assets_frontend": [
24+
"account_portal_restriction/static/src/js/account_portal.js",
25+
],
26+
},
27+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import portal
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
from odoo import http
2+
from odoo.http import request
3+
4+
from odoo.addons.portal.controllers.portal import CustomerPortal, pager as portal_pager
5+
6+
7+
class RestrictedPortalAccount(CustomerPortal):
8+
def _prepare_home_portal_values(self, counters):
9+
values = super()._prepare_home_portal_values(counters)
10+
if "commission_count" in counters:
11+
commission_count = (
12+
request.env["account.invoice.line.agent"].search_count([])
13+
if request.env["account.invoice.line.agent"].check_access_rights(
14+
"read", raise_exception=False
15+
)
16+
else 0
17+
)
18+
values["commission_count"] = commission_count
19+
return values
20+
21+
@http.route(
22+
["/my/invoices", "/my/invoices/page/<int:page>"],
23+
type="http",
24+
auth="user",
25+
website=True,
26+
)
27+
def portal_my_invoices(
28+
self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, **kw
29+
):
30+
values = self._prepare_my_invoices_values(
31+
page, date_begin, date_end, sortby, filterby
32+
)
33+
34+
# pager
35+
pager = portal_pager(**values["pager"])
36+
37+
# content according to pager and archive selected
38+
invoices = values["invoices"](pager["offset"])
39+
request.session["my_invoices_history"] = invoices.ids[:100]
40+
41+
values.update(
42+
{
43+
"invoices": invoices,
44+
"pager": pager,
45+
}
46+
)
47+
48+
return request.render(
49+
"account_portal_restriction.portal_my_invoices_restricted", values
50+
)
51+
52+
@http.route(["/my/commissions"], type="http", auth="user", website=True)
53+
def portal_my_commissions(self):
54+
settled_commission = request.env["account.invoice.line.agent"].search_read(
55+
[("settled", "=", True)], ["amount"]
56+
)
57+
unsettled_commission = request.env["account.invoice.line.agent"].search_read(
58+
[("settled", "=", False)], ["amount"]
59+
)
60+
settled_commission_ids = [x.get("id") for x in settled_commission]
61+
invoiced_settlement = request.env["commission.settlement.line"].search_read(
62+
[
63+
("settlement_id.state", "=", "invoiced"),
64+
("invoice_agent_line_id", "in", settled_commission_ids),
65+
],
66+
["settled_amount"],
67+
)
68+
paid_settlement = request.env["commission.settlement.line"].search_read(
69+
[
70+
("settlement_id.invoice_id.payment_state", "=", "paid"),
71+
("invoice_agent_line_id", "in", settled_commission_ids),
72+
],
73+
["settled_amount"],
74+
)
75+
76+
values = {
77+
"settled_commissions": sum([x.get("amount") for x in settled_commission]),
78+
"unsettled_commissions": sum(
79+
[x.get("amount") for x in unsettled_commission]
80+
),
81+
"invoiced_settlement": sum(
82+
[x.get("settled_amount") for x in invoiced_settlement]
83+
),
84+
"paid_settlement": sum([x.get("settled_amount") for x in paid_settlement]),
85+
"currency_id": request.env.company.currency_id,
86+
}
87+
return request.render(
88+
"account_portal_restriction.portal_my_commissions", values
89+
)
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<odoo noupdate="1">
3+
<record id="group_account_portal_restricted_group" model="res.groups">
4+
<field name="name">Account Portal Restricted Group</field>
5+
<field name="category_id" ref="base.module_category_hidden" />
6+
</record>
7+
8+
<record id="account_portal_restricted_rule" model="ir.rule">
9+
<field name="name">Account Portal Restricted Rule</field>
10+
<field name="model_id" ref="account.model_account_move" />
11+
<field
12+
name="groups"
13+
eval="[(4, ref('group_account_portal_restricted_group'))]"
14+
/>
15+
<field name="domain_force">[('partner_id', '=', user.partner_id.id)]</field>
16+
</record>
17+
18+
<record id="commission_portal_restricted_rule" model="ir.rule">
19+
<field name="name">Commission Portal Restricted Rule</field>
20+
<field
21+
name="model_id"
22+
ref="account_commission.model_account_invoice_line_agent"
23+
/>
24+
<field
25+
name="groups"
26+
eval="[(4, ref('group_account_portal_restricted_group'))]"
27+
/>
28+
<field name="domain_force">[('agent_id', '=', user.partner_id.id)]</field>
29+
</record>
30+
31+
<record model="ir.model.access" id="account_portal_restricted_access">
32+
<field name="name">account.portal.restricted</field>
33+
<field name="model_id" ref="account.model_account_move" />
34+
<field name="group_id" ref="group_account_portal_restricted_group" />
35+
<field name="perm_read" eval="1" />
36+
<field name="perm_create" eval="0" />
37+
<field name="perm_write" eval="0" />
38+
<field name="perm_unlink" eval="0" />
39+
</record>
40+
41+
<record model="ir.model.access" id="commission_portal_restricted_access">
42+
<field name="name">commission.portal.restricted</field>
43+
<field name="model_id" ref="commission.model_commission_settlement" />
44+
<field name="group_id" ref="group_account_portal_restricted_group" />
45+
<field name="perm_read" eval="1" />
46+
<field name="perm_create" eval="0" />
47+
<field name="perm_write" eval="0" />
48+
<field name="perm_unlink" eval="0" />
49+
</record>
50+
51+
<record model="ir.model.access" id="agent_portal_restricted_access">
52+
<field name="name">agent.portal.restricted</field>
53+
<field
54+
name="model_id"
55+
ref="account_commission.model_account_invoice_line_agent"
56+
/>
57+
<field name="group_id" ref="group_account_portal_restricted_group" />
58+
<field name="perm_read" eval="1" />
59+
<field name="perm_create" eval="0" />
60+
<field name="perm_write" eval="0" />
61+
<field name="perm_unlink" eval="0" />
62+
</record>
63+
64+
<record model="ir.model.access" id="commission_line_portal_restricted_access">
65+
<field name="name">commission.line.portal.restricted</field>
66+
<field name="model_id" ref="commission.model_commission_settlement_line" />
67+
<field name="group_id" ref="group_account_portal_restricted_group" />
68+
<field name="perm_read" eval="1" />
69+
<field name="perm_create" eval="0" />
70+
<field name="perm_write" eval="0" />
71+
<field name="perm_unlink" eval="0" />
72+
</record>
73+
</odoo>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/** @odoo-module */
2+
3+
import publicWidget from "web.public.widget";
4+
import "portal.portal"; // force dependencies
5+
6+
publicWidget.registry.PortalHomeCounters.include({
7+
/**
8+
* @override
9+
*/
10+
_getCountersAlwaysDisplayed() {
11+
return this._super(...arguments).concat(["commission_count"]);
12+
},
13+
});

0 commit comments

Comments
 (0)