From 45199030a04e6ba291d232d2482e64430f194c68 Mon Sep 17 00:00:00 2001
From: Rodia <alejandro.ayala@onecluster.org>
Date: Sat, 17 Aug 2024 11:30:24 -0500
Subject: [PATCH] Feat: Calculo de subtotal para muchas lineas

---
 .../static/js/calculate_subtotal_line.js      | 31 ++++++++++++++-----
 1 file changed, 23 insertions(+), 8 deletions(-)

diff --git a/tienda_ilusion/don_confiao/static/js/calculate_subtotal_line.js b/tienda_ilusion/don_confiao/static/js/calculate_subtotal_line.js
index f5f4f00..6f10690 100644
--- a/tienda_ilusion/don_confiao/static/js/calculate_subtotal_line.js
+++ b/tienda_ilusion/don_confiao/static/js/calculate_subtotal_line.js
@@ -1,3 +1,6 @@
+const quantity_lineRegexSelector = `[id^="${idPrefix}"][id$="${quantitySuffix}"]`;
+const price_lineRegexSelector = `[id^="${idPrefix}"][id$="${priceSuffix}"]`;
+
 function insertSubtotalField() {
   // Selecciona la fila de precio unitario para añadir la fila del subtotal después de ella
   const unitPriceRow = document.querySelector('input[id="id_saleline_set-0-unit_price"]').closest('tr');
@@ -13,10 +16,10 @@ function insertSubtotalField() {
      unitPriceRow.after(subtotalRow);
  }
 
-function calculateSubtotal() {
-     const quantityElement = document.getElementById('id_saleline_set-0-quantity');
-     const unitPriceElement = document.getElementById('id_saleline_set-0-unit_price');
-     const subtotalElement = document.getElementById('id_saleline_set-0-subtotal');
+function calculateSubtotal(id) {
+     const quantityElement = document.getElementById(`id_saleline_set-${id}-quantity`);
+     const unitPriceElement = document.getElementById(`id_saleline_set-${id}-unit_price`);
+     const subtotalElement = document.getElementById(`id_saleline_set-${id}-subtotal`);
 
      const quantity = parseFloat(quantityElement.value) || 0;
      const unitPrice = parseFloat(unitPriceElement.value) || 0;
@@ -27,9 +30,21 @@ function calculateSubtotal() {
 
  // Inserta el campo subtotal al cargar la página
  window.addEventListener('load', () => {
-     insertSubtotalField();
+   insertSubtotalField();
 
-     // Agregar los eventos para calcular el subtotal cuando cambie la cantidad o el precio unitario
-     document.getElementById('id_saleline_set-0-quantity').addEventListener('input', calculateSubtotal);
-     document.getElementById('id_saleline_set-0-unit_price').addEventListener('input', calculateSubtotal);
+   complete_form.addEventListener('change', function(event){
+     const quantityInputs = document.querySelectorAll(quantity_lineRegexSelector);
+     const ids = Array.prototype.map.call(quantityInputs, function(input) {
+       return input.id.match(/\d+/)[0];
+     });
+
+     ids.forEach(function(id) {
+       if (event.target.matches(quantity_lineRegexSelector)) {
+         calculateSubtotal(id);
+       }
+       if (event.target.matches(price_lineRegexSelector)) {
+         calculateSubtotal(id);
+       }
+     })
+   });
  });