{% extends 'base.html' %}
{% load humanize %}
{% load custom_filters  %}
{% load math_extras %}
{% block content %}
<h1 class="text-center display">Stock Minimum des Composants</h1>

        {% csrf_token %}
        <form  method="GET">
            <input type="checkbox" id="gamme" name="gamme" onchange="this.form.submit()" {% if gamme %} checked {% endif %}>
            <label for="newsletter">Articles Importés</label>
            <br>
            <input type="checkbox" id="loc_prd" name="loc_prd" onchange="this.form.submit()" {% if loc_prd %} checked {% endif %}>
            <label for="newsletter">Articles Locaux</label>
            <br>
            <input type="checkbox" id="prduc_prd" name="prduc_prd" onchange="this.form.submit()" {% if prduc_prd %} checked {% endif %}>
            <label for="newsletter">Articles Fabriqués</label>
            <br>
            <input type="checkbox" id="ecart" name="ecart" onchange="this.form.submit()" {% if ecart %} checked {% endif %}>
            <label for="newsletter">Ecart < 0</label>
        </form>
        
        <br>
        <div >
          <table>
            <tr>
                <td style="width: 90%;"></td>
                <td style="width: 10%; text-align: right;">
                  <strong>Résulat : {{nbr_result}}</strong> 
                </td>
                <td style="width: 10%" ><button  class="btn btn-outline-success" onclick="exportToExcel()">Excel</button></td>
                
            </tr>
         </table>
          <table class="table table-striped" border="1" id="stock_min">
            <thead>
                <tr>
                    <th tyle="text-align: center;" onclick="sortTable(0)">Code</th>
                    <th tyle="text-align: center;" onclick="sortTable(1)">Désignation</th>
                    <th tyle="text-align: center;" onclick="sortTable(2)">Quantité Nécessaire</th>
                    <th tyle="text-align: center;" onclick="sortTable(3)">Quantité Disponible</th>
                    <th tyle="text-align: center;" onclick="sortTable(4)">Ecart</th>
                </tr>
            </thead>
            <tbody>
                {% for produit in products %}
                <tr>
                    <td>{{produit.code}}</td>
                    <td>{{produit.name}}</td>
                    <td style="text-align: right;">{{produit.cmp_qty|intspace}}</td>
                    <td style="text-align: right;">{{produit.virtual_available|intspace}}</td>
                    <td style="text-align: right;">{{produit.ecart|intspace}}</td>
                </tr>
                {% endfor %}
            </tbody>
        </table>
        </div>
        
        
<script>
    let ascendingOrder = [];

function sortTable(columnIndex) {
  const table = document.getElementById("stock_min");
  const rows = Array.from(table.rows).slice(1); // Exclut l'en-tête
  const headers = table.querySelectorAll("th");

  // Initialiser l'état de tri pour la colonne si elle n'a jamais été triée
  if (ascendingOrder[columnIndex] === undefined) {
    ascendingOrder[columnIndex] = true;
  }

  // Utiliser l'état de tri actuel pour la colonne
  const ascending = ascendingOrder[columnIndex];

  rows.sort((rowA, rowB) => {
    var cellA = rowA.cells[columnIndex].innerText;
    var cellB = rowB.cells[columnIndex].innerText;
    if(columnIndex===2||columnIndex===3||columnIndex===4)
    {
      cellA = cellA.replace(" ", "");
      cellB = cellB.replace(" ", "");
    }

    
    
    const a = isNaN(cellA) ? cellA.toLowerCase() : parseFloat(cellA);
    const b = isNaN(cellB) ? cellB.toLowerCase() : parseFloat(cellB);

    return ascending ? (a > b ? 1 : -1) : (a < b ? 1 : -1);
  });

  // Alterner l'ordre pour la prochaine utilisation
  ascendingOrder[columnIndex] = !ascending;

  // Réinsérer les lignes triées dans le tableau
  rows.forEach(row => table.tBodies[0].appendChild(row));
  headers.forEach((header) => {
    const arrow = header.querySelector('.sort-arrow');
    if (arrow) {
      arrow.remove(); // Supprimer la flèche des autres colonnes
    }
  });

  // Ajouter la flèche à la colonne triée
  const currentHeader = headers[columnIndex];
  const arrow = document.createElement('span');
  arrow.classList.add('sort-arrow');
  arrow.innerHTML = ascending ? '↑' : '↓'; // Choisir la flèche selon l'ordre du tri
  currentHeader.appendChild(arrow);
} 

function exportToExcel() {
            // Récupérer le tableau
            let table = document.getElementById("stock_min");

            // Créer un tableau temporaire pour les colonnes sélectionnées
            let filteredTable = document.createElement('table');
            let rows = table.rows;

            for (let i = 0; i < rows.length; i++) {
                let newRow = filteredTable.insertRow();
                let cells = rows[i].cells;

                // Ajouter uniquement les colonnes 1 et 3
                
                newRow.insertCell().textContent = cells[0].textContent; // Colonne 3
                newRow.insertCell().textContent = cells[1].textContent; // Colonne 1
                newRow.insertCell().textContent = cells[2].textContent.replace(/ /g,""); // Colonne 3
                newRow.insertCell().textContent = cells[3].textContent.replace(/ /g,""); // Colonne 3
                newRow.insertCell().textContent = cells[4].textContent.replace(/ /g,""); // Colonne 3
                
                //newRow.insertCell().textContent = cells[9].textContent; // Colonne 1                
            }

            // Convertir la table filtrée en Excel
            
            let workbook = XLSX.utils.table_to_book(filteredTable);
            XLSX.writeFile(workbook, 'stock_min.xlsx');
        }
</script>
{% endblock %}