mirror of
https://github.com/bringout/oca-mrp.git
synced 2026-04-23 11:32:07 +02:00
97 lines
3.7 KiB
Python
97 lines
3.7 KiB
Python
# Copyright 2017-19 Tecnativa - David Vidal
|
|
# Copyright 2021 Moka Tourisme (https://www.mokatourisme.fr).
|
|
# @author Iván Todorovich <ivan.todorovich@gmail.com>
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class EventSession(models.Model):
|
|
_inherit = "event.session"
|
|
|
|
# NOTE: This field name doesn't follow the convention but it's kept like this
|
|
# to match the field name in core `event.event` model.
|
|
sale_order_lines_ids = fields.One2many(
|
|
comodel_name="sale.order.line",
|
|
inverse_name="event_session_id",
|
|
groups="sales_team.group_sale_salesman",
|
|
string="All sale order lines pointing to this session",
|
|
)
|
|
sale_price_subtotal = fields.Monetary(
|
|
string="Sales (Tax Excluded)",
|
|
compute="_compute_sale_price_subtotal",
|
|
groups="sales_team.group_sale_salesman",
|
|
)
|
|
|
|
@api.depends(
|
|
"currency_id",
|
|
"sale_order_lines_ids.price_subtotal",
|
|
"sale_order_lines_ids.currency_id",
|
|
"sale_order_lines_ids.company_id",
|
|
"sale_order_lines_ids.order_id.date_order",
|
|
)
|
|
def _compute_sale_price_subtotal(self):
|
|
"""Compute Sales (Tax Excluded)
|
|
|
|
This method is almost exactly the same than the one in core event_sale module
|
|
:meth:`~event_sale.models.event_event._compute_sale_price_subtotal`, only here
|
|
we compute the event.session data instead.
|
|
"""
|
|
date_now = fields.Datetime.now()
|
|
sale_price_by_session = {}
|
|
if self.ids:
|
|
session_subtotals = self.env["sale.order.line"].read_group(
|
|
[
|
|
("state", "!=", "cancel"),
|
|
("event_session_id", "in", self.ids),
|
|
("price_subtotal", "!=", 0),
|
|
],
|
|
["event_session_id", "currency_id", "price_subtotal:sum"],
|
|
["event_session_id", "currency_id"],
|
|
lazy=False,
|
|
)
|
|
currency_ids = [
|
|
session_subtotal["currency_id"][0]
|
|
for session_subtotal in session_subtotals
|
|
]
|
|
company_by_session = {
|
|
rec._origin.id or rec.id: rec.company_id for rec in self
|
|
}
|
|
currency_by_session = {
|
|
rec._origin.id or rec.id: rec.currency_id for rec in self
|
|
}
|
|
currency_by_id = {
|
|
currency.id: currency
|
|
for currency in self.env["res.currency"].browse(currency_ids)
|
|
}
|
|
for session_subtotal in session_subtotals:
|
|
price_subtotal = session_subtotal["price_subtotal"]
|
|
session_id = session_subtotal["event_session_id"][0]
|
|
currency_id = session_subtotal["currency_id"][0]
|
|
sale_price = currency_by_session[session_id]._convert(
|
|
price_subtotal,
|
|
currency_by_id[currency_id],
|
|
company_by_session[session_id],
|
|
date_now,
|
|
)
|
|
if session_id in sale_price_by_session:
|
|
sale_price_by_session[session_id] += sale_price
|
|
else:
|
|
sale_price_by_session[session_id] = sale_price
|
|
|
|
for rec in self:
|
|
rec.sale_price_subtotal = sale_price_by_session.get(
|
|
rec._origin.id or rec.id, 0
|
|
)
|
|
|
|
def action_view_linked_orders(self):
|
|
"""View sales orders
|
|
|
|
Simlar to :meth:`~event_sale.models.event_event.action_view_linked_orders`
|
|
"""
|
|
action = self.env["ir.actions.actions"]._for_xml_id("sale.action_orders")
|
|
action["domain"] = [
|
|
("state", "!=", "cancel"),
|
|
("order_line.event_session_id", "in", self.ids),
|
|
]
|
|
return action
|