<script>function toggleSession(sessionId, button) {var session = button.parentElement;var allSessions = document.querySelectorAll('.session');allSessions.forEach(function (s) {if (s !== session) {s.classList.remove('open');}});session.classList.toggle('open');}function toggleAllSessions(button) {var allSessions = document.querySelectorAll('.session');var allOpen = Array.from(allSessions).every(function (s) {return s.classList.contains('open');});allSessions.forEach(function (s) {if (allOpen) {s.classList.remove('open');} else {s.classList.add('open');}});}</script><section id="content"><h2 id="course_name">{{ nombre[app.request.locale] | default(nombre | first) | raw }}</h2><div class="course-actions">{% include '_partials/courses/_favorito.html.twig' with {actividad: actividad,tipo: tipo} %}{% include '_partials/courses/_share.html.twig' with {actividad: actividad,tipo: tipo} %}</div><div id="course_description">{{ descripcion[app.request.locale] | default(descripcion | first) | raw }}</div>{% if primeraGrupoDeSolicitud is defined and primeraGrupoDeSolicitud is not empty and primeraGrupoDeSolicitud.grupoSesiones is defined %}<div id="sesiones"><div class="sessions-container"><div class="session"><button class="session-toggle" onclick="toggleAllSessions(this)"><span class="session-line"></span>Sesiones<i class="fas fa-chevron-down arrow"></i></button>{% for gs in primeraGrupoDeSolicitud.grupoSesiones %}{% set sessionId = "sesion-" ~ loop.index %}<div id="{{ sessionId }}" class="session-content">{{ gs.dataHoraInici ? gs.dataHoraInici|date('d-m-Y H:i') : 'Sin inicio' }} -{{ gs.dataHoraFinal ? gs.dataHoraFinal|date('d-m-Y H:i') : 'Sin fin' }}</div>{% endfor %}</div></div></div>{% endif %}{# Mensaje de motivo del rechazo #}{% if actividad.inscripcion is defined and actividad.inscripcion.motivoRechazo %}{% if actividad.inscripcion.estado == 'RECHAZADO_SUBSANABLE' %}<div class="alert alert-warning" role="alert"><strong>Motiu del rebuig:</strong> {{ actividad.inscripcion.motivoRechazo }}</div>{% elseif actividad.inscripcion.estado in ['RECHAZADO', 'RECHAZADO_DEFINITIVO'] %}<div class="alert alert-danger" role="alert"><strong>Motiu del rebuig:</strong> {{ actividad.inscripcion.motivoRechazo }}</div>{% endif %}{% endif %}<div class="actions mt-4">{# Definir variables que se usan en todo el template (INC-670) #}{% set isDefinitivelyRejected = actividad.inscripcion is defined and actividad.inscripcion.estado in ['RECHAZADO', 'RECHAZADO_DEFINITIVO'] %}{% set isRejected = actividad.inscripcion is defined and actividad.inscripcion.estado in ['RECHAZADO', 'RECHAZADO_DEFINITIVO', 'RECHAZADO_SUBSANABLE'] %}{# INC-670: Detectar baja solicitada tanto por el flag explícito como por el estado #}{% set bajaSolicitada = (actividad.inscripcion.bajaSolicitada is defined and actividad.inscripcion.bajaSolicitada)or (actividad.estado is defined and actividad.estado == 'dado_de_baja')or (actividad.inscripcion.estado is defined and actividad.inscripcion.estado == 'DADO_DE_BAJA') %}{# --- INICIO LÓGICA CORREGIDA PARA BAJA (INC-670) --- #}{% if bajaSolicitada %}<div class="alert alert-info"><i class="fas fa-info-circle"></i>Has solicitado la baja de este curso{# INC-670: Buscar fecha de baja en inscripcion.fechaBaja o actividad.fechaBaja #}{% set fechaBajaDisplay = actividad.inscripcion.fechaBaja is defined and actividad.inscripcion.fechaBaja? actividad.inscripcion.fechaBaja: (actividad.fechaBaja is defined ? actividad.fechaBaja : null) %}{% if fechaBajaDisplay %}en fecha {{ fechaBajaDisplay|date('d/m/Y') }}.{% else %}.{% endif %}{% if actividad.inscripcion.motivoBaja is defined and actividad.inscripcion.motivoBaja %}<br><strong>Motiu:</strong> {{ ('course.baja.motivo.' ~ actividad.inscripcion.motivoBaja)|trans({}, 'courses')|default(actividad.inscripcion.motivoBaja) }}{% endif %}</div>{# A continuación, mostrar el botón para volver a solicitar, que antes estaba oculto #}<a href="{{ path('dashboard_solicitud_categoria_new_2', {'slug': 'anexo_1','callback': callback.reset().insertar(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({'grupo_id': actividad.id})).insertar('inscripcion_firma_redirect', {'grupo_id': actividad.id}).token()}) }}"class="btn btn-success">{{ 'Solicitar curso de nuevo'|trans({}, 'courses') }}</a>{# Si no está de baja, entonces se muestra el resto de acciones originales #}{% else %}{% if tipo == 'grupo' and (actividad.inscrito is defined and actividad.inscrito) %}{% if not isRejected %}<span class="btn btn-secondary disabled">{{ 'Inscrito'|trans({}, 'courses')|default('Inscrito') }}</span>{% endif %}{# Botón de Cuestionarios #}{% if not isDefinitivelyRejected and actividad.cuestionario is defined and actividad.cuestionario is not null %}{% if actividad.cuestionario.formularioRespuesta is not null %}<a href="{{ path('dashboard_solicitud_categoria_show', {solicitud_categoria: actividad.cuestionario.formulario,id: actividad.cuestionario.formularioRespuesta,callback: callback.reset().insertar(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({'grupo_id': actividad.id})).token()}) }}" class="btn btn-primary">Qüestionaris</a>{% else %}{% if actividad.estado in ['en_curso', 'finalizado'] %}<a href="{{ path('dashboard_solicitud_categoria_new_2', {slug: enum('App\\Enum\\TipoCuestionarioEnum', 'FINALIZACION'),callback: callback.reset().insertar(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({'grupo_id': actividad.id})).token()}) }}" class="btn btn-primary">Qüestionaris</a>{% endif %}{% endif %}{% endif %}{# Botón de Solicitud de Baja (INC-670: Lógica simplificada y explícita) #}{# Condiciones para mostrar el botón:- El curso es tipo 'grupo' (ya estamos en ese bloque)- El usuario está inscrito (actividad.inscrito - ya verificado arriba)- El curso NO ha finalizado- NO es un rechazo definitivo- NO se ha solicitado la baja previamente- El estado de inscripción permite solicitar baja (FIRMADO, INSCRITO, PREINSCRITO)#}{% set estadosPermitidosBaja = ['FIRMADO', 'INSCRITO', 'PREINSCRITO'] %}{% set puedesolicitarBaja = not isDefinitivelyRejectedand actividad.estado != 'finalizado'and not bajaSolicitadaand (actividad.inscripcion.estado is not definedor actividad.inscripcion.estado in estadosPermitidosBaja) %}{% if puedesolicitarBaja %}<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#modalBajaCurso">Sol·licitud de baixa</button>{% elseif bajaSolicitada %}{# INC-670: Mostrar mensaje explícito si ya se solicitó la baja #}<span class="btn btn-outline-secondary disabled" title="Ya has solicitado la baja de este curso"><i class="fas fa-check"></i> Baixa sol·licitada</span>{% endif %}{# Botón para descargar el Certificado #}{% if not isDefinitivelyRejected and actividad.certificadoUrl is defined and actividad.certificadoUrl %}<a href="{{ actividad.certificadoUrl }}" target="_blank" class="btn btn-secondary">Certificat</a>{% endif %}{# Botón de Documentació pendent o mensajes de rechazo #}{% if actividad.inscripcion is defined %}{% if actividad.inscripcion.estado == 'RECHAZADO_SUBSANABLE' %}{# Rechazo subsanable - permitir editar #}{% if actividad.inscripcion.idFormularioRespuesta %}<a href="{{ path('dashboard_solicitud_categoria_edit_2', {'slug': 'anexo_1','id': actividad.inscripcion.idFormularioRespuesta,'nocache': 1,'callback': callback.reset().insertar(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({'grupo_id': actividad.id})).insertar('inscripcion_firma_redirect', {'grupo_id': actividad.id}).token()}) }}" class="btn btn-secondary btn-warning">Editar Anexo (Rechazado)</a>{% else %}<a href="{{ path('dashboard_solicitud_categoria_new_2', {'slug': 'anexo_1','callback': callback.reset().insertar(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({'grupo_id': actividad.id})).insertar('inscripcion_firma_redirect', {'grupo_id': actividad.id}).token()}) }}" class="btn btn-secondary btn-warning">Editar Anexo (Rechazado)</a>{% endif %}{% elseif actividad.inscripcion.estado in ['RECHAZADO', 'RECHAZADO_DEFINITIVO'] %}{# Rechazo definitivo - solo mostrar mensaje #}<span class="btn btn-danger disabled">{{ 'action.definitively_rejected'|trans({}, 'courses') }}</span>{% elseif actividad.inscripcion.estado == 'PREINSCRITO' and not actividad.inscripcion.rutaPdfFirmado %}{# Preinscritos que no están firmados #}{% if actividad.inscripcion.idFormularioRespuesta %}<a href="{{ path('dashboard_solicitud_categoria_edit_2', {'slug': 'anexo_1','id': actividad.inscripcion.idFormularioRespuesta,'nocache': 1,'callback': callback.reset().insertar(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({'grupo_id': actividad.id})).insertar('inscripcion_firma_redirect', {'grupo_id': actividad.id}).token()}) }}" class="btn btn-secondary btn-warning">Documentació pendent</a>{% else %}<a href="{{ path('dashboard_solicitud_categoria_new_2', {'slug': 'anexo_1','nocache': 1,'callback': callback.reset().insertar(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({'grupo_id': actividad.id})).insertar('inscripcion_firma_redirect', {'grupo_id': actividad.id}).token()}) }}" class="btn btn-secondary btn-warning">Documentació pendent</a>{% endif %}{% endif %}{% endif %}{# --- INICIO MODIFICACIÓN: Envolver el bloque de solicitud en la condición --- #}{% elseif not isDefinitivelyRejected and tipo == 'grupo' %}{% if not (actividad.inscripcionEfectivamenteCerrada ?? false) %}{# Si la inscripción NO está cerrada, mostrar los botones #}{% if app.user and constant('App\\Enum\\RolEnum::PARTICIPANTE') in app.user.roles %}{% if actividad.usuarioYaInscritoEnCurso is defined and actividad.usuarioYaInscritoEnCurso %}<span class="btn btn-secondary disabled">{{ 'courses.already_enrolled'|trans({}, 'courses')|default('Ya inscrito en este curso') }}</span>{% else %}<a href="{{ path('dashboard_solicitud_categoria_new_2', {'slug': 'anexo_1','callback': callback.reset().insertar(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({'grupo_id': actividad.id})).insertar('inscripcion_firma_redirect', {'grupo_id': actividad.id}).token()}) }}"class="btn btn-success">{{ 'Solicitar curso'|trans({}, 'courses')|default('Solicitar curso') }}</a>{% endif %}{% elseif app.user and constant('App\\Enum\\RolEnum::EMPRESA') in app.user.roles %}{% if actividad.empresaYaInscritaEnCurso.empresa is defined and actividad.empresaYaInscritaEnCurso.empresa %}<span class="btn btn-secondary disabled">{{ 'courses.already_enrolled'|trans({}, 'courses')|default('Ya inscrito en este curso') }}</span>{% else %}{% set btnColor = actividad.empresaYaInscritaEnCurso.empleado | default(false) ? 'btn-primary' : 'btn-secondary' %}<button type="button" class="btn {{ btnColor }} solicitar-curso-empresa"data-actividad-id="{{ actividad.id }}"data-actividad-tipo="{{ tipo }}"data-curso-nombre="{{ nombre[app.request.locale] | default(nombre | first) }}">{{ 'Solicitar curso'|trans({}, 'courses')|default('Solicitar curso') }}</button>{% endif %}{% elseif not app.user %}<a href="{{ path('login_request_credentials') }}" class="btn btn-success solicitar-curso-no-access">{{ 'Solicitar curso'|trans({}, 'courses')|default('Solicitar curso') }}</a>{% endif %}{% endif %}{% endif %}{# --- FIN MODIFICACIÓN --- #}{% endif %}{# --- FIN LÓGICA CORREGIDA PARA BAJA --- #}{% if not isDefinitivelyRejected and ((app.user and (constant('App\\Enum\\RolEnum::PARTICIPANTE') in app.user.roles or constant('App\\Enum\\RolEnum::EMPRESA') in app.user.roles)) or not app.user) %}{% include '_partials/courses/_interes.html.twig' with {actividad: actividad,tipo: tipo,mostrar_boton: tipo == 'solicitud'} %}{% endif %}{# Botón URL Programa - SIEMPRE VISIBLE si existe la URL #}{% if actividad.urlPrograma is defined and actividad.urlPrograma %}<a href="{{ actividad.urlPrograma }}" target="_blank" class="btn btn-info" title="{{ 'course.program_url'|trans({}, 'courses') }}"><i class="fas fa-external-link-alt"></i>{{ 'course.program'|trans({}, 'courses') }}</a>{% endif %}</div></section>{# Incluir modal y JavaScript de baja solo si el usuario está inscrito #}{% if actividad.inscrito is defined and actividad.inscrito %}{% include '_partials/courses/_modal_baja_curso.html.twig' %}{% include '_partials/courses/_baja_curso.js.twig' with { actividad: actividad } %}{% endif %}{% include '_partials/courses/_js_solicitar_curso_no_access.html.twig' %}