Skip to content
Extraits de code Groupes Projets
Valider 1af6d7df rédigé par Juliana's avatar Juliana
Parcourir les fichiers

[UPD]Update available seat + display site page + manage sold out

parent 183e731f
Branches
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -38,6 +38,13 @@ class EventSession(models.Model): ...@@ -38,6 +38,13 @@ class EventSession(models.Model):
session_name = fields.Char("Nom de l'atelier") session_name = fields.Char("Nom de l'atelier")
seats_min = fields.Integer(string="Nombre minimum de participants") seats_min = fields.Integer(string="Nombre minimum de participants")
seats_available_unconfirmed = fields.Integer(
string="Places disponibles en pré-inscription",
compute="_compute_seats_available_unconfirmed",
store=True,
)
intervenant_ids = fields.One2many( intervenant_ids = fields.One2many(
"res.partner.intervenant", "session_id", string="Intervenants" "res.partner.intervenant", "session_id", string="Intervenants"
) )
...@@ -45,6 +52,8 @@ class EventSession(models.Model): ...@@ -45,6 +52,8 @@ class EventSession(models.Model):
description = fields.Text("Description de l'atelier") description = fields.Text("Description de l'atelier")
duration = fields.Float("Durée", default=1.5, compute="_compute_duration") duration = fields.Float("Durée", default=1.5, compute="_compute_duration")
duration_slot = fields.Float(
"Durée des créneaux", compute="_compute_duration_slot", strore=True)
color = fields.Integer("Couleur") color = fields.Integer("Couleur")
event_session_slot_ids = fields.One2many( event_session_slot_ids = fields.One2many(
...@@ -87,6 +96,14 @@ class EventSession(models.Model): ...@@ -87,6 +96,14 @@ class EventSession(models.Model):
else: else:
session.duration = 0.0 session.duration = 0.0
@api.depends("event_session_slot_ids", "event_session_slot_ids.duration")
def _compute_duration_slot(self):
for session in self:
duration = 0.0
for slot in session.event_session_slot_ids:
duration += slot.duration
session.duration_slot = duration
@api.depends("name") @api.depends("name")
def _compute_website_url(self): def _compute_website_url(self):
super(EventSession, self)._compute_website_url() super(EventSession, self)._compute_website_url()
...@@ -97,12 +114,24 @@ class EventSession(models.Model): ...@@ -97,12 +114,24 @@ class EventSession(models.Model):
slug(session), slug(session),
) )
# @api.depends("seats_unconfirmed", "seats_reserved", "seats_used", "seats_max")
# def _compute_seats_available(self):
# # Ajout des réservations non confirmées
# super(EventSession, self)._compute_seats_available()
# for rec in self:
# rec.seats_available = (
# rec.seats_max
# - (rec.seats_reserved + rec.seats_used + rec.seats_unconfirmed)
# if rec.seats_max > 0
# else 0
# )
@api.depends("seats_unconfirmed", "seats_reserved", "seats_used", "seats_max") @api.depends("seats_unconfirmed", "seats_reserved", "seats_used", "seats_max")
def _compute_seats_available(self): def _compute_seats_available_unconfirmed(self):
# Ajout des réservations non confirmées # Ajout des réservations non confirmées
super(EventSession, self)._compute_seats_available() super(EventSession, self)._compute_seats_available()
for rec in self: for rec in self:
rec.seats_available = ( rec.seats_available_unconfirmed = (
rec.seats_max rec.seats_max
- (rec.seats_reserved + rec.seats_used + rec.seats_unconfirmed) - (rec.seats_reserved + rec.seats_used + rec.seats_unconfirmed)
if rec.seats_max > 0 if rec.seats_max > 0
......
...@@ -65,6 +65,46 @@ ...@@ -65,6 +65,46 @@
</nav> </nav>
</template> </template>
<!-- Option: Topbar: optional tags filters-->
<!--<template-->
<!-- id="agenda_session_topbar_tag"-->
<!-- inherit_id="cgscop_website_event.agenda_topbar"-->
<!-- name="Filtrer par Tags"-->
<!-- active="True"-->
<!-- >-->
<!-- <xpath expr="//ul[hasclass('o_weagenda_topbar_filters')]" position="inside">-->
<!-- <t t-foreach="tag_categories" t-as="tag_category">-->
<!-- <li-->
<!-- t-if="tag_category.tag_ids and any(tag.color for tag in tag_category.tag_ids)"-->
<!-- class="nav-item dropdown me-2 my-1"-->
<!-- >-->
<!-- <a-->
<!-- href="#"-->
<!-- role="button"-->
<!-- class="btn dropdown-toggle"-->
<!-- data-bs-toggle="dropdown"-->
<!-- >-->
<!-- <i class="fa fa-folder-open" />-->
<!-- <t t-out="tag_category.name" />-->
<!-- </a>-->
<!-- <div class="dropdown-menu">-->
<!-- <t t-foreach="tag_category.tag_ids" t-as="tag">-->
<!-- <a-->
<!-- t-att-href="'/event/%s/session?%s' % (-->
<!-- slug(event),-->
<!-- keep_query('*', tags=str((search_tags - tag).ids if tag in search_tags else (tag | search_tags).ids))-->
<!-- )"-->
<!-- t-if="tag.color"-->
<!-- t-attf-class="dropdown-item d-flex align-items-center justify-content-between #{'active' if tag in search_tags else ''}"-->
<!-- >-->
<!-- <t t-out="tag.name" />-->
<!-- </a>-->
<!-- </t>-->
<!-- </div>-->
<!-- </li>-->
<!-- </t>-->
<!-- </xpath>-->
<!--</template>-->
<!-- ============================================================ --> <!-- ============================================================ -->
<!-- CONTENT: MAIN TEMPLATES --> <!-- CONTENT: MAIN TEMPLATES -->
...@@ -198,12 +238,16 @@ ...@@ -198,12 +238,16 @@
t-att-href="'/event/%s/session/%s' % (slug(event), slug(session))" t-att-href="'/event/%s/session/%s' % (slug(event), slug(session))"
class="text-black text-bold" class="text-black text-bold"
> >
<t t-out="session.session_name" /> <t t-out="session.session_name" /><t
t-if="session.event_session_registrations_sold_out"
> - COMPLET</t>
</a> </a>
</t> </t>
<t t-else=""> <t t-else="">
<span class="text-muted text-bold"> <span class="text-muted text-bold">
<t t-out="session.session_name" /> <t t-out="session.session_name" /><t
t-if="session.event_session_registrations_sold_out"
> - COMPLET</t>
</span> </span>
</t> </t>
</div> </div>
......
...@@ -70,7 +70,10 @@ ...@@ -70,7 +70,10 @@
class="mx-3 pt-3 mb-3 d-flex justify-content-between flex-column flex-md-row" class="mx-3 pt-3 mb-3 d-flex justify-content-between flex-column flex-md-row"
> >
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<span class="h4 mb-0" t-out="session.session_name" /> <span class="h4 mb-0" t-out="session.session_name" /><t
t-if="session.event_session_registrations_sold_out"
> - COMPLET</t>
<span t-if="session.seats_max"><t t-esc="session.seats_available"/> place(s) restante(s) et <t t-esc="session.seats_available_unconfirmed"/> place(s) restante(s) en pré-inscription</span>
<div> <div>
<t t-foreach="session.tag_ids" t-as="tag"> <t t-foreach="session.tag_ids" t-as="tag">
<span <span
...@@ -83,7 +86,7 @@ ...@@ -83,7 +86,7 @@
</div> </div>
</div> </div>
<div class="mx-3 text-muted"> <div class="mx-3">
<t t-if="session.date_begin"> <t t-if="session.date_begin">
<span <span
t-field="session.date_begin" t-field="session.date_begin"
...@@ -98,13 +101,34 @@ ...@@ -98,13 +101,34 @@
(<span t-out="event.date_tz" />) (<span t-out="event.date_tz" />)
</t> </t>
</t> </t>
<t t-if="session.duration"> <t t-if="session.duration_slot">
(<span (<span
t-field="session.duration" t-field="session.duration_slot"
t-options='{"widget": "duration", "unit": "hour", "round": "minute"}' t-options='{"widget": "duration", "unit": "hour", "round": "minute"}'
/>) />)
</t> </t>
</div> </div>
<div class="mx-3 mt-2 text-muted" t-if="session.event_session_slot_ids">
<ul t-foreach="session.event_session_slot_ids" t-as="slot">
<li>
<span
t-field="slot.date"
t-options='{"hide_seconds":"True", "format": "short", "tz_name": event.date_tz}'
/>
-
<span
t-field="slot.date_end"
t-options='{"hide_seconds":"True", "format": "short", "tz_name": event.date_tz}'
/>
<t t-if="slot.duration">
(<span
t-field="slot.duration"
t-options='{"widget": "duration", "unit": "hour", "round": "minute"}'
/>)
</t>
</li>
</ul>
</div>
<hr class="mt-2 mb-0" /> <hr class="mt-2 mb-0" />
......
...@@ -107,9 +107,6 @@ ...@@ -107,9 +107,6 @@
</div> </div>
</div> </div>
</t> </t>
<!-- &lt;!&ndash; Cards &ndash;&gt;-->
<!-- <div class="col-12" t-call="cgscop_website_event.sessions_display_cards" />-->
<!-- List -->
<div class="col-12" t-call="cgscop_website_event.sessions_display_list" /> <div class="col-12" t-call="cgscop_website_event.sessions_display_list" />
</template> </template>
...@@ -185,13 +182,17 @@ ...@@ -185,13 +182,17 @@
class="me-2" class="me-2"
t-att-href="session.website_url" t-att-href="session.website_url"
> >
<span t-field="session.session_name" /> <span t-field="session.session_name" /><t
t-if="session.event_session_registrations_sold_out"
> - COMPLET</t>
</a> </a>
<t t-else=""> <t t-else="">
<span <span
class="me-2" class="me-2"
t-field="session.session_name" t-field="session.session_name"
/> /><t
t-if="session.event_session_registrations_sold_out"
> - COMPLET</t>
</t> </t>
<span <span
t-if="not session.website_published and is_event_user" t-if="not session.website_published and is_event_user"
...@@ -200,21 +201,39 @@ ...@@ -200,21 +201,39 @@
Non publié Non publié
</span> </span>
</span> </span>
<div class="text-muted d-flex align-items-center"> <div class="d-flex align-items-center">
<!-- <span class="text-muted" t-out="session.partner_tag_line"/>--> <span t-if="session.seats_max"><t t-esc="session.seats_available"/> place(s) restante(s) et <t t-esc="session.seats_available_unconfirmed"/> place(s) restante(s) en pré-inscription</span><br/>
</div>
<div class="d-flex flex-column">
<t t-if="sessions_date and today_tz &lt;= sessions_date">
<span>Durée:
<t <t
t-if="sessions_date and today_tz &lt;= sessions_date" class="d-none d-md-block "
> t-esc="session.duration_slot"
<!-- Duration (desktop only) --> t-options="{'widget': 'duration', 'digital': False, 'format': 'short', 'unit': 'hour', 'round': 'minute'}"
/></span>
</t>
</div>
<div class="text-muted d-flex flex-column">
<ul t-foreach="session.event_session_slot_ids" t-as="slot">
<li>
<span <span
class="d-none d-md-block ms-2" t-field="slot.date"
>&amp;bull;</span> t-options='{"hide_seconds":"True", "format": "short", "tz_name": event.date_tz}'
/>
-
<span <span
class="d-none d-md-block ms-2" t-field="slot.date_end"
t-out="session.duration" t-options='{"hide_seconds":"True", "format": "short", "tz_name": event.date_tz}'
t-options="{'widget': 'duration', 'digital': False, 'format': 'short', 'unit': 'hour', 'round': 'minute'}"
/> />
<t t-if="slot.duration">
(<span
t-field="slot.duration"
t-options='{"widget": "duration", "unit": "hour", "round": "minute"}'
/>)
</t> </t>
</li>
</ul>
</div> </div>
</div> </div>
<!-- Aside column: date, tags --> <!-- Aside column: date, tags -->
......
...@@ -68,11 +68,14 @@ ...@@ -68,11 +68,14 @@
</sheet> </sheet>
</form> </form>
</field> </field>
<field name="duration" /> <field name="duration_slot" />
<field name="duration" invisible="1"/>
</field> </field>
<group name="right" position="inside"> <group name="right" position="inside">
<field name="seats_max" /> <field name="seats_max" />
<field name="seats_min" /> <field name="seats_min" />
<field name="seats_available" string="Places disponibles"/>
<field name="seats_available_unconfirmed" />
<field name="color" widget="color_picker" /> <field name="color" widget="color_picker" />
<field <field
name="tag_ids" name="tag_ids"
......
...@@ -159,7 +159,9 @@ ...@@ -159,7 +159,9 @@
> - COMPLET</t> > - COMPLET</t>
</a> </a>
<t t-else=""> <t t-else="">
<span class="me-2" t-field="session.session_name" /> <span class="me-2" t-field="session.session_name" /><t
t-if="session.event_session_registrations_sold_out"
> - COMPLET</t>
</t> </t>
<span <span
t-if="not session.website_published and is_event_user" t-if="not session.website_published and is_event_user"
...@@ -168,16 +170,37 @@ ...@@ -168,16 +170,37 @@
Non Publié Non Publié
</span> </span>
</span> </span>
<div class="text-muted d-flex align-items-center"> <div class="text-muted d-flex flex-column">
<!-- Duration (desktop only) --> <t t-if="session.seats_max">
<span t-if="session.seats_max"><t t-esc="session.seats_available"/> place(s) restante(s) et <t t-esc="session.seats_available_unconfirmed"/> place(s) restante(s) en pré-inscription</span>
</t>
<span>Durée:
<t
class="d-none d-md-block "
t-esc="session.duration_slot"
t-options="{'widget': 'duration', 'digital': False, 'format': 'short', 'unit': 'hour', 'round': 'minute'}"
/></span>
</div>
<div class="text-muted d-flex flex-column">
<ul t-foreach="session.event_session_slot_ids" t-as="slot">
<li>
<span <span
class="d-none d-md-block ms-2" t-field="slot.date"
>&amp;bull;</span> t-options='{"hide_seconds":"True", "format": "short", "tz_name": event.date_tz}'
/>
-
<span <span
class="d-none d-md-block ms-2" t-field="slot.date_end"
t-out="session.duration" t-options='{"hide_seconds":"True", "format": "short", "tz_name": event.date_tz}'
t-options="{'widget': 'duration', 'digital': False, 'format': 'short', 'unit': 'hour', 'round': 'minute'}"
/> />
<t t-if="slot.duration">
(<span
t-field="slot.duration"
t-options='{"widget": "duration", "unit": "hour", "round": "minute"}'
/>)
</t>
</li>
</ul>
</div> </div>
</div> </div>
<!-- Aside column: date, tags --> <!-- Aside column: date, tags -->
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter