Skip to content
Extraits de code Groupes Projets
Valider 3cb9626b rédigé par Benjamin - Le Filament's avatar Benjamin - Le Filament
Parcourir les fichiers

[UPD] update template list

parent 84213a50
Branches
Étiquettes v1.7.4
Aucune requête de fusion associée trouvée
...@@ -7,19 +7,17 @@ from odoo.http import request ...@@ -7,19 +7,17 @@ from odoo.http import request
from odoo.addons.http_routing.models.ir_http import slug, unslug from odoo.addons.http_routing.models.ir_http import slug, unslug
class WebsitePartnerPage(http.Controller): class WebsiteTraining(http.Controller):
# ------------------------------------------------------ # ------------------------------------------------------
# Routes # Routes
# ------------------------------------------------------ # ------------------------------------------------------
@http.route(["/formation/liste"], type="http", auth="public", website=True) @http.route(["/formations/liste"], type="http", auth="public", website=True)
def training_list(self, access_token=False, **post): def training_list(self, access_token=False, **post):
""" """
Affiche la liste des formations Affiche la liste des formations
""" """
training_ids = request.env["training.training"].sudo().search([ training_ids = self._get_training_ids()
# ("is_published", "=", True),
# ("state", "in", ["2_broadcast", "3_confirmed"]),
])
values = {"training_ids": training_ids, "edit_page": False} values = {"training_ids": training_ids, "edit_page": False}
return request.render("website_training.training_list", values) return request.render("website_training.training_list", values)
...@@ -41,10 +39,27 @@ class WebsitePartnerPage(http.Controller): ...@@ -41,10 +39,27 @@ class WebsitePartnerPage(http.Controller):
): ):
if slug(training_sudo) != current_slug: if slug(training_sudo) != current_slug:
return request.redirect("/formation/%s" % slug(training_sudo)) return request.redirect("/formation/%s" % slug(training_sudo))
values = {"training": training_sudo, "edit_page": False} values = {
"training": training_sudo,
"edit_page": False,
"title": training_sudo.program_id.name,
}
return request.render("website_training.training_page", values) return request.render("website_training.training_page", values)
raise request.not_found() raise request.not_found()
# ------------------------------------------------------ # ------------------------------------------------------
# Buttons # Business functions
# ------------------------------------------------------ # ------------------------------------------------------
def _get_training_ids(self):
"""
Return training to publish
"""
training_ids = (
request.env["training.training"]
.sudo()
.search([
("is_published", "=", True),
("state", "in", ["2_broadcast", "3_confirmed"]),
])
)
return training_ids.sorted("date_start")
...@@ -30,7 +30,8 @@ class Training(models.Model): ...@@ -30,7 +30,8 @@ class Training(models.Model):
for training in self: for training in self:
if training.website_id and training.website_id.domain: if training.website_id and training.website_id.domain:
training.website_url = "%s/formation/%s" % ( training.website_url = "%s/formation/%s" % (
training.website_id.domain, slug(training) training.website_id.domain,
slug(training),
) )
def action_valid(self): def action_valid(self):
......
...@@ -27,3 +27,39 @@ ...@@ -27,3 +27,39 @@
} }
} }
} }
.training_tags {
// background color-based for new styling
.o_training_color_1 {
background-color: rgb(240, 96, 80);
}
.o_training_color_2 {
background-color: rgb(244, 164, 96);
}
.o_training_color_3 {
background-color: rgb(247, 205, 31);
}
.o_training_color_4 {
background-color: rgb(108, 193, 237);
}
.o_training_color_5 {
background-color: rgb(129, 73, 104);
}
.o_training_color_6 {
background-color: rgb(235, 126, 127);
}
.o_training_color_7 {
background-color: rgb(44, 131, 151);
}
.o_training_color_8 {
background-color: rgb(71, 85, 119);
}
.o_training_color_9 {
background-color: rgb(214, 20, 95);
}
.o_training_color_10 {
background-color: rgb(48, 195, 129);
}
.o_training_color_11 {
background-color: rgb(147, 101, 184);
}
}
...@@ -6,9 +6,10 @@ ...@@ -6,9 +6,10 @@
<div class="oe_structure" id="oe_structure_website_training_1"/> <div class="oe_structure" id="oe_structure_website_training_1"/>
<div class="container"> <div class="container">
<div class="row my-3 py-3"> <div class="row my-3 py-3">
<h1>Liste des formations</h1> <h1 class="mb-4">Liste des formations</h1>
<t t-foreach="training_ids" t-as="training"> <t t-foreach="training_ids" t-as="training">
<t t-call="website_training.training_card" /> <t t-call="website_training.training_card" />
<hr class="my-4"/>
</t> </t>
</div> </div>
</div> </div>
...@@ -20,6 +21,119 @@ ...@@ -20,6 +21,119 @@
<template id="training_card" name="Training Card"> <template id="training_card" name="Training Card">
<div class="col-12"> <div class="col-12">
<h5 class="text-center" t-field="training.program_id"/> <h5 class="text-center" t-field="training.program_id"/>
<div class="text-center my-4 training_tags">
<t t-foreach="training.program_id.tag_ids" t-as="tag">
<span t-attf-class="badge rounded-pill #{'o_training_color_%s' % tag.color if tag.color else ''}" t-out="tag.name" />
</t>
</div>
</div>
<div class="row">
<div class="col-12 col-lg-5 order-lg-2 mb-4">
<div class="bg-100 p-4">
<!-- Dates -->
<div t-if="training.slot_ids" class="training-right-block">
<div class="right-block-title">
Dates de la formation
</div>
<div class="right-block-value">
Du <span t-field="training.date_start" t-options="{'widget': 'date', 'format': 'dd/MM/YYYY'}" />
au <span t-field="training.date_end" t-options="{'widget': 'date', 'format': 'dd/MM/YYYY'}" /> :
<ul>
<t t-foreach="training.slot_ids" t-as="slot">
<li>
<span t-field="slot.date_start" t-options="{'widget': 'date', 'format': 'dd/MM/YYYY'}" /> -
<span t-field="slot.date_start" t-options="{'widget': 'datetime', 'format': 'HH:mm'}" />
à <span t-field="slot.date_end" t-options="{'widget': 'datetime', 'format': 'HH:mm'}" />
<br />(<span t-field="slot.duration" /> heures)
</li>
</t>
</ul>
</div>
</div>
<!-- Durée -->
<div t-if="training.training_duration" class="training-right-block">
<div class="right-block-title">
Durée
</div>
<div class="right-block-value">
<span t-field="training.training_duration" /> heures
</div>
</div>
<!-- Lieu -->
<div t-if="training.place" class="training-right-block">
<div class="right-block-title">
Lieu
</div>
<div class="right-block-value">
<span t-field="training.place" />
</div>
</div>
<!-- Modalité -->
<div t-if="training.training_type_id" class="training-right-block">
<div class="right-block-title">
Modalité
</div>
<div class="right-block-value">
<span t-field="training.training_type_id.name" />
</div>
</div>
<!-- Type -->
<div t-if="training.type" class="training-right-block">
<div class="right-block-title">
Format
</div>
<div class="right-block-value">
<span t-field="training.type" />
</div>
</div>
<!-- Prix -->
<div class="training-right-block" t-if="training.price_inter > 0 or training.price_intra > 0 or training.price_comment">
<div class="right-block-title">
Coût
</div>
<div class="right-block-value">
<t t-set="vat" t-value="1.2 if training.is_vat else 1" />
<t t-if="training.type == 'inter'">
<t t-if="training.price_inter > 0">
<span t-out="training.price_inter * vat" /> € TTC
</t>
</t>
<t t-if="training.type == 'intra'">
<t t-if="training.price_intra > 0">
<span t-out="training.price_intra * vat" /> € TTC
</t>
</t>
<t t-if="training.price_comment">
<span t-field="training.price_comment" />
</t>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-7 mb-2">
<!-- Données du programme -->
<div class="p-4">
<div t-if="training.program_id.objective" class="training-description-block">
<h5>Objectifs de formation</h5>
<div t-field="training.program_id.objective" />
</div>
<div t-if="training.program_id.students_profile" class="training-description-block">
<h5>Public concerné</h5>
<div t-field="training.program_id.students_profile" />
</div>
<div t-if="training.program_id.prerequisites" class="training-description-block">
<h5>Pré-requis</h5>
<div t-field="training.program_id.prerequisites" />
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12 text-center">
<a t-attf-href="/formation/#{slug(training)}" class="btn btn-primary px-4">
Voir le détail
</a>
</div>
</div> </div>
</template> </template>
</odoo> </odoo>
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
<field name="inherit_id" ref="training.training_training_tree" /> <field name="inherit_id" ref="training.training_training_tree" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='state']" position="after"> <xpath expr="//field[@name='state']" position="after">
<field name="is_published" /> <field name="is_published" widget="boolean_toggle" />
</xpath> </xpath>
</field> </field>
</record> </record>
......
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