19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:32:12 +01:00
parent 79f83631d5
commit 73afc09215
6267 changed files with 1534193 additions and 1130106 deletions

View file

@ -4,25 +4,22 @@
from odoo import api, fields, models
class Event(models.Model):
class EventEvent(models.Model):
_inherit = 'event.event'
sale_order_lines_ids = fields.One2many(
'sale.order.line', 'event_id',
groups='sales_team.group_sale_salesman',
string='All sale order lines pointing to this event')
sale_price_subtotal = fields.Monetary(
string='Sales (Tax Excluded)', compute='_compute_sale_price_subtotal',
sale_price_total = fields.Monetary(
string='Sales (Tax Included)', compute='_compute_sale_price_total',
groups='sales_team.group_sale_salesman')
currency_id = fields.Many2one(
'res.currency', string='Currency',
related='company_id.currency_id', readonly=True)
@api.depends('company_id.currency_id',
'sale_order_lines_ids.price_subtotal', 'sale_order_lines_ids.currency_id',
'sale_order_lines_ids.price_total', '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):
""" Takes all the sale.order.lines related to this event and converts amounts
def _compute_sale_price_total(self):
""" Takes only confirmed the sale.order.lines related to this event and converts amounts
from the currency of the sale order to the currency of the event company.
To avoid extra overhead, we use conversion rates as of 'today'.
@ -31,56 +28,28 @@ class Event(models.Model):
have to do one conversion per sale.order (and a sale.order is created every time
we sell a single event ticket). """
date_now = fields.Datetime.now()
sale_price_by_event = {}
if self.ids:
event_subtotals = self.env['sale.order.line']._read_group(
[('event_id', 'in', self.ids),
('price_subtotal', '!=', 0),
('state', '!=', 'cancel')],
['event_id', 'currency_id', 'price_subtotal:sum'],
['event_id', 'currency_id'],
lazy=False
event_subtotals = self.env['sale.order.line']._read_group(
[('event_id', 'in', self.ids), ('price_total', '!=', 0), ('state', '=', 'sale')],
['event_id', 'currency_id'],
['price_total:sum'],
)
event_subtotals_mapping = dict.fromkeys(self._origin, 0)
for event, currency, sum_price_total in event_subtotals:
event_subtotals_mapping[event] += event.currency_id._convert(
sum_price_total,
currency,
event.company_id or self.env.company,
date_now,
)
company_by_event = {
event._origin.id or event.id: event.company_id
for event in self
}
currency_by_event = {
event._origin.id or event.id: event.currency_id
for event in self
}
currency_by_id = {
currency.id: currency
for currency in self.env['res.currency'].browse(
[event_subtotal['currency_id'][0] for event_subtotal in event_subtotals]
)
}
for event_subtotal in event_subtotals:
price_subtotal = event_subtotal['price_subtotal']
event_id = event_subtotal['event_id'][0]
currency_id = event_subtotal['currency_id'][0]
sale_price = currency_by_event[event_id]._convert(
price_subtotal,
currency_by_id[currency_id],
company_by_event[event_id] or self.env.company,
date_now)
if event_id in sale_price_by_event:
sale_price_by_event[event_id] += sale_price
else:
sale_price_by_event[event_id] = sale_price
for event in self:
event.sale_price_subtotal = sale_price_by_event.get(event._origin.id or event.id, 0)
event.sale_price_total = event_subtotals_mapping.get(event._origin, 0)
def action_view_linked_orders(self):
""" Redirects to the orders linked to the current events """
""" Redirects to only the confirmed orders linked to the current events """
sale_order_action = self.env["ir.actions.actions"]._for_xml_id("sale.action_orders")
sale_order_action.update({
'domain': [('state', '!=', 'cancel'), ('order_line.event_id', 'in', self.ids)],
'domain': [('state', '=', 'sale'), ('order_line.event_id', 'in', self.ids)],
'context': {'create': 0},
})
return sale_order_action