templates/admin/user/proveedor_form.html.twig line 1

Open in your IDE?
  1. {% extends 'admin/base_admin.html.twig' %}
  2. {% block content %}
  3. <div class="row mb-4">
  4.     <div class="col-12">
  5.         <div class="card border-0 shadow-lg">
  6.             <div class="card-header bg-white border-bottom-0 py-4">
  7.                 <div class="row align-items-center">
  8.                     <div class="col-md-6">
  9.                         <h4 class="mb-0 text-dark fw-bold">
  10.                             <i class="fas fa-hospital me-2 text-primary"></i>
  11.                             {{ modo == 'edit' ? 'Editar Clínica' : 'Nueva Clínica' }}
  12.                         </h4>
  13.                         <p class="text-muted mb-0 mt-1">
  14.                             {{ modo == 'edit' ? 'Actualiza la información de la clínica' : 'Registra una nueva clínica en el sistema' }}
  15.                         </p>
  16.                     </div>
  17.                     <div class="col-md-6 text-md-end">
  18.                         <a href="{{ path('admin_proveedores') }}" class="btn btn-outline-primary btn-lg px-4">
  19.                             <i class="fas fa-arrow-left me-2"></i>Volver a Clínicas
  20.                         </a>
  21.                     </div>
  22.                 </div>
  23.             </div>
  24.             <div class="card-body p-4">
  25.                 {{ form_start(form, {'attr': {'class': 'row g-4'}, 'render_rest': false}) }}
  26.                 {{ form_widget(form._token) }}
  27.                 <!-- MOSTRAR ERRORES GLOBALES DEL FORMULARIO -->
  28.                 {% if form.vars.errors|length > 0 %}
  29.                 <div class="col-12">
  30.                     <div class="alert alert-danger">
  31.                         <h6 class="alert-heading">
  32.                             <i class="fas fa-exclamation-triangle me-2"></i>Errores en el formulario
  33.                         </h6>
  34.                         <ul class="mb-0">
  35.                             {% for error in form.vars.errors %}
  36.                                 <li>{{ error.message }}</li>
  37.                             {% endfor %}
  38.                         </ul>
  39.                     </div>
  40.                 </div>
  41.                 {% endif %}
  42.                 <!-- Información de la Clínica -->
  43.                 <div class="col-12">
  44.                     <div class="card border-0 bg-light bg-opacity-10">
  45.                         <div class="card-header bg-transparent border-bottom-0 py-3">
  46.                             <h6 class="mb-0 fw-semibold text-dark">
  47.                                 <i class="fas fa-hospital me-2 text-primary"></i>Información de la Clínica
  48.                             </h6>
  49.                         </div>
  50.                         <div class="card-body">
  51.                             <div class="row g-3">
  52.                                 <div class="col-md-12">
  53.                                     {{ form_label(form.name, 'Nombre de la Clínica', {'label_attr': {'class': 'form-label fw-semibold text-dark'}}) }}
  54.                                     <div class="input-group input-group-lg">
  55.                                         <span class="input-group-text bg-white border-end-0">
  56.                                             <i class="fas fa-hospital text-muted"></i>
  57.                                         </span>
  58.                                         {{ form_widget(form.name, {
  59.                                             attr: {
  60.                                                 class: 'form-control border-start-0' ~ (form.name.vars.errors|length ? ' is-invalid' : ''),
  61.                                                 placeholder: 'Ingrese el nombre de la clínica'
  62.                                             }
  63.                                         }) }}
  64.                                     </div>
  65.                                     {% if form.name.vars.errors|length %}
  66.                                         <div class="invalid-feedback d-block">
  67.                                             {{ form_errors(form.name) }}
  68.                                         </div>
  69.                                     {% endif %}
  70.                                 </div>
  71.                             </div>
  72.                         </div>
  73.                     </div>
  74.                 </div>
  75.                 <!-- Información de Contacto -->
  76.                 <div class="col-12">
  77.                     <div class="card border-0 bg-light bg-opacity-10">
  78.                         <div class="card-header bg-transparent border-bottom-0 py-3">
  79.                             <h6 class="mb-0 fw-semibold text-dark">
  80.                                 <i class="fas fa-address-book me-2 text-primary"></i>Información de Contacto
  81.                             </h6>
  82.                         </div>
  83.                         <div class="card-body">
  84.                             <div class="row g-3">
  85.                                 <div class="col-md-6">
  86.                                     {{ form_label(form.email, 'Email', {'label_attr': {'class': 'form-label fw-semibold text-dark'}}) }}
  87.                                     <div class="input-group input-group-lg">
  88.                                         <span class="input-group-text bg-white border-end-0">
  89.                                             <i class="fas fa-envelope text-muted"></i>
  90.                                         </span>
  91.                                         {{ form_widget(form.email, {
  92.                                             attr: {
  93.                                                 class: 'form-control border-start-0' ~ (form.email.vars.errors|length ? ' is-invalid' : ''),
  94.                                                 placeholder: 'clinica@ejemplo.com'
  95.                                             }
  96.                                         }) }}
  97.                                     </div>
  98.                                     {% if form.email.vars.errors|length %}
  99.                                         <div class="invalid-feedback d-block">
  100.                                             {{ form_errors(form.email) }}
  101.                                         </div>
  102.                                     {% endif %}
  103.                                 </div>
  104.                                 <div class="col-md-6">
  105.                                     {{ form_label(form.phone, 'Teléfono', {'label_attr': {'class': 'form-label fw-semibold text-dark'}}) }}
  106.                                     <div class="input-group input-group-lg">
  107.                                         <span class="input-group-text bg-white border-end-0">
  108.                                             <i class="fas fa-phone text-muted"></i>
  109.                                         </span>
  110.                                         {{ form_widget(form.phone, {
  111.                                             attr: {
  112.                                                 class: 'form-control border-start-0' ~ (form.phone.vars.errors|length ? ' is-invalid' : ''),
  113.                                                 placeholder: 'Teléfono de contacto'
  114.                                             }
  115.                                         }) }}
  116.                                     </div>
  117.                                     {% if form.phone.vars.errors|length %}
  118.                                         <div class="invalid-feedback d-block">
  119.                                             {{ form_errors(form.phone) }}
  120.                                         </div>
  121.                                     {% endif %}
  122.                                 </div>
  123.                                 <div class="col-12">
  124.                                     {{ form_label(form.address, 'Dirección', {'label_attr': {'class': 'form-label fw-semibold text-dark'}}) }}
  125.                                     <div class="input-group input-group-lg">
  126.                                         <span class="input-group-text bg-white border-end-0">
  127.                                             <i class="fas fa-map-marker-alt text-muted"></i>
  128.                                         </span>
  129.                                         {{ form_widget(form.address, {
  130.                                             attr: {
  131.                                                 class: 'form-control border-start-0' ~ (form.address.vars.errors|length ? ' is-invalid' : ''),
  132.                                                 placeholder: 'Dirección completa de la clínica'
  133.                                             }
  134.                                         }) }}
  135.                                     </div>
  136.                                     {% if form.address.vars.errors|length %}
  137.                                         <div class="invalid-feedback d-block">
  138.                                             {{ form_errors(form.address) }}
  139.                                         </div>
  140.                                     {% endif %}
  141.                                 </div>
  142.                             </div>
  143.                         </div>
  144.                     </div>
  145.                 </div>
  146.                 <!-- Contraseña (solo para nuevos) -->
  147.                 {% if form.plainPassword is defined %}
  148.                 <div class="col-12">
  149.                     <div class="card border-0 bg-light bg-opacity-10">
  150.                         <div class="card-header bg-transparent border-bottom-0 py-3">
  151.                             <h6 class="mb-0 fw-semibold text-dark">
  152.                                 <i class="fas fa-lock me-2 text-primary"></i>Seguridad
  153.                             </h6>
  154.                         </div>
  155.                         <div class="card-body">
  156.                             <div class="row g-3">
  157.                                 <div class="col-md-6">
  158.                                     {{ form_label(form.plainPassword.first, 'Contraseña', {'label_attr': {'class': 'form-label fw-semibold text-dark'}}) }}
  159.                                     <div class="input-group input-group-lg position-relative">
  160.                                         <span class="input-group-text bg-white border-end-0">
  161.                                             <i class="fas fa-key text-muted"></i>
  162.                                         </span>
  163.                                         {{ form_widget(form.plainPassword.first, {
  164.                                             attr: {
  165.                                                 class: 'form-control border-start-0 password-field' ~ (form.plainPassword.first.vars.errors|length ? ' is-invalid' : ''),
  166.                                                 placeholder: 'Ingresa la contraseña'
  167.                                             }
  168.                                         }) }}
  169.                                         <button type="button" class="btn btn-outline-secondary border-start-0 password-toggle" onclick="togglePassword(this)">
  170.                                             <i class="fas fa-eye"></i>
  171.                                         </button>
  172.                                     </div>
  173.                                     {% if form.plainPassword.first.vars.errors|length %}
  174.                                         <div class="invalid-feedback d-block">
  175.                                             {{ form_errors(form.plainPassword.first) }}
  176.                                         </div>
  177.                                     {% endif %}
  178.                                 </div>
  179.                                 <div class="col-md-6">
  180.                                     {{ form_label(form.plainPassword.second, 'Confirmar Contraseña', {'label_attr': {'class': 'form-label fw-semibold text-dark'}}) }}
  181.                                     <div class="input-group input-group-lg position-relative">
  182.                                         <span class="input-group-text bg-white border-end-0">
  183.                                             <i class="fas fa-key text-muted"></i>
  184.                                         </span>
  185.                                         {{ form_widget(form.plainPassword.second, {
  186.                                             attr: {
  187.                                                 class: 'form-control border-start-0 password-field' ~ (form.plainPassword.second.vars.errors|length ? ' is-invalid' : ''),
  188.                                                 placeholder: 'Confirma la contraseña'
  189.                                             }
  190.                                         }) }}
  191.                                         <button type="button" class="btn btn-outline-secondary border-start-0 password-toggle" onclick="togglePassword(this)">
  192.                                             <i class="fas fa-eye"></i>
  193.                                         </button>
  194.                                     </div>
  195.                                     {% if form.plainPassword.second.vars.errors|length %}
  196.                                         <div class="invalid-feedback d-block">
  197.                                             {{ form_errors(form.plainPassword.second) }}
  198.                                         </div>
  199.                                     {% endif %}
  200.                                 </div>
  201.                             </div>
  202.                         </div>
  203.                     </div>
  204.                 </div>
  205.                 {% endif %}
  206.                 <!-- Botones -->
  207.                 <div class="col-12 mt-4">
  208.                     <div class="d-flex justify-content-end gap-3">
  209.                         <a href="{{ path('admin_proveedores') }}" class="btn btn-outline-secondary btn-lg px-4">
  210.                             <i class="fas fa-times me-2"></i>Cancelar
  211.                         </a>
  212.                         <button type="submit" class="btn btn-primary btn-lg px-4">
  213.                             {% if modo == 'edit' %}
  214.                                 <i class="fas fa-save me-2"></i>Actualizar Clínica
  215.                             {% else %}
  216.                                 <i class="fas fa-hospital me-2"></i>Registrar Clínica
  217.                             {% endif %}
  218.                         </button>
  219.                     </div>
  220.                 </div>
  221.                 {{ form_end(form, {'render_rest': false}) }}
  222.             </div>
  223.         </div>
  224.     </div>
  225. </div>
  226. {% endblock %}
  227. {% block javascripts %}
  228.     {{ parent() }}
  229.     <script>
  230.         function togglePassword(button) {
  231.             const input = button.closest('.input-group').querySelector('.password-field');
  232.             const icon = button.querySelector('i');
  233.             
  234.             if (input.type === 'password') {
  235.                 input.type = 'text';
  236.                 icon.classList.remove('fa-eye');
  237.                 icon.classList.add('fa-eye-slash');
  238.             } else {
  239.                 input.type = 'password';
  240.                 icon.classList.remove('fa-eye-slash');
  241.                 icon.classList.add('fa-eye');
  242.             }
  243.         }
  244.     </script>
  245. {% endblock %}