mirror of
https://github.com/bringout/oca-ocb-sale.git
synced 2026-04-27 01:52:02 +02:00
19.0 vanilla
This commit is contained in:
parent
79f83631d5
commit
73afc09215
6267 changed files with 1534193 additions and 1130106 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue