Skip to content
Extraits de code Groupes Projets

Comparer les révisions

Les modifications sont affichées comme si la révision source était fusionnée avec la révision cible. En savoir plus sur la comparaison des révisions.

Source

Sélectionner le projet cible
No results found
Sélectionner une révision Git
  • 16.0
1 résultat

Cible

Sélectionner le projet cible
  • lefilament/training/website_training
1 résultat
Sélectionner une révision Git
  • 16.0
1 résultat
Afficher les modifications

Commits on Source 2

......@@ -57,9 +57,11 @@ class WebsiteTraining(http.Controller):
training_ids = (
request.env["training.training"]
.sudo()
.search([
.search(
[
("is_published", "=", True),
("state", "in", ["2_broadcast", "3_confirmed"]),
])
]
)
)
return training_ids.sorted("date_start")
# Copyright 2019-2022 Le Filament (<https://le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
from odoo import api, fields, models
from odoo.addons.http_routing.models.ir_http import slug
......@@ -13,6 +13,9 @@ class Training(models.Model):
website_id = fields.Many2one(
default=lambda self: self.env.company.website_id,
)
is_published = fields.Boolean(
string="Publié", compute="_compute_is_published", store=True, readonly=False
)
# ------------------------------------------------------
# Override ORM
......@@ -21,31 +24,39 @@ class Training(models.Model):
# ------------------------------------------------------
# Compute
# ------------------------------------------------------
@api.depends("state")
def _compute_is_published(self):
for training in self:
training.is_published = True if training.state in ["2_boradcast", "3_confirm"] else False
# ------------------------------------------------------
# Inherit parent
# ------------------------------------------------------
def _compute_website_url(self):
super(Training, self)._compute_website_url()
res = super(Training, self)._compute_website_url()
for training in self:
if training.website_id and training.website_id.domain:
training.website_url = "%s/formation/%s" % (
training.website_id.domain,
slug(training),
)
return res
def action_valid(self):
super(Training, self).action_valid()
res = super(Training, self).action_valid()
self.update({"is_published": True})
return res
def action_done(self):
super(Training, self).action_done()
res = super(Training, self).action_done()
self.update({"is_published": False})
return res
def action_cancel(self):
super(Training, self).action_cancel()
res = super(Training, self).action_cancel()
if self.is_published:
self.update({"is_published": False})
return res
# ------------------------------------------------------
# Buttons
......
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
/***************************
/** Global
***************************/
.training-summary-block {
border-radius: 0.75rem;
.training-right-block {
margin-bottom: 16px;
.right-block-title {
font-size: 1.2rem;
font-weight: 300;
font-weight: 400;
line-height: 1.2;
border-bottom: 1px solid #aaa;
border-bottom: 1px solid #777;
}
.right-block-value {
......@@ -23,7 +26,7 @@
li {
margin-bottom: 12px;
list-style: circle;
}
}
}
}
......
......@@ -6,11 +6,14 @@
<div class="oe_structure" id="oe_structure_website_training_1"/>
<div class="container">
<div class="row my-3 py-3">
<h1 class="mb-4">Liste des formations</h1>
<t t-foreach="training_ids" t-as="training">
<h1 class="mb-2">Nos formations</h1>
<hr class="mb-5" />
<div class="accordion" id="accordionTraining">
<div t-foreach="training_ids" t-as="training" class="accordion-item">
<t t-call="website_training.training_card" />
<hr class="my-4"/>
</t>
</div>
</div>
</div>
</div>
<div class="oe_structure" id="oe_structure_website_training_2"/>
......@@ -19,17 +22,28 @@
</template>
<template id="training_card" name="Training Card">
<div class="col-12">
<div class="accordion-header">
<div class="" type="button" data-bs-toggle="collapse" t-attf-data-bs-target="#collapse{{training.id}}" aria-expanded="true" t-attf-aria-controls="collapse{{training.id}}">
<h5 class="text-center" t-field="training.program_id"/>
<div class="text-center">
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'}" />
- <span t-field="training.training_duration" /> heures
- <span t-field="training.training_type_id.name" />
</div>
<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>
<div t-attf-id="collapse{{training.id}}" class="accordion-collapse collapse">
<div class="accordion-body">
<div class="row">
<div class="col-12 col-lg-5 order-lg-2 mb-4">
<div class="bg-100 p-4">
<div class="bg-200 p-4 training-summary-block">
<!-- Dates -->
<div t-if="training.slot_ids" class="training-right-block">
<div class="right-block-title">
......@@ -135,5 +149,7 @@
</a>
</div>
</div>
</div>
</div>
</template>
</odoo>
......@@ -3,6 +3,15 @@
<template id="training_page" name="Training Page">
<t t-call="website.layout">
<div id="wrap">
<div class="container">
<div class="row">
<div class="col pt-4">
<a href="/formations/liste" title="Liste des formations">
&lt; Retour à la liste
</a>
</div>
</div>
</div>
<div class="oe_structure" id="oe_structure_website_training_1"/>
<div class="container">
<div class="row my-3 py-3">
......@@ -17,9 +26,13 @@
<template id="training_detail" name="Training Details">
<div class="col-12 mb-5">
<h1 class="text-center" t-field="training.program_id"/>
<div class="text-center text-uppercase">
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'}" />
</div>
</div>
<div class="col-12 col-lg-4 order-lg-2 mb-4">
<div class="p-4 bg-200">
<div class="p-4 bg-200 training-summary-block">
<!-- Durée -->
<div t-if="training.training_duration" class="training-right-block">
<div class="right-block-title">
......@@ -108,21 +121,17 @@
</div>
</div>
<div name="div_training_button" class="training-right-block" t-if="training.state in ['2_broadcast', '3_confirmed']">
<t t-if="training.students_count >= training.nb_student_max">
<a
t-attf-href="#{training.get_registration_survey_start_url()}"
class="btn btn-secondary"
style="pointer-events: none;"
name="but_training_registration">
Inscriptions closes
</a>
<t t-if="training.students_count >= training.nb_student_max or (training.date_limit and training.date_limit &lt; datetime.date.today())">
<div class="alert alert-warning">
Les inscriptions sont closes
</div>
</t>
<t t-else="">
<a
t-attf-href="#{training.get_registration_survey_start_url()}"
class="btn btn-secondary"
class="btn btn-primary px-4"
name="but_training_registration">
Inscription
S'inscrire
</a>
</t>
</div>
......
......@@ -32,8 +32,8 @@
<field name="model">training.training</field>
<field name="inherit_id" ref="training.training_training_tree" />
<field name="arch" type="xml">
<xpath expr="//field[@name='state']" position="after">
<field name="is_published" widget="boolean_toggle" />
<xpath expr="//field[@name='date_end']" position="after">
<field name="is_published" string="Publié" optional="show" />
</xpath>
</field>
</record>
......