Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {% extends 'base.html' %}
- {% block content %}
- <div class="container mt-4">
- <!-- Campos ocultos para contrato.js -->
- <input type="hidden" id="id_cliente" name="id_cliente">
- <input type="hidden" id="id_direccion_instalacion" name="id_direccion_instalacion">
- <h2>Mantenimiento de Clientes</h2>
- <button class="btn btn-primary mb-3" data-toggle="modal" data-target="#modalAgregarCliente">
- <i class="fa fa-plus"></i> Nuevo Registro
- </button>
- <form method="get">
- <input type="text" name="q" placeholder="Buscar clientes..." value="{{ request.GET.q }}">
- <button type="submit">Buscar</button>
- </form>
- <table class="table table-striped">
- <thead>
- <tr>
- <th>N° Documento</th>
- <th>Cliente</th>
- <th>Móvil</th>
- <th>Email</th>
- <th>Estado</th>
- <th>Acción</th>
- </tr>
- </thead>
- <tbody>
- {% for cliente in clientes %}
- <tr data-id="{{ cliente.id }}">
- <td class="documento">{{ cliente.documento }}</td>
- <td class="nombre">
- {{ cliente.nombre }} {{ cliente.apellido_paterno }}{% if cliente.apellido_materno %} {{ cliente.apellido_materno }}{% endif %}
- </td>
- <td class="telefono">{{ cliente.telefono }}</td>
- <td class="email">{{ cliente.email }}</td>
- <td>
- <span class="badge estatus {% if cliente.estatus %}bg-success{% else %}bg-danger{% endif %}">
- {% if cliente.estatus %}Activo{% else %}Inactivo{% endif %}
- </span>
- </td>
- <td>
- <!-- Botón para ver detalle -->
- <a class="btn btn-sm btn-primary" href="{% url 'detalle_cliente_html' cliente.id %}">
- Ver detalle
- </a>
- <!-- Botón para editar -->
- <button class="btn btn-info btn-sm btn-editar" data-id="{{ cliente.id }}">
- <i class="fa fa-edit"></i> Editar
- </button>
- <!-- Botón para eliminar -->
- <button class="btn btn-danger btn-sm btn-eliminar" data-id="{{ cliente.id }}">
- <i class="fa fa-trash"></i> Eliminar
- </button>
- </td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- <nav>
- <ul class="pagination">
- {% if clientes.has_previous %}
- <li class="page-item">
- <a class="page-link" href="?{{ querystring.urlencode }}&page=1">« Primera</a>
- </li>
- <li class="page-item">
- <a class="page-link" href="?{{ querystring.urlencode }}&page={{ clientes.previous_page_number }}">Anterior</a>
- </li>
- {% endif %}
- {% for page in clientes.paginator.page_range %}
- <li class="page-item {% if clientes.number == page %}active{% endif %}">
- <a class="page-link" href="?{{ querystring.urlencode }}&page={{ page }}">{{ page }}</a>
- </li>
- {% endfor %}
- {% if clientes.has_next %}
- <li class="page-item">
- <a class="page-link" href="?{{ querystring.urlencode }}&page={{ clientes.next_page_number }}">Siguiente</a>
- </li>
- <li class="page-item">
- <a class="page-link" href="?{{ querystring.urlencode }}&page={{ clientes.paginator.num_pages }}">Última »</a>
- </li>
- {% endif %}
- </ul>
- </nav>
- </div>
- <!-- Modal para Registrar Cliente -->
- <div class="modal fade" id="modalAgregarCliente" tabindex="-1" aria-labelledby="modalAgregarClienteLabel" aria-hidden="true">
- <div class="modal-dialog modal-xl">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title">Registrar Cliente</h5>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
- <span aria-hidden="true">×</span>
- </button>
- </div>
- <form id="formNuevoCliente" method="POST">
- {% csrf_token %}
- <div class="container-fluid">
- <div class="row">
- <!-- Primera Columna -->
- <div class="col-md-4">
- <div class="form-group">
- <label for="documento">N° Documento (*)</label>
- <input type="text" class="form-control" name="documento" id="documento" required>
- </div>
- <div class="form-group">
- <label for="nombre">Nombre (*)</label>
- <input type="text" class="form-control" name="nombre" id="nombre" required>
- </div>
- <div class="form-group">
- <label for="apellido_paterno">Apellido Paterno (*)</label>
- <input type="text" class="form-control" name="apellido_paterno" id="apellido_paterno" required>
- </div>
- </div>
- <!-- Segunda Columna -->
- <div class="col-md-4">
- <div class="form-group">
- <label for="apellido_materno">Apellido Materno</label>
- <input type="text" class="form-control" name="apellido_materno" id="apellido_materno">
- </div>
- <div class="form-group">
- <label for="fecha_nacimiento">Fecha de Nacimiento (*)</label>
- <input type="date" class="form-control" name="fecha_nacimiento" id="fecha_nacimiento" required>
- </div>
- <div class="form-group">
- <label for="sexo">Sexo (*)</label>
- <select name="sexo" id="sexo" class="form-control" required>
- <option value="">Seleccionar</option>
- <option value="M">Masculino</option>
- <option value="F">Femenino</option>
- </select>
- </div>
- </div>
- <!-- Tercera Columna -->
- <div class="col-md-4">
- <div class="form-group">
- <label for="telefono">Teléfono (*)</label>
- <input type="text" class="form-control" name="telefono" id="telefono" required>
- </div>
- <div class="form-group">
- <label for="email">Email</label>
- <input type="email" class="form-control" name="email" id="email">
- </div>
- <div class="form-group">
- <label for="estatus">Estatus</label>
- <select name="estatus" id="estatus" class="form-control" required>
- <option value="1">Activo</option>
- <option value="0">Inactivo</option>
- </select>
- </div>
- </div>
- </div>
- <!-- Direcciones -->
- <div class="row direccion">
- <div class="col-md-12">
- <div id="direcciones">
- <div class="direccion">
- <h5>Dirección 1</h5>
- <div class="row">
- <div class="col-md-4">
- <div class="form-group">
- <label for="zona">Zona (*)</label>
- <select name="zona[]" class="form-control" required>
- <option value="">Selecciona una zona</option>
- {% for zona in zonas %}
- <option value="{{ zona.id }}">{{ zona.nombre }}</option>
- {% endfor %}
- </select>
- </div>
- </div>
- <div class="col-md-4">
- <div class="form-group">
- <label for="avenida">Avenida (*)</label>
- <select name="avenida[]" class="form-control" required>
- <option value="">Selecciona una avenida</option>
- </select>
- </div>
- </div>
- <div class="col-md-4">
- <div class="form-group">
- <label for="direccion">Dirección (*)</label>
- <input type="text" class="form-control" name="direccion[]" required>
- </div>
- </div>
- </div>
- </div>
- </div>
- <!-- Botón para agregar más direcciones -->
- <button type="button" id="agregarDireccion" class="btn btn-secondary">Agregar otra dirección</button>
- </div>
- </div>
- <!-- Botón de Guardar -->
- <div class="row mt-3">
- <div class="col-md-12">
- <button type="submit" class="btn btn-primary">Guardar</button>
- </div>
- </div>
- </div>
- </form>
- </div> <!-- /.modal-content -->
- </div> <!-- /.modal-dialog -->
- </div> <!-- /.modal -->
- <!-- Modal para Editar Cliente -->
- <div class="modal fade" id="modalEditarCliente" tabindex="-1" aria-labelledby="modalEditarClienteLabel" aria-hidden="true">
- <div class="modal-dialog modal-xl">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title">Editar Cliente</h5>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
- <span aria-hidden="true">×</span>
- </button>
- </div>
- <form id="formEditarCliente" method="POST" action="">
- {% csrf_token %}
- <!-- Campo oculto para almacenar el ID del cliente -->
- <input type="hidden" id="edit_id" name="id">
- <div class="modal-body">
- <div class="container-fluid">
- <div class="row">
- <!-- Primera columna -->
- <div class="col-md-4 col-sm-6">
- <div class="form-group">
- <label for="edit_documento">N° Documento (*)</label>
- <input type="text" class="form-control" name="documento" id="edit_documento" required>
- </div>
- <div class="form-group">
- <label for="edit_apellido_paterno">Apellido Paterno (*)</label>
- <input type="text" class="form-control" name="apellido_paterno" id="edit_apellido_paterno" required>
- </div>
- <div class="form-group">
- <label for="edit_fecha_nacimiento">Fecha de Nacimiento (*)</label>
- <input type="date" class="form-control" name="fecha_nacimiento" id="edit_fecha_nacimiento" required>
- </div>
- <div class="form-group">
- <label for="edit_zona">Zona (*)</label>
- <select id="edit_zona" name="zona" class="form-control" required>
- <option value="">Selecciona una zona</option>
- {% for zona in zonas %}
- <option value="{{ zona.id }}">{{ zona.nombre }}</option>
- {% endfor %}
- </select>
- </div>
- </div>
- <!-- Segunda columna -->
- <div class="col-md-4 col-sm-6">
- <div class="form-group">
- <label for="edit_estatus">Estatus</label>
- <select name="estatus" id="edit_estatus" class="form-control" required>
- <option value="1" {% if cliente.estatus %}selected{% endif %}>Activo</option>
- <option value="0" {% if not cliente.estatus %}selected{% endif %}>Inactivo</option>
- </select>
- </div>
- <div class="form-group">
- <label for="edit_apellido_materno">Apellido Materno (*)</label>
- <input type="text" class="form-control" name="apellido_materno" id="edit_apellido_materno">
- </div>
- <div class="form-group">
- <label for="edit_telefono">Móvil (*)</label>
- <input type="text" class="form-control" name="telefono" id="edit_telefono" required>
- </div>
- <div class="form-group">
- <label for="edit_avenida">Avenidas (*)</label>
- <select id="edit_avenida" name="avenida" class="form-control" required>
- <option value="">Selecciona una avenida</option>
- {% for avenida in avenidas %}
- <option value="{{ avenida.id }}">{{ avenida.nombre }}</option>
- {% endfor %}
- </select>
- </div>
- </div>
- <!-- Tercera columna -->
- <div class="col-md-4 col-sm-6">
- <div class="form-group">
- <label for="edit_nombre">Nombre (*)</label>
- <input type="text" class="form-control" name="nombre" id="edit_nombre" required>
- </div>
- <div class="form-group">
- <label for="edit_sexo">Sexo (*)</label>
- <select name="sexo" id="edit_sexo" class="form-control" required>
- <option value="">Seleccionar</option>
- <option value="M">Masculino</option>
- <option value="F">Femenino</option>
- </select>
- </div>
- <div class="form-group">
- <label for="edit_email">Email</label>
- <input type="email" class="form-control" name="email" id="edit_email">
- </div>
- <!-- Campo para la dirección, que se actualizará en el modelo Direccion -->
- <div class="form-group">
- <label for="edit_direccion">Dirección (*)</label>
- <input type="text" class="form-control" name="direccion" id="edit_direccion" required>
- </div>
- </div>
- </div> <!-- /.row -->
- </div> <!-- /.container-fluid -->
- </div> <!-- /.modal-body -->
- <div class="modal-footer">
- <button type="submit" class="btn btn-success">Guardar</button>
- <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancelar</button>
- </div>
- </form>
- </div> <!-- /.modal-content -->
- </div> <!-- /.modal-dialog -->
- </div> <!-- /.modal fade -->
- <script>
- document.getElementById('formNuevoCliente').addEventListener('submit', function(event) {
- event.preventDefault(); // Evita que el formulario se envíe de manera tradicional
- const formData = new FormData(this);
- fetch("{% url 'agregar_cliente' %}", {
- method: 'POST',
- body: formData,
- headers: {
- 'X-CSRFToken': '{{ csrf_token }}'
- }
- })
- .then(response => response.json())
- .then(data => {
- if (data.mensaje) {
- alert(data.mensaje); // Muestra el mensaje de éxito
- $('#modalAgregarCliente').modal('hide'); // Cierra el modal
- location.reload(); // Recarga la página para actualizar la lista
- } else if (data.error) {
- alert(data.error); // Muestra el mensaje de error
- }
- })
- .catch(error => {
- console.error('Error:', error);
- });
- });
- </script>
- {% endblock %}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement