Skip to content

Commit b87c212

Browse files
[IMP] event_sale_session: Recovery unconfirmed quantity event
1 parent 0a4ab8f commit b87c212

File tree

9 files changed

+190
-0
lines changed

9 files changed

+190
-0
lines changed

event_sale_session/__manifest__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"category": "Marketing",
1414
"depends": ["event_sale", "event_session"],
1515
"data": [
16+
"views/event_event.xml",
1617
"views/event_session.xml",
1718
"views/sale_order.xml",
1819
"reports/sale_report.xml",

event_sale_session/i18n/es.po

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@ msgstr "Informe analítico de ventas"
113113
msgid "Sales Order Line"
114114
msgstr "Línea de pedido de venta"
115115

116+
#. module: event_sale_session
117+
#: model:ir.model.fields,field_description:event_sale_session.field_event_event__order_line_ids
118+
#: model:ir.model.fields,field_description:event_sale_session.field_event_session__order_line_ids
119+
msgid "Sales Order Lines"
120+
msgstr "Líneas de pedido de venta"
121+
116122
#. module: event_sale_session
117123
#: model:ir.model.fields,field_description:event_sale_session.field_event_event_configurator__event_session_id
118124
#: model:ir.model.fields,field_description:event_sale_session.field_registration_editor_line__session_id
@@ -136,6 +142,29 @@ msgstr "Evento estándar + catering"
136142
msgid "Total sales for this session"
137143
msgstr "Total de ventas para esta sesión"
138144

145+
#. module: event_sale_session
146+
#: model_terms:ir.ui.view,arch_db:event_sale_session.view_event_session_tree
147+
msgid "Total unconfirmed seats in orders"
148+
msgstr "Total plazas de pedidos no confirmados"
149+
150+
#. module: event_sale_session
151+
#: model:ir.model.fields,field_description:event_sale_session.field_event_event__unconfirmed_qty
152+
#: model:ir.model.fields,field_description:event_sale_session.field_event_session__unconfirmed_qty
153+
msgid "Unconfirmed Qty"
154+
msgstr "Cantidad sin asignar"
155+
156+
#. module: event_sale_session
157+
#: model_terms:ir.ui.view,arch_db:event_sale_session.view_event_form
158+
#: model_terms:ir.ui.view,arch_db:event_sale_session.view_event_session_form
159+
msgid "Unconfirmed order seats"
160+
msgstr "Plazas en pedidos sin confirmar"
161+
162+
#. module: event_sale_session
163+
#: model_terms:ir.ui.view,arch_db:event_sale_session.view_event_form
164+
#: model_terms:ir.ui.view,arch_db:event_sale_session.view_event_session_form
165+
msgid "Unconfirmed orders seats"
166+
msgstr "Plazas en pedidos sin confirmar"
167+
139168
#. module: event_sale_session
140169
#: model:event.event.ticket,name:event_sale_session.event_ticket_007_vip
141170
msgid "VIP"

event_sale_session/i18n/event_sale_session.pot

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ msgstr ""
109109
msgid "Sales Order Line"
110110
msgstr ""
111111

112+
#. module: event_sale_session
113+
#: model:ir.model.fields,field_description:event_sale_session.field_event_event__order_line_ids
114+
#: model:ir.model.fields,field_description:event_sale_session.field_event_session__order_line_ids
115+
msgid "Sales Order Lines"
116+
msgstr ""
117+
112118
#. module: event_sale_session
113119
#: model:ir.model.fields,field_description:event_sale_session.field_event_event_configurator__event_session_id
114120
#: model:ir.model.fields,field_description:event_sale_session.field_registration_editor_line__session_id
@@ -132,6 +138,29 @@ msgstr ""
132138
msgid "Total sales for this session"
133139
msgstr ""
134140

141+
#. module: event_sale_session
142+
#: model_terms:ir.ui.view,arch_db:event_sale_session.view_event_session_tree
143+
msgid "Total unconfirmed seats in orders"
144+
msgstr ""
145+
146+
#. module: event_sale_session
147+
#: model:ir.model.fields,field_description:event_sale_session.field_event_event__unconfirmed_qty
148+
#: model:ir.model.fields,field_description:event_sale_session.field_event_session__unconfirmed_qty
149+
msgid "Unconfirmed Qty"
150+
msgstr ""
151+
152+
#. module: event_sale_session
153+
#: model_terms:ir.ui.view,arch_db:event_sale_session.view_event_form
154+
#: model_terms:ir.ui.view,arch_db:event_sale_session.view_event_session_form
155+
msgid "Unconfirmed order seats"
156+
msgstr ""
157+
158+
#. module: event_sale_session
159+
#: model_terms:ir.ui.view,arch_db:event_sale_session.view_event_form
160+
#: model_terms:ir.ui.view,arch_db:event_sale_session.view_event_session_form
161+
msgid "Unconfirmed orders seats"
162+
msgstr ""
163+
135164
#. module: event_sale_session
136165
#: model:event.event.ticket,name:event_sale_session.event_ticket_007_vip
137166
msgid "VIP"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from . import event_event
12
from . import event_registration
23
from . import event_session
34
from . import sale_order_line
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Copyright 2017-19 Tecnativa - David Vidal
2+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
3+
from odoo import api, fields, models
4+
5+
6+
class EventEvent(models.Model):
7+
_inherit = "event.event"
8+
9+
order_line_ids = fields.One2many(
10+
comodel_name="sale.order.line",
11+
inverse_name="event_id",
12+
string="Sales Order Lines",
13+
)
14+
unconfirmed_qty = fields.Integer(
15+
compute="_compute_unconfirmed_qty",
16+
store=True,
17+
)
18+
19+
@api.depends(
20+
"order_line_ids",
21+
"order_line_ids.product_uom_qty",
22+
"order_line_ids.order_id.state",
23+
)
24+
def _compute_unconfirmed_qty(self):
25+
for event in self:
26+
event.unconfirmed_qty = int(
27+
sum(
28+
event.order_line_ids.filtered(
29+
lambda x: x.order_id.state in ("draft", "sent")
30+
).mapped("product_uom_qty")
31+
)
32+
)
33+
34+
def button_open_unconfirmed_event_order(self):
35+
action = self.env["ir.actions.act_window"]._for_xml_id("sale.action_quotations")
36+
sales = (
37+
self.env["sale.order.line"]
38+
.search([("event_id", "in", self.ids)])
39+
.mapped("order_id")
40+
.ids
41+
)
42+
action["domain"] = [("id", "in", sales), ("state", "in", ("draft", "sent"))]
43+
action["context"] = {}
44+
return action

event_sale_session/models/event_session.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,37 @@ class EventSession(models.Model):
2222
compute="_compute_sale_price_subtotal",
2323
groups="sales_team.group_sale_salesman",
2424
)
25+
unconfirmed_qty = fields.Integer(
26+
compute="_compute_unconfirmed_qty",
27+
store=True,
28+
)
29+
30+
@api.depends(
31+
"sale_order_lines_ids",
32+
"sale_order_lines_ids.product_uom_qty",
33+
"sale_order_lines_ids.order_id.state",
34+
)
35+
def _compute_unconfirmed_qty(self):
36+
for session in self:
37+
session.unconfirmed_qty = int(
38+
sum(
39+
session.sale_order_lines_ids.filtered(
40+
lambda x: x.order_id.state in ("draft", "sent")
41+
).mapped("product_uom_qty")
42+
)
43+
)
44+
45+
def button_open_unconfirmed_event_order(self):
46+
action = self.env["ir.actions.act_window"]._for_xml_id("sale.action_quotations")
47+
sales = (
48+
self.env["sale.order.line"]
49+
.search([("event_id", "in", self.ids)])
50+
.mapped("order_id")
51+
.ids
52+
)
53+
action["domain"] = [("id", "in", sales), ("state", "in", ("draft", "sent"))]
54+
action["context"] = {}
55+
return action
2556

2657
@api.depends(
2758
"currency_id",

event_sale_session/tests/test_event_sale_session.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Copyright 2017 Tecnativa - David Vidal
22
# Copyright 2022 Moka Tourisme (https://www.mokatourisme.fr).
3+
# Copyright 2024 Tecnativa - Carolina Fernandez
34
# @author Iván Todorovich <[email protected]>
45
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl-3.0).
56

@@ -36,7 +37,11 @@ def setUpClass(cls):
3637

3738
def test_sale_session(self):
3839
"""Sell an event with session"""
40+
self.assertEqual(self.session.unconfirmed_qty, 5)
41+
self.assertEqual(self.event.unconfirmed_qty, 5)
3942
self.order.action_confirm()
43+
self.assertEqual(self.session.unconfirmed_qty, 0)
44+
self.assertEqual(self.event.unconfirmed_qty, 0)
4045
regs = self.env["event.registration"].search(
4146
[("sale_order_id", "=", self.order.id)]
4247
)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" ?>
2+
<odoo>
3+
<record id="view_event_form" model="ir.ui.view">
4+
<field name="model">event.event</field>
5+
<field name="inherit_id" ref="event.view_event_form" />
6+
<field name="arch" type="xml">
7+
<xpath expr="//div[@name='button_box']" position="inside">
8+
<button
9+
name="button_open_unconfirmed_event_order"
10+
type="object"
11+
class="oe_stat_button"
12+
icon="fa-eye-slash"
13+
help="Unconfirmed orders seats"
14+
>
15+
<field
16+
name="unconfirmed_qty"
17+
widget="statinfo"
18+
string="Unconfirmed order seats"
19+
/>
20+
</button>
21+
</xpath>
22+
</field>
23+
</record>
24+
</odoo>

event_sale_session/views/event_session.xml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,33 @@
2727
widget="statinfo"
2828
/>
2929
</button>
30+
<button
31+
name="button_open_unconfirmed_event_order"
32+
type="object"
33+
class="oe_stat_button"
34+
icon="fa-eye-slash"
35+
help="Unconfirmed orders seats"
36+
>
37+
<field
38+
name="unconfirmed_qty"
39+
widget="statinfo"
40+
string="Unconfirmed order seats"
41+
/>
42+
</button>
3043
</div>
3144
</field>
3245
</record>
46+
<record id="view_event_session_tree" model="ir.ui.view">
47+
<field name="model">event.session</field>
48+
<field name="inherit_id" ref="event_session.view_event_session_tree" />
49+
<field name="arch" type="xml">
50+
<field name="seats_expected" position="after">
51+
<field
52+
name="unconfirmed_qty"
53+
attrs="{'invisible': [('unconfirmed_qty','&lt;', 1)]}"
54+
sum="Total unconfirmed seats in orders"
55+
/>
56+
</field>
57+
</field>
58+
</record>
3359
</odoo>

0 commit comments

Comments
 (0)