templates/agenda/indexpostulantes.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% block body %}
  3. {% if pendienteActualizacion %}
  4. <div class="alert alert-warning alert-dismissible fade show mx-3 mt-3" role="alert">
  5.    <div class="d-flex align-items-start">
  6.       <i class="la la-exclamation-triangle mr-2 mt-1" style="font-size:1.3rem;color:#f4a900;flex-shrink:0"></i>
  7.       <div style="flex:1">
  8.          <strong>Actualizaci&oacute;n de datos pendiente</strong><br>
  9.          <small class="text-muted">El equipo UC solicita que actualices tu informaci&oacute;n personal antes de continuar.</small>
  10.          <div class="mt-2">
  11.             <a href="{{ path('app_embajadores_actualiza', {'id': embajador.id}) }}" class="btn btn-warning btn-sm">
  12.                <i class="la la-edit"></i> Actualizar mis datos
  13.             </a>
  14.          </div>
  15.       </div>
  16.       <button type="button" class="close ml-2 mt-0" data-dismiss="alert"><span>&times;</span></button>
  17.    </div>
  18. </div>
  19. {% endif %}
  20. <div class="m-content emb-content">
  21. <div class="m-portlet m-portlet--full-height">
  22. <div class="m-portlet__head">
  23.    <div class="m-portlet__head-caption">
  24.       <div class="m-portlet__head-title">
  25.          <h3 class="m-portlet__head-text">Actividades disponibles</h3>
  26.       </div>
  27.    </div>
  28. </div>
  29. <div class="m-portlet__body px-2 py-3">
  30. {% set activo = 1 %}
  31. {% if embajador.tags %}
  32.    {% for tag in embajador.tags %}
  33.       {% if tag.nombre == "temporal" %}{% set activo = 0 %}{% endif %}
  34.    {% endfor %}
  35. {% endif %}
  36. {% set hay_eventos = false %}
  37. {% for agenda in agendas|sort((b, a) => a.fecha <=> b.fecha) %}
  38. {% if agenda.archivada != 1 and (activo == 1 or agenda.temporales == 1) %}
  39. {% set hay_eventos = true %}
  40. {% set estado_post = agenda.postulado(iduser) %}
  41. {% set card_id = 'ev' ~ loop.index %}
  42. <div class="emb-card{% if estado_post != 0 %} emb-card--activo{% endif %}">
  43.    <div class="emb-card__date">
  44.       <span class="emb-card__day">{{ agenda.fecha ? agenda.fecha|date('d') : '?' }}</span>
  45.       <span class="emb-card__month">{{ agenda.fecha ? agenda.fecha|date('M')|upper : '' }}</span>
  46.    </div>
  47.    <div class="emb-card__body">
  48.       <div class="emb-card__meta">
  49.          {% if agenda.tipoagenda %}<span class="badge badge-primary emb-badge">{{ agenda.tipoagenda.nombre }}</span>{% endif %}
  50.          {% if agenda.roles %}<span class="badge badge-warning emb-badge">Con roles</span>{% endif %}
  51.       </div>
  52.       <div class="emb-card__time">
  53.          {{ agenda.fecha ? agenda.fecha|date('H:i') : '' }}{% if agenda.hasta %} &ndash; {{ agenda.hasta|date('H:i') }}{% endif %}
  54.       </div>
  55.       <div class="emb-card__place">{{ agenda.lugar ?: 'Sin lugar asignado' }}</div>
  56.       <div class="mt-2">
  57.          {% if estado_post == 0 %}
  58.             {% if agenda.roles %}
  59.                <a href="{{ path('app_embajador_participante_newrol', {'id': agenda.id}) }}" class="btn btn-primary btn-sm emb-btn">
  60.                   <i class="la la-check"></i> Postular
  61.                </a>
  62.             {% else %}
  63.                <a href="{{ path('app_embajador_participante_postular', {'id': agenda.id}) }}" class="btn btn-primary btn-sm emb-btn">
  64.                   <i class="la la-check"></i> Postular
  65.                </a>
  66.             {% endif %}
  67.          {% elseif estado_post == "pendiente seleccion" %}
  68.             <a href="{{ path('app_embajador_participante_delete_byuser', {'id': agenda.postuladoid(iduser)}) }}"
  69.                class="btn btn-outline-danger btn-sm emb-btn">
  70.                <i class="la la-times"></i> Cancelar postulaci&oacute;n
  71.             </a>
  72.          {% elseif estado_post == "no seleccionado" %}
  73.             <span class="badge badge-secondary py-1 px-2">No seleccionado</span>
  74.          {% else %}
  75.             <span class="badge badge-success py-1 px-2"><i class="la la-check"></i> {{ estado_post }}</span>
  76.          {% endif %}
  77.       </div>
  78.       <a class="emb-toggle" href="#" onclick="embToggle('{{ card_id }}',this);return false;" aria-expanded="false">
  79.          <i class="la la-angle-down emb-toggle__icon"></i> Ver detalles
  80.       </a>
  81.    </div>
  82. </div>
  83. <div class="emb-collapse" id="{{ card_id }}" style="display:none">
  84.    <div class="emb-details">
  85.       <div class="row no-gutters">
  86.          {% if agenda.monto %}
  87.          <div class="col-6 emb-detail-item">
  88.             <span class="emb-detail-label">Monto</span>
  89.             <strong class="emb-detail-value" style="color:#5867dd">{{ agenda.monto }}</strong>
  90.          </div>
  91.          {% endif %}
  92.          {% if agenda.encargado %}
  93.          <div class="col-6 emb-detail-item">
  94.             <span class="emb-detail-label">Encargado</span>
  95.             <strong class="emb-detail-value">{{ agenda.encargado }}</strong>
  96.          </div>
  97.          {% endif %}
  98.          {% if agenda.taxi %}
  99.          <div class="col-6 emb-detail-item">
  100.             <span class="emb-detail-label">Taxi</span>
  101.             <strong class="emb-detail-value">{{ agenda.horariotaxi ?: 'Por confirmar' }}</strong>
  102.          </div>
  103.          {% endif %}
  104.          {% if agenda.bus %}
  105.          <div class="col-6 emb-detail-item">
  106.             <span class="emb-detail-label">Bus</span>
  107.             <strong class="emb-detail-value">{{ agenda.bus }}</strong>
  108.          </div>
  109.          {% endif %}
  110.          {% if agenda.nAlumnos %}
  111.          <div class="col-6 emb-detail-item">
  112.             <span class="emb-detail-label">Alumnos</span>
  113.             <strong class="emb-detail-value">{{ agenda.nAlumnos }}</strong>
  114.          </div>
  115.          {% endif %}
  116.          {% if agenda.direccion %}
  117.          <div class="col-12 emb-detail-item">
  118.             <span class="emb-detail-label">Direcci&oacute;n</span>
  119.             <strong class="emb-detail-value">
  120.                {{ agenda.direccion }}{% if agenda.tipoAgenda and agenda.tipoAgenda.nombre != "Charla Zoom" %}, {{ agenda.comuna }}{% endif %}
  121.             </strong>
  122.          </div>
  123.          {% endif %}
  124.          {% if agenda.colegioParticipantes|length > 0 %}
  125.          <div class="col-12 emb-detail-item">
  126.             <span class="emb-detail-label">Colegios</span>
  127.             <div style="display:flex;flex-direction:column;gap:4px;margin-top:4px">
  128.             {% for cp in agenda.colegioParticipantes %}
  129.                {% if cp.colegio %}
  130.                <div style="display:flex;justify-content:space-between;align-items:center;background:#f8f9fc;border-radius:6px;padding:5px 10px;gap:8px">
  131.                   <span style="font-size:11px;font-weight:600;color:#1a1a2e">{{ cp.colegio.nombre }}</span>
  132.                   <span style="font-size:10px;font-weight:600;color:#6b7280;background:#fff;border:1px solid #e2e8f0;border-radius:20px;padding:1px 8px;white-space:nowrap;flex-shrink:0">
  133.                      {{ cp.colegio.dependencia ? cp.colegio.dependencia.nombre : 'Por confirmar' }}
  134.                   </span>
  135.                </div>
  136.                {% endif %}
  137.             {% endfor %}
  138.             </div>
  139.          </div>
  140.          {% endif %}
  141.       </div>
  142.    </div>
  143. </div>
  144. {% endif %}
  145. {% endfor %}
  146. {% if not hay_eventos %}
  147. <div class="text-center py-5 text-muted">
  148.    <i class="la la-calendar-o" style="font-size:3rem;display:block;margin-bottom:12px;opacity:.4"></i>
  149.    No hay actividades abiertas por ahora
  150. </div>
  151. {% endif %}
  152. </div>
  153. </div>
  154. </div>
  155. <nav class="emb-bottom-nav">
  156.    <a href="{{ path('agenda_index_estudiante') }}" class="emb-bottom-nav__item emb-bottom-nav__item--active">
  157.       <i class="la la-calendar"></i>
  158.       <span>Disponibles</span>
  159.    </a>
  160.    <a href="{{ path('agenda_index_estudiante_confirmadas') }}" class="emb-bottom-nav__item">
  161.       <i class="la la-check-circle"></i>
  162.       <span>Confirmadas</span>
  163.    </a>
  164.    <a href="{{ path('agenda_index_estudiante_historicas') }}" class="emb-bottom-nav__item">
  165.       <i class="la la-history"></i>
  166.       <span>Historial</span>
  167.    </a>
  168. </nav>
  169. <style>
  170. .emb-content { padding-bottom: 80px !important; }
  171. .emb-card {
  172.    display: flex; gap: 12px;
  173.    background: #fff;
  174.    border: 1px solid #e8ecf0;
  175.    border-radius: 8px;
  176.    padding: 14px 12px;
  177.    margin-bottom: 6px;
  178. }
  179. .emb-card__date {
  180.    display: flex; flex-direction: column; align-items: center;
  181.    justify-content: flex-start; min-width: 38px; padding-top: 2px;
  182. }
  183. .emb-card__day { font-size: 1.45rem; font-weight: 700; color: #1a1a2e; line-height: 1; }
  184. .emb-card__month { font-size: 0.62rem; font-weight: 700; text-transform: uppercase; color: #74788d; letter-spacing: .5px; }
  185. .emb-card__body { flex: 1; min-width: 0; }
  186. .emb-card__meta { margin-bottom: 3px; }
  187. .emb-badge { font-size: 10px; margin-right: 3px; }
  188. .emb-card__time { font-size: 0.78rem; color: #5867dd; font-weight: 600; }
  189. .emb-card__place { font-size: 0.85rem; color: #333; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  190. .emb-btn { font-size: 0.78rem; padding: 3px 10px; }
  191. .emb-toggle { font-size: 0.75rem; color: #74788d; display: inline-block; margin-top: 6px; cursor: pointer; text-decoration: none; }
  192. .emb-toggle:hover { text-decoration: none; color: #5867dd; }
  193. .emb-toggle__icon { transition: transform .2s; display: inline-block; }
  194. .emb-toggle--open .emb-toggle__icon { transform: rotate(180deg); }
  195. .emb-collapse {
  196.    background: #f8f9fc; border: 1px solid #e8ecf0; border-top: 0;
  197.    border-radius: 0 0 8px 8px; margin-top: -6px; margin-bottom: 6px;
  198. }
  199. .emb-details { padding: 10px 12px; }
  200. .emb-detail-item { padding: 5px 6px; }
  201. .emb-detail-label { display: block; font-size: 10px; text-transform: uppercase; letter-spacing: .5px; color: #74788d; font-weight: 600; }
  202. .emb-detail-value { display: block; font-size: 0.85rem; color: #1a1a2e; }
  203. .emb-bottom-nav {
  204.    position: fixed; bottom: 0; left: 0; right: 0; height: 62px;
  205.    background: #fff; border-top: 1px solid #e2e5ec;
  206.    display: flex; z-index: 1050;
  207.    box-shadow: 0 -2px 12px rgba(0,0,0,.08);
  208. }
  209. .emb-bottom-nav__item {
  210.    flex: 1; display: flex; flex-direction: column;
  211.    align-items: center; justify-content: center;
  212.    font-size: 0.62rem; font-weight: 600; color: #74788d;
  213.    text-decoration: none; gap: 2px; transition: color .15s;
  214. }
  215. .emb-bottom-nav__item i { font-size: 1.25rem; }
  216. .emb-bottom-nav__item--active { color: #5867dd; border-top: 2px solid #5867dd; }
  217. .emb-bottom-nav__item:hover { color: #5867dd; text-decoration: none; }
  218. </style>
  219. <script>
  220. function embToggle(id, btn) {
  221.   var panel = document.getElementById(id);
  222.   var open = panel.style.display !== 'none';
  223.   panel.style.display = open ? 'none' : 'block';
  224.   btn.classList.toggle('emb-toggle--open', !open);
  225. }
  226. </script>
  227. {% endblock %}