Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 9 additions & 0 deletions account_portal_commission/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg
:target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3

=========================
Account Portal Commission
=========================


3 changes: 3 additions & 0 deletions account_portal_commission/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from . import controllers
from . import models
from . import wizards
25 changes: 25 additions & 0 deletions account_portal_commission/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Copyright 2025 Dixmit
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

{
"name": "Account Portal Commission",
"summary": """Add account restriction to portal users to see only their invoices
and add route to show user commissions""",
"version": "16.0.1.0.0",
"license": "AGPL-3",
"author": "Dixmit, CreuBlanca",
"website": "https://github.com/tegin/cb-addons",
"depends": ["account", "account_commission", "portal", "cb_medical_commission"],
"data": [
"views/account_portal_templates.xml",
"security/account_portal_security.xml",
"security/ir.model.access.csv",
"wizards/search_encounters_wizard_view.xml",
],
"demo": [],
"assets": {
"web.assets_frontend": [
"account_portal_commission/static/src/js/*.esm.js",
],
},
}
1 change: 1 addition & 0 deletions account_portal_commission/controllers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import portal
87 changes: 87 additions & 0 deletions account_portal_commission/controllers/portal.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
from odoo import http
from odoo.http import request

from odoo.addons.portal.controllers.portal import CustomerPortal, pager as portal_pager


class RestrictedPortalAccount(CustomerPortal):
def _prepare_home_portal_values(self, counters):
values = super()._prepare_home_portal_values(counters)
if "commission_count" in counters:
commission_count = (
request.env["account.invoice.line.agent"].search_count([])
if request.env["account.invoice.line.agent"].check_access_rights(
"read", raise_exception=False
)
else 0
)
values["commission_count"] = commission_count
return values

@http.route(
["/my/invoices", "/my/invoices/page/<int:page>"],
type="http",
auth="user",
website=True,
)
def portal_my_invoices(
self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, **kw
):
values = self._prepare_my_invoices_values(
page, date_begin, date_end, sortby, filterby
)

# pager
pager = portal_pager(**values["pager"])

# content according to pager and archive selected
invoices = values["invoices"](pager["offset"])
request.session["my_invoices_history"] = invoices.ids[:100]

values.update(
{
"invoices": invoices,
"pager": pager,
}
)

return request.render(
"account_portal_commission.portal_my_invoices_restricted", values
)

@http.route(["/my/commissions"], type="http", auth="user", website=True)
def portal_my_commissions(self):
settled_commission = request.env["account.invoice.line.agent"].search_read(
[("settled", "=", True)], ["amount"]
)
unsettled_commission = request.env["account.invoice.line.agent"].search_read(
[("settled", "=", False)], ["amount"]
)
settled_commission_ids = [x.get("id") for x in settled_commission]
invoiced_settlement = request.env["commission.settlement.line"].search_read(
[
("settlement_id.state", "=", "invoiced"),
("invoice_agent_line_id", "in", settled_commission_ids),
],
["settled_amount"],
)
paid_settlement = request.env["commission.settlement.line"].search_read(
[
("settlement_id.invoice_id.payment_state", "=", "paid"),
("invoice_agent_line_id", "in", settled_commission_ids),
],
["settled_amount"],
)

values = {
"settled_commissions": sum([x.get("amount") for x in settled_commission]),
"unsettled_commissions": sum(
[x.get("amount") for x in unsettled_commission]
),
"invoiced_settlement": sum(
[x.get("settled_amount") for x in invoiced_settlement]
),
"paid_settlement": sum([x.get("settled_amount") for x in paid_settlement]),
"currency_id": request.env.company.currency_id,
}
return request.render("account_portal_commission.portal_my_commissions", values)
1 change: 1 addition & 0 deletions account_portal_commission/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import res_users
17 changes: 17 additions & 0 deletions account_portal_commission/models/res_users.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from odoo import _, models


class ResUsers(models.Model):
_inherit = "res.users"

def action_open_wizard(self):
w = self.env["search_encounters.wizard"].create({})
return {
"type": "ir.actions.act_window",
"target": "new",
"res_model": "search_encounters.wizard",
"name": _("Search Encounters"),
"res_id": w.id,
"views": [(False, "form")],
"context": self.env.context,
}
3 changes: 3 additions & 0 deletions account_portal_commission/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"
73 changes: 73 additions & 0 deletions account_portal_commission/security/account_portal_security.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="group_account_portal_restricted_group" model="res.groups">
<field name="name">Account Portal Restricted Group</field>
<field name="category_id" ref="base.module_category_hidden" />
</record>

<record id="account_portal_restricted_rule" model="ir.rule">
<field name="name">Account Portal Restricted Rule</field>
<field name="model_id" ref="account.model_account_move" />
<field
name="groups"
eval="[(4, ref('group_account_portal_restricted_group'))]"
/>
<field name="domain_force">[('partner_id', '=', user.partner_id.id)]</field>
</record>

<record id="commission_portal_restricted_rule" model="ir.rule">
<field name="name">Commission Portal Restricted Rule</field>
<field
name="model_id"
ref="account_commission.model_account_invoice_line_agent"
/>
<field
name="groups"
eval="[(4, ref('group_account_portal_restricted_group'))]"
/>
<field name="domain_force">[('agent_id', '=', user.partner_id.id)]</field>
</record>

<record model="ir.model.access" id="account_portal_restricted_access">
<field name="name">account.portal.restricted</field>
<field name="model_id" ref="account.model_account_move" />
<field name="group_id" ref="group_account_portal_restricted_group" />
<field name="perm_read" eval="1" />
<field name="perm_create" eval="0" />
<field name="perm_write" eval="0" />
<field name="perm_unlink" eval="0" />
</record>

<record model="ir.model.access" id="commission_portal_restricted_access">
<field name="name">commission.portal.restricted</field>
<field name="model_id" ref="commission.model_commission_settlement" />
<field name="group_id" ref="group_account_portal_restricted_group" />
<field name="perm_read" eval="1" />
<field name="perm_create" eval="0" />
<field name="perm_write" eval="0" />
<field name="perm_unlink" eval="0" />
</record>

<record model="ir.model.access" id="agent_portal_restricted_access">
<field name="name">agent.portal.restricted</field>
<field
name="model_id"
ref="account_commission.model_account_invoice_line_agent"
/>
<field name="group_id" ref="group_account_portal_restricted_group" />
<field name="perm_read" eval="1" />
<field name="perm_create" eval="0" />
<field name="perm_write" eval="0" />
<field name="perm_unlink" eval="0" />
</record>

<record model="ir.model.access" id="commission_line_portal_restricted_access">
<field name="name">commission.line.portal.restricted</field>
<field name="model_id" ref="commission.model_commission_settlement_line" />
<field name="group_id" ref="group_account_portal_restricted_group" />
<field name="perm_read" eval="1" />
<field name="perm_create" eval="0" />
<field name="perm_write" eval="0" />
<field name="perm_unlink" eval="0" />
</record>
</odoo>
2 changes: 2 additions & 0 deletions account_portal_commission/security/ir.model.access.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
account_portal_commission.access_search_encounters_wizard,access_search_encounters_wizard,account_portal_commission.model_search_encounters_wizard,base.group_user,1,1,1,1
14 changes: 14 additions & 0 deletions account_portal_commission/static/src/js/account_portal.esm.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/** @odoo-module */

// force dependencies
import "portal.portal";
import publicWidget from "web.public.widget";

publicWidget.registry.PortalHomeCounters.include({
/**
* @override
*/
_getCountersAlwaysDisplayed() {
return this._super(...arguments).concat(["commission_count"]);
},
});
Loading
Loading