Repository: candegodoy0/Proyecto-CostoPro
Pull request #5: Feature/tercera entrega
Author: login: candegodoy0
Created: 2025-05-08T00:25:56Z | Merged: 2025-05-22T21:09:28Z

Tercera entrega - Simulador Calculadora CostoPro

Se desarrolló la funcionalidad principal del simulador de costos de producción con JavaScript: uso de condicionales y bucles, funciones para realizar los cálculos, entrada y salida de datos y organización con clases, arrays y objetos. Se agregó al README el diagrama de flujo principal que resolverá la aplicación.


Diff:
diff --git a/Calculadora.js b/Calculadora.js
new file mode 100644
index 0000000..f5a07a6
--- /dev/null
+++ b/Calculadora.js
@@ -0,0 +1,70 @@
+
+import GastoFijo from './GastoFijo.js';
+import Material from './Material.js';
+
+
+class Calculadora{
+    constructor(nombreProducto) {
+    this.nombreProducto = nombreProducto;
+    this.materiales = [];
+    this.gastosFijos = [];
+  }
+
+  /*
+- Función para agregar materiales necesarios para fabricar una unidad de producto.
+- El usuario puede ingresar uno o mas materiales.
+- Cada material tiene un nombre, costo por unidad, cantidad necesaria, y costo total.
+*/
+
+   agregarMaterial({ nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada }) {
+    // Se agrega el material al array con los datos necesarios
+    this.materiales.push(new Material(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada));
+  }
+
+  //Función para ingresar los gastos fijos que no dependen de la cantidad producida. Ejemplo: alquiler, sueldos, etc.//
+  agregarGastoFijo(concepto, costo) {
+     // Se agrega el gasto fijo al array
+    this.gastosFijos.push(new GastoFijo(concepto, costo));
+  }
+
+  calcularCostoMaterialesUnitario() {
+    return this.materiales.reduce((total, material) => total + material.calcularCostoPorUnidadProducto(), 0);
+  }
+
+  calcularCostoMaterialesTotal(cantidad) {
+    return this.calcularCostoMaterialesUnitario() * cantidad;
+  }
+
+  calcularGastosFijos() {
+    return this.gastosFijos.reduce((total, gasto) => total + gasto.costo, 0);
+  }
+
+  generarResumen(gananciaPorcentual, cantidadProduccion) {
+    const totalVariables = this.calcularCostoMaterialesTotal(cantidadProduccion);
+    const totalFijos = this.calcularGastosFijos();
+    const costoTotal = totalVariables + totalFijos;
+    const costoTotalConGanancia = costoTotal * (1 + gananciaPorcentual / 100);
+    const costoPorUnidadConGanancia = costoTotalConGanancia / cantidadProduccion;
+
+    // Mensaje para mostrar al usuario de manera inmediata los resultados de los calculos 
+    let mensaje = "CÁLCULO FINALIZADO\n";
+    mensaje += "Producto: " + this.nombreProducto + "\n";
+    mensaje += "Cantidad a producir: " + cantidadProduccion + "\n";
+    mensaje += "Materiales: ";
+
+    for (let i = 0; i < this.materiales.length; i++) {
+      const material = this.materiales[i];
+      mensaje += material.nombre + ": $" + material.calcularCostoTotal();
+      if (i < this.materiales.length - 1) mensaje += " | ";
+    }
+
+    mensaje += `\n| Total gastos variables: $${totalVariables} |`;
+    mensaje += `\n| Total gastos fijos: $${totalFijos} |`;
+    mensaje += `\n| Costo final (con ganancia) para ${cantidadProduccion} unidades: $${costoTotalConGanancia} |`;
+    mensaje += `\n| Costo por unidad (con ganancia): $${costoPorUnidadConGanancia} |`;
+
+    return mensaje;
+  }
+}
+
+export default Calculadora
diff --git a/GastoFijo.js b/GastoFijo.js
new file mode 100644
index 0000000..2b63632
--- /dev/null
+++ b/GastoFijo.js
@@ -0,0 +1,7 @@
+class GastoFijo {
+  constructor(concepto, costo) {
+    this.concepto = concepto;
+    this.costo = costo;
+  }
+}
+export default GastoFijo
\ No newline at end of file
diff --git a/Material.js b/Material.js
new file mode 100644
index 0000000..67d8710
--- /dev/null
+++ b/Material.js
@@ -0,0 +1,18 @@
+  class Material {
+  constructor(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada) {
+    this.nombre = nombre;
+    this.costoUnitario = costoUnitario;
+    this.cantidad = cantidad;
+    this.unidad = unidad;
+    this.unidadesPorSeleccionada = unidadesPorSeleccionada;
+  }
+  calcularCostoPorUnidadProducto() {
+    return (this.costoUnitario / this.unidadesPorSeleccionada) * this.cantidad;
+  }
+
+    calcularCostoTotal() {
+    return this.calcularCostoPorUnidadProducto();
+  }
+}
+
+export default Material
\ No newline at end of file
diff --git a/index.html b/index.html
index 1fec28d..34f3505 100644
--- a/index.html
+++ b/index.html
@@ -103,6 +103,7 @@ <h5 class="modal-title" id="agregarProductoLabel">Producto agregado correctament
         </div>
       </div>
     </div>
+  
       
     
           <h4>Gastos Variables (por unidad)</h4>
@@ -126,7 +127,6 @@ <h4>Gastos Variables (por unidad)</h4>
           <div class="col-12 col-md-6 mb-3">
           <label for = "unidad-material"class="form-label">Unidad de medida: </label>
           <select class="form-select" id="unidad-material" name="unidad-material">
-
           <option value="litros">Litros</option>
           <option value="metros">Metros</option>
           <option value="cajas">Cajas</option>
@@ -282,8 +282,8 @@ <h3>Cantidad a producir</h3>
     <p> Indica cuantas unidades deseas producir para calcular el costo total.</p>
 
     <!--Formulario para indicar total de produccion-->
+    <!-- Agregar estilos para la alineación y diseño del formulario-->
     <form>
-
       <div class ="row">
         <div class="col-12 col-md-6 mb-3">
           <!-- Campo para ingresar el porcentaje de la ganancia -->
@@ -319,15 +319,19 @@ <h3 class="text-center mb-4">TABLA DE RESULTADOS</h3>
     </thead>
   <tbody>
         <tr>
-        <td>Gastos Variables </td>
+        <td>Total Gastos Variables </td>
         <td id = "total-variables">$0.00</td>
       </tr>
+      <tr>
+        <td>Total Gastos Fijos</td>
+      <td id = "total-fijos">$0.00</td>
+    </tr>
         <tr>
-          <td>Costo Total de Producción</td>
+          <td>Costo Total (con ganancia)</td>
         <td id = "costo-total">$0.00</td>
       </tr>
         <tr>
-        <td>Costo Por unidad</td>
+        <td>Costo Por Unidad (con ganancia)</td>
         <td id = "costo-ganancia">$0.00</td>
       </tr>
   </tbody>
@@ -390,6 +394,9 @@ <h4 class="text-center text-white">Ponte en contacto</h4>
 
     <!--Bootstrap JavaScript-->
   <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.5/dist/js/bootstrap.bundle.min.js" integrity="sha384-k6d4wzSIapyDyv1kpU366/PK5hCdSbCRGRCMv+eplOQJWyd1fbcAu9OCUj5zNLiq" crossorigin="anonymous"></script>
-
+  
+  <!-- Enlace al archivo de JavaScript que maneja la lógica de la calculadora -->
+  <script defer type="module" src="script.js"></script>
 </body>
 </html>
+
diff --git a/readme.md b/readme.md
index 3e2de53..f712e5f 100644
--- a/readme.md
+++ b/readme.md
@@ -1,28 +1,31 @@
 # CostoPro : Calculadora de Costos de Producción
 
 ## Descripción
-CostoPro es una herramienta web interactiva diseñada para ayudar a calcular los costos asociados a la producción de un proyecto. 
-El simulador permitirá a los usuarios ingresar datos sobre materiales, mano de obra y otros costos relacionados,calculando el costo total de producción y proporcionando un desglose detallado de los mismos.
+CostoPro es una herramienta web interactiva diseñada para ayudar a calcular los costos asociados a la producción de un producto. 
+El simulador permitirá a los usuarios ingresar datos sobre materiales, gastos fijos, calculando el costo total de producción y proporcionando un desglose detallado de los mismos.
 Esta herramienta está orientada a optimizar el proceso de planificación y estimación de costos para proyectos de producción. 
 
 ## Objetivos del proyecto 
-- Desarrollar una página web interactiva para calcular los costos de producción de un proyecto.
-- Permitir a los usuarios ingresar información sobre materiales, mano de obra y otros costos.
-- Calcular y mostrar el costo total de producción, incluyendo una división detallada de los costos involucrados.
+- Desarrollar una página web interactiva para calcular los costos de producción de un producto.
+- Permitir a los usuarios ingresar información sobre materiales y otros costos.
+- Calcular y mostrar el costo total de producción, por unidad de producto, incluyendo una división detallada de los costos involucrados.
 - Ofrecer un espacio para mejorar y agregar más funcionalidades, como la gestión de presupuestos, en futuras entregas.
 
 ## Tecnologías Utilizadas
 - HTML5: Para estructurar la página web.
-- CSS: Para el diseño y laestilización (esto se implementará en entregas posteriores).
-- JavaScript: Para implementar las funcionalidades interactivas del simulador (esto se planificará para futuras entregas).
+- CSS: Para el diseño y la estilización.
+- JavaScript: Para implementar las funcionalidades interactivas del simulador.
+- Bootstrap 5: Framework CSS para diseño responsivo.
 
 ## Funcionalidades previstas
 - Ingreso de datos sobre materiales y costos asociados.
-- Cálculo automático del costo total basado en los datos ingresados.
-- Desglose de los costos de mano de obraa, materiales y otros gastos.
-- Capacidad para actualizar los cálculos en tiempo real a medida que el usuario ingresa datos.
-- Opción de guardar o exportar los resultados de la simulación para futuras referencias.
+- Cálculo automático del costo total y por unidad basado en los datos ingresados.
+- Desglose de los costos fijos, materiales y otros gastos.
 
 ## Maqueta de Diseño Web
 El diseño de la página incluirá una interfaz sencilla y clara que permita a los usuarios interactuar fácilmente con las distintas herramientas del simulador. Se planea una disposición en colmumnas con formularios para ingresar los datos y una sección separada donde se mostrarán los resultados calculados.
 Puedes ver el prototipo del mockup [aquí](https://www.canva.com/design/DAGh8ePo5lA/f8PBcSXs0Y3Je0_3SCwQHQ/edit?utm_content=DAGh8ePo5lA&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton).
+
+## Diagrama de Flujo
+El siguiente diagrama representa el algoritmo prinicipal de la aplicación, incluyendo entradas, procesos, decisiones y salidas.
+[Ver diagrama de Flujo](https://drive.google.com/file/d/1Yv0KHfX70MYScOEtr9NniePTkI21eynK/view?usp=sharing)
\ No newline at end of file
diff --git a/script.js b/script.js
new file mode 100644
index 0000000..5f92a08
--- /dev/null
+++ b/script.js
@@ -0,0 +1,100 @@
+import Calculadora from './Calculadora.js';
+
+function iniciarCalculadora(){
+    alert("Bienvenido a CostoPro - Calculadora de Costos de Producción");
+    let nombreProducto = null;
+while (!nombreProducto) {
+  nombreProducto = prompt("Ingrese el nombre del producto que desea calcular (ej: Mesa) y siga los pasos:");
+}
+
+const calculadora = new Calculadora(nombreProducto);
+
+  let salir = false;
+  let gananciaPorcentual = null;
+let cantidadProduccion = null;
+
+  while (!salir) {
+    const opcion = prompt(
+      `MENÚ PRINCIPAL - ${nombreProducto}\n` +
+      `1. Agregar material\n` +
+      `2. Agregar gasto fijo\n` +
+      `3. Ingresar porcentaje de ganancia y cantidad a producir\n` +
+      `4. Calcular y mostrar resumen\n` +
+      `5. Salir\n\n` +
+      `Ingrese una opción:`
+    );
+
+switch(opcion){
+        // Agregar materiales
+  case "1":
+let seguirMaterial = true;
+        while (seguirMaterial) {
+    let nombre = prompt("Ingrese el nombre del material (ej: Tornillo):");
+    let costoUnitario = parseFloat(prompt(`Ingrese el costo por unidad de ${nombre} (ej: $1.000):`));
+    let cantidad = parseFloat(prompt(`Ingrese la cantidad requerida de ${nombre} por unidad de producto (ej: 150):`));
+    let unidad = prompt(`Ingrese la unidad de medida para ${nombre} (ej: litro, metro, caja):`);
+    let unidadesPorSeleccionada = parseFloat(prompt(`Ingrese cantidad de unidades estándar que hay por cada ${unidad} (ej: 12 si una caja tiene 12 unidades):`));
+
+    if (
+  !nombre || isNaN(costoUnitario) || isNaN(cantidad) ||
+  !unidad || isNaN(unidadesPorSeleccionada)) {
+      alert("Por favor, ingrese datos válidos.");
+}else{
+        calculadora.agregarMaterial({ nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada });
+    alert(" Material agregado correctamente.");
+}
+        seguirMaterial = confirm("¿Quiere agregar otro material?");
+  }
+  break;
+
+  // Agregar gastos fijos
+  case "2":
+       let seguirGasto = true;
+        while (seguirGasto) {
+    let concepto = prompt("Ingrese el concepto del gasto fijo (ej: Alquiler):");
+    let costo = parseFloat(prompt(`Ingrese el costo del gasto fijo ${concepto} (ej: $1000.00): `));
+    
+    if (!concepto || isNaN(costo)) {
+      alert("Por favor, ingrese un valor numérico válido.");
+    }else{
+    calculadora.agregarGastoFijo(concepto, costo);
+     alert(" Gasto fijo agregado correctamente.");
+    }
+    seguirGasto = confirm("¿Quiere agregar otro gasto?");
+  }
+  break;
+
+case "3":
+  gananciaPorcentual = parseFloat(prompt("Ingrese el porcentaje de ganancia que desee (ej: 25%):"));
+   cantidadProduccion = parseInt(prompt("Ingrese la cantidad total a producir (ej: 200):"));
+
+  if (isNaN(cantidadProduccion) || isNaN(gananciaPorcentual) || cantidadProduccion <= 0) {
+    alert("Cantidad o ganancia ingresadas inválidas.");
+  }else{
+    alert("Valores guardados correctamente")
+  }
+    break;
+  
+    case "4":
+      if (calculadora.materiales.length === 0 || calculadora.gastosFijos.length === 0) {
+          alert("Debe agregar al menos un material y un gasto fijo antes de calcular.");
+        } else if (gananciaPorcentual === null || cantidadProduccion === null) {
+          alert("Debe ingresar la ganancia y la cantidad a producir antes de calcular.");
+        } else {
+          const resumen = calculadora.generarResumen(gananciaPorcentual, cantidadProduccion);
+          alert(resumen);
+        }
+        break;
+
+         case "5":
+        salir = true;
+        alert("Gracias por usar CostoPro.");
+        break;
+
+      default:
+        alert("Opción inválida. Ingrese un número del 1 al 5.");
+        break;
+}
+  }
+}
+iniciarCalculadora(); 
\ No newline at end of file
diff --git a/styles.css b/styles.css
index 91775b1..91d27c1 100644
--- a/styles.css
+++ b/styles.css
@@ -173,6 +173,7 @@ section{
     box-shadow: 0 3px 6px rgba(0, 0,0,0.1);
 }
 
+
 form{
     /*
     display: flex;
@@ -202,7 +203,6 @@ input, select, textarea{
     border-collapse: collapse;
 }
 
-
 .table-responsive{
     width: 100%;
     overflow-x: auto;
@@ -233,7 +233,6 @@ table{
     table-layout: auto;
     margin: 0 auto;
 
-
 }
 
 table th, table td{
@@ -263,7 +262,6 @@ footer h2, footer h3{
   gap: 20px;
 }
 
-
 iframe{
     border: 0;
     width: 100%;
@@ -318,10 +316,10 @@ iframe{
         min-width: 100% !important;
         display: table;
     }
-
     body{
         padding-left: 0;
     }
+    
 
     main{
         margin-left: 0;
@@ -369,6 +367,7 @@ iframe{
         font-size: 14px;
     }
 
+
     .logo{
         margin: 0 auto 20px;
         width: 140px;
@@ -378,7 +377,6 @@ iframe{
         max-width: 90%;
         margin: 0 auto;
     }
-
 }
 @media (max-width: 1024px) {
   body {


Reviews:
user: login: MVelasquez98
body: PUNTAJE POR CONSIGNA:
La evaluación se realiza sobre una escala de 10 puntos, donde se aprueba con un mínimo de 4 puntos.

- **Algoritmos (1 punto)**
  - ✅ 1 punto: Uso correcto y eficiente de algoritmos condicionales y ciclos.

- **Funciones (1 punto)**
  - ⚠️ 0.5 puntos: Funciones con nombres confusos, estructura incorrecta o resultados incorrectos.
- **Funcionalidad (1 punto)**
  - ⚠️ 0.5 puntos: Flujo de trabajo incompleto o funcionalidad inapropiada al contexto. Código JavaScript mal referenciado o uso incorrecto de prompt() y alert(). _Revisar los comentarios de flujo de trabajo y menú para navegación, es confuso que flujo estoy probando como usuario. Las clases tienen que estar en modulos aparte referenciadas correctamente_
- **Interactividad (1 punto)**
  - ⚠️ 0.5 puntos: Interactividad insuficiente o salidas incoherentes._Nunca llego a visualizar cual es la salida o proposito de lo que estoy probando, mejorar el uso de salidas_
- **Escalabilidad (1 punto)**
  - ⚠️ 0.5 puntos: Falta de funciones con parámetros, arrays o objetos relevantes. _Falta una clase Calculadora con todos los metodos necesarios, separar la logica de la presentación_
- **Legibilidad (1 punto)**
  - ⚠️ 0.5 puntos: Nombres de variables, funciones u objetos poco significativos, código ilegible o mal estructurado. _El código deja de estar identado en varios puntos,  el nombre de algunas funciones no referencian lo que hacen, es dificir de leer que es lo que esta haciendo el código a veces_

- **GitHub (1.5 puntos):**

  - ✅ 0.25 puntos: Creación de una rama "backport/primer-parcial" a partir de la rama "master" utilizando Git.
  - ✅ 0.25 puntos: Creación de una rama "feature/tercera-entrega" a partir de la rama "develop" utilizando Git.
  - ✅ 0.5 puntos: Correcta realización de la solicitud de revisión para fusionar la rama "backport/primer-parcial" con "develop" en GitHub, resolviendo los conflictos de merge (si fuese necesario).
  - ✅ 0.5 puntos: Correcta realización de la solicitud de revisión y aprobación de la pull request para fusionar la rama "release/primer-parcial" con "master" en GitHub,  resolviendo los conflictos de merge (si fuese necesario).

- **Diagrama de Flujo (1.50 punto)**
  - ✅ 1.25 puntos: El diagrama de flujo está bien estructurado y representa correctamente el algoritmo principal, mostrando entrada, proceso, salida, y condicionales.
  - ✅ 0.25 puntos: Se proporciona correctamente un enlace al diagrama de flujo en el README del repositorio.

- **Avoid Feature Creep (1 punto)**

  - ✅ 1 punto: Se respetan los límites del alcance actual del proyecto, implementando únicamente las funcionalidades solicitadas. 
  
  **Total:** 7(Siete) 

state: CHANGES_REQUESTED
author_association: COLLABORATOR
submitted_at: 2025-05-14T15:22:32Z
user: login: MVelasquez98
state: CHANGES_REQUESTED
author_association: COLLABORATOR
submitted_at: 2025-05-15T14:25:54Z
user: login: MVelasquez98
state: CHANGES_REQUESTED
author_association: COLLABORATOR
submitted_at: 2025-05-15T16:39:46Z
user: login: MVelasquez98
body: LGTM
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-05-22T21:05:49Z

Review comments:
diff_hunk: @@ -0,0 +1,189 @@
+// Declaracion de variable para guardar el nombre del producto ingresado por el usuario
+let nombreProducto = prompt("Ingrese el nombre del producto (ej: Mesa):");
+console.log(` Producto: ${nombreProducto}`);
+
+//Clases
+class Material {
path: script.js
user: login: MVelasquez98
body: Las Clases van en un archivo aparte y se exportan como módulo, como vimos en el encuentro sincronico. Aca esta el [código](https://github.com/MVelasquez98/Programaci-n-Web-I---UCES/tree/feature/tercera-entrega/Clase%2009) que usamos ese día. 
created_at: 2025-05-14T14:01:38Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,189 @@
+// Declaracion de variable para guardar el nombre del producto ingresado por el usuario
+let nombreProducto = prompt("Ingrese el nombre del producto (ej: Mesa):");
+console.log(` Producto: ${nombreProducto}`);
+
+//Clases
+class Material {
+  constructor(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada) {
+    this.nombre = nombre;
+    this.costoUnitario = costoUnitario;
+    this.cantidad = cantidad;
+    this.unidad = unidad;
+    this.unidadesPorSeleccionada = unidadesPorSeleccionada;
+    this.costoTotal = costoUnitario * cantidad;
+  }
+}
+
+class GastoFijo {
path: script.js
user: login: MVelasquez98
body: Las Clases van en un archivo aparte y se exportan como módulo, como vimos en el encuentro sincronico. Aca esta el [código](https://github.com/MVelasquez98/Programaci-n-Web-I---UCES/tree/feature/tercera-entrega/Clase%2009) que usamos ese día. 
created_at: 2025-05-14T14:02:01Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,189 @@
+// Declaracion de variable para guardar el nombre del producto ingresado por el usuario
+let nombreProducto = prompt("Ingrese el nombre del producto (ej: Mesa):");
+console.log(` Producto: ${nombreProducto}`);
+
+//Clases
+class Material {
+  constructor(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada) {
+    this.nombre = nombre;
+    this.costoUnitario = costoUnitario;
+    this.cantidad = cantidad;
+    this.unidad = unidad;
+    this.unidadesPorSeleccionada = unidadesPorSeleccionada;
+    this.costoTotal = costoUnitario * cantidad;
+  }
+}
+
+class GastoFijo {
+  constructor(concepto, costo) {
+    this.concepto = concepto;
+    this.costo = costo;
+  }
+}
+
+
+// Arrays vacios para guardar materiales (gastos variables) y gastos fijos
+const materiales = [];
+const gastosFijos = [];
+
+/*
+- Función para agregar materiales necesarios para fabricar una unidad de producto.
+- El usuario puede ingresar uno o mas materiales.
+- Cada material tiene un nombre, costo por unidad, cantidad necesaria, y costo total.
+*/
+function agregarMateriales() {
+  let seguir = true;
+
+  while (seguir) {
+    let nombre = prompt("Ingrese el nombre del material (ej: Tornillo):");
+    let costoUnitario = parseFloat(prompt(`Ingrese el costo por unidad de ${nombre} (ej: $1000.00):`));
+    let cantidad = parseFloat(prompt(`Ingrese la cantidad requerida de ${nombre} por unidad de producto (ej: 150):`));
+    let unidad = prompt(`Ingrese la unidad de medida para ${nombre} (ej: litro, metro, caja):`);
+    let unidadesPorSeleccionada = parseFloat(prompt(`Ingrese cantidad de unidades estándar que hay por cada ${unidad} (ej: 12 si una caja tiene 12 unidades):`));
+
+    if (isNaN(costoUnitario) 
+      || isNaN(cantidad) ||
+    isNaN(unidadesPorSeleccionada) ||
+    unidadesPorSeleccionada <= 0
+  ) {
+      alert("Por favor, ingrese valores numéricos válidos.");
+      continue;
+    }
+
+     // Se agrega el material al array con los datos necesarios
+    materiales.push(new Material({
+      nombre,
+      costoUnitario,
+      cantidad,
+      unidad,
+      unidadesPorSeleccionada,
+      costoTotal: costoUnitario * cantidad
+    }));
+
+    seguir = confirm("¿Quiere agregar otro material?");
+  }
+}
+
+
+//Función para ingresar los gastos fijos que no dependen de la cantidad producida. Ejemplo: alquiler, sueldos, etc.//
+function agregarGastosFijos() {
+  let seguir = true;
+
+  while (seguir) {
+    let concepto = prompt("Ingrese el concepto del gasto fijo (ej: Alquiler):");
+    let costo = parseFloat(prompt(`Ingrese el costo del gasto fijo ${concepto} (ej: $1000.00):`));
+
+    if (isNaN(costo)) {
+      alert("Por favor, ingrese un valor numérico válido.");
+      continue;
+    }
+
+     // Se agrega el gasto fijo al array
+    gastosFijos.push(new GastoFijo( concepto, costo));
+    seguir = confirm("¿Quiere agregar otro gasto fijo?");
+  }
+}
+
+/*
+Función para realizar todos los cálculos del simuador:
+- Primero valida que haya agregado correctamente materiales y gastos fijos.
+- Se le pide al usuario el porcentaje de ganancia y cantidad a producir
+- Se calcula el costo total de materiales, gastos fijos, y costos totales finales de producion
+- Se muestra un resumen de todos los costos
+*/
+
+function calcularCostos() {
+  if (materiales.length === 0 || gastosFijos.length === 0) {
+    alert("Debe ingresar al menos un material y un gasto fijo antes de calcular.");
+    return;
+  }
+
+  let gananciaPorcentual = parseFloat(prompt("Ingrese el porcentaje de ganancia que desee (ej: 25%):"));
+  let cantidadProduccion = parseInt(prompt("Ingrese la cantidad total a producir (ej: 200):"));
+
+  if (isNaN(cantidadProduccion) || isNaN(gananciaPorcentual) || cantidadProduccion <= 0) {
+    alert("Cantidad o ganancia ingresadas inválidas.");
+    return;
+  }
+
+  // Calcular total de gastos variables por unidad
+  function calcularCostoMateriales(materiales) {
+let totalVariablesUnitarios = 0;
+for (let i = 0; i < materiales.length; i++) {
+  totalVariablesUnitarios += materiales[i].costoTotal;
+}
+return totalVariablesUnitarios;
+  }
+
+  // Llamar a la funcion y usar el resultado
+  let totalVariablesUnitarios = calcularCostoMateriales(materiales);
+   // Total de variables para toda la producción
+let totalVariables = totalVariablesUnitarios * cantidadProduccion;
+
+// Calcular total de gastos fijos
+let totalFijos = 0;
+for (let i = 0; i < gastosFijos.length; i++) {
+  totalFijos += gastosFijos[i].costo;
+}
+
+// Calcular costo total con ganancia incluida
+let costoTotal = totalVariables + totalFijos;
+let costoTotalConGanancia = costoTotal * (1 + gananciaPorcentual / 100);
+
+  // Costo por unidad con ganancia incluida
+  let costoPorUnidadConGanancia = costoTotalConGanancia / cantidadProduccion;
+
+
+// Mensaje para mostrar al usuario de manera inmediata los resultados de los calculos 
+let mensaje = "CÁLCULO FINALIZADO\n";
+mensaje += "Producto: " + nombreProducto + "\n"; 
+mensaje += "Cantidad a producir: " + cantidadProduccion + "\n";
+mensaje += "Materiales: ";
+
+ for (let i = 0; i < materiales.length; i++) {
+  mensaje += materiales[i].nombre + ": $" + materiales[i].costoTotal;
+  if (i < materiales.length - 1) {
+    mensaje += " | "; 
+}
+}
+
+mensaje += "\n| Total gastos variables: $" + totalVariables + " |";
+mensaje += "\n| Total gastos fijos: $" + totalFijos + " |";
+mensaje += "\n| Costo final (con ganancia) para " + cantidadProduccion + " unidades" + ": $" + costoTotalConGanancia + " |";
+mensaje += "\n| Costo final (con ganancia) por cada unidad: $" + costoPorUnidadConGanancia + " | ";
+
+alert(mensaje);
+
+  /* Mostrar todos los resultados detalalados en consola
path: script.js
user: login: MVelasquez98
body: No corresponde código comentado, si no lo vas a utilizar, simplemente borralo, no lo dejes comentado
created_at: 2025-05-14T14:02:42Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,189 @@
+// Declaracion de variable para guardar el nombre del producto ingresado por el usuario
+let nombreProducto = prompt("Ingrese el nombre del producto (ej: Mesa):");
+console.log(` Producto: ${nombreProducto}`);
+
+//Clases
+class Material {
path: script.js
user: login: MVelasquez98
body: ¿Porque la clase Material no tiene [métodos propios](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Classes#m%C3%A9todos_prototipo)? ¿calcular costo total no podría ser uno de ellos?
created_at: 2025-05-14T14:08:42Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,189 @@
+// Declaracion de variable para guardar el nombre del producto ingresado por el usuario
+let nombreProducto = prompt("Ingrese el nombre del producto (ej: Mesa):");
+console.log(` Producto: ${nombreProducto}`);
+
+//Clases
+class Material {
+  constructor(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada) {
+    this.nombre = nombre;
+    this.costoUnitario = costoUnitario;
+    this.cantidad = cantidad;
+    this.unidad = unidad;
+    this.unidadesPorSeleccionada = unidadesPorSeleccionada;
+    this.costoTotal = costoUnitario * cantidad;
+  }
+}
+
+class GastoFijo {
+  constructor(concepto, costo) {
+    this.concepto = concepto;
+    this.costo = costo;
+  }
+}
+
+
+// Arrays vacios para guardar materiales (gastos variables) y gastos fijos
path: script.js
user: login: MVelasquez98
body: ```suggestion
// Sugerencia: Podrías encapsular estos arrays dentro de una clase, por ejemplo `Calculadora`, 
// y definirlos como propiedades del constructor. Esto te va a permitir organizar mejor el código, 
// mantener el estado dentro de una instancia y facilitar futuras ampliaciones (como métodos para 
// agregar materiales, calcular totales, etc.). Ejemplo:

class Calculadora {
  constructor() {
    this.materiales = [];
    this.gastosFijos = [];
  }
}
```
created_at: 2025-05-14T14:15:28Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,189 @@
+// Declaracion de variable para guardar el nombre del producto ingresado por el usuario
+let nombreProducto = prompt("Ingrese el nombre del producto (ej: Mesa):");
+console.log(` Producto: ${nombreProducto}`);
+
+//Clases
+class Material {
+  constructor(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada) {
+    this.nombre = nombre;
+    this.costoUnitario = costoUnitario;
+    this.cantidad = cantidad;
+    this.unidad = unidad;
+    this.unidadesPorSeleccionada = unidadesPorSeleccionada;
+    this.costoTotal = costoUnitario * cantidad;
+  }
+}
+
+class GastoFijo {
+  constructor(concepto, costo) {
+    this.concepto = concepto;
+    this.costo = costo;
+  }
+}
+
+
+// Arrays vacios para guardar materiales (gastos variables) y gastos fijos
+const materiales = [];
+const gastosFijos = [];
+
+/*
+- Función para agregar materiales necesarios para fabricar una unidad de producto.
+- El usuario puede ingresar uno o mas materiales.
+- Cada material tiene un nombre, costo por unidad, cantidad necesaria, y costo total.
+*/
+function agregarMateriales() {
+  let seguir = true;
+
+  while (seguir) {
+    let nombre = prompt("Ingrese el nombre del material (ej: Tornillo):");
+    let costoUnitario = parseFloat(prompt(`Ingrese el costo por unidad de ${nombre} (ej: $1000.00):`));
+    let cantidad = parseFloat(prompt(`Ingrese la cantidad requerida de ${nombre} por unidad de producto (ej: 150):`));
+    let unidad = prompt(`Ingrese la unidad de medida para ${nombre} (ej: litro, metro, caja):`);
+    let unidadesPorSeleccionada = parseFloat(prompt(`Ingrese cantidad de unidades estándar que hay por cada ${unidad} (ej: 12 si una caja tiene 12 unidades):`));
+
+    if (isNaN(costoUnitario) 
+      || isNaN(cantidad) ||
+    isNaN(unidadesPorSeleccionada) ||
+    unidadesPorSeleccionada <= 0
+  ) {
+      alert("Por favor, ingrese valores numéricos válidos.");
+      continue;
+    }
+
+     // Se agrega el material al array con los datos necesarios
+    materiales.push(new Material({
+      nombre,
+      costoUnitario,
+      cantidad,
+      unidad,
+      unidadesPorSeleccionada,
+      costoTotal: costoUnitario * cantidad
+    }));
+
+    seguir = confirm("¿Quiere agregar otro material?");
+  }
+}
+
+
+//Función para ingresar los gastos fijos que no dependen de la cantidad producida. Ejemplo: alquiler, sueldos, etc.//
+function agregarGastosFijos() {
+  let seguir = true;
+
+  while (seguir) {
+    let concepto = prompt("Ingrese el concepto del gasto fijo (ej: Alquiler):");
+    let costo = parseFloat(prompt(`Ingrese el costo del gasto fijo ${concepto} (ej: $1000.00):`));
+
+    if (isNaN(costo)) {
+      alert("Por favor, ingrese un valor numérico válido.");
+      continue;
+    }
+
+     // Se agrega el gasto fijo al array
+    gastosFijos.push(new GastoFijo( concepto, costo));
path: script.js
user: login: MVelasquez98
body: ```suggestion
calculadora.agregarGastoFijo(concepto, costo);
```
created_at: 2025-05-14T14:20:54Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,189 @@
+// Declaracion de variable para guardar el nombre del producto ingresado por el usuario
+let nombreProducto = prompt("Ingrese el nombre del producto (ej: Mesa):");
+console.log(` Producto: ${nombreProducto}`);
+
+//Clases
+class Material {
+  constructor(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada) {
+    this.nombre = nombre;
+    this.costoUnitario = costoUnitario;
+    this.cantidad = cantidad;
+    this.unidad = unidad;
+    this.unidadesPorSeleccionada = unidadesPorSeleccionada;
+    this.costoTotal = costoUnitario * cantidad;
+  }
+}
+
+class GastoFijo {
+  constructor(concepto, costo) {
+    this.concepto = concepto;
+    this.costo = costo;
+  }
+}
+
+
+// Arrays vacios para guardar materiales (gastos variables) y gastos fijos
+const materiales = [];
+const gastosFijos = [];
+
+/*
+- Función para agregar materiales necesarios para fabricar una unidad de producto.
+- El usuario puede ingresar uno o mas materiales.
+- Cada material tiene un nombre, costo por unidad, cantidad necesaria, y costo total.
+*/
+function agregarMateriales() {
+  let seguir = true;
+
+  while (seguir) {
+    let nombre = prompt("Ingrese el nombre del material (ej: Tornillo):");
+    let costoUnitario = parseFloat(prompt(`Ingrese el costo por unidad de ${nombre} (ej: $1000.00):`));
+    let cantidad = parseFloat(prompt(`Ingrese la cantidad requerida de ${nombre} por unidad de producto (ej: 150):`));
+    let unidad = prompt(`Ingrese la unidad de medida para ${nombre} (ej: litro, metro, caja):`);
+    let unidadesPorSeleccionada = parseFloat(prompt(`Ingrese cantidad de unidades estándar que hay por cada ${unidad} (ej: 12 si una caja tiene 12 unidades):`));
+
+    if (isNaN(costoUnitario) 
+      || isNaN(cantidad) ||
+    isNaN(unidadesPorSeleccionada) ||
+    unidadesPorSeleccionada <= 0
+  ) {
+      alert("Por favor, ingrese valores numéricos válidos.");
+      continue;
+    }
+
+     // Se agrega el material al array con los datos necesarios
+    materiales.push(new Material({
path: script.js
user: login: MVelasquez98
body: ```suggestion
calculadora.agregarMaterial({
  nombre,
  costoUnitario,
  cantidad,
  unidad,
  unidadesPorSeleccionada
});
```
created_at: 2025-05-14T14:23:55Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,189 @@
+// Declaracion de variable para guardar el nombre del producto ingresado por el usuario
+let nombreProducto = prompt("Ingrese el nombre del producto (ej: Mesa):");
+console.log(` Producto: ${nombreProducto}`);
+
+//Clases
+class Material {
+  constructor(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada) {
+    this.nombre = nombre;
+    this.costoUnitario = costoUnitario;
+    this.cantidad = cantidad;
+    this.unidad = unidad;
+    this.unidadesPorSeleccionada = unidadesPorSeleccionada;
+    this.costoTotal = costoUnitario * cantidad;
+  }
+}
+
+class GastoFijo {
+  constructor(concepto, costo) {
+    this.concepto = concepto;
+    this.costo = costo;
+  }
+}
+
+
+// Arrays vacios para guardar materiales (gastos variables) y gastos fijos
+const materiales = [];
+const gastosFijos = [];
+
+/*
+- Función para agregar materiales necesarios para fabricar una unidad de producto.
+- El usuario puede ingresar uno o mas materiales.
+- Cada material tiene un nombre, costo por unidad, cantidad necesaria, y costo total.
+*/
+function agregarMateriales() {
+  let seguir = true;
+
+  while (seguir) {
+    let nombre = prompt("Ingrese el nombre del material (ej: Tornillo):");
+    let costoUnitario = parseFloat(prompt(`Ingrese el costo por unidad de ${nombre} (ej: $1000.00):`));
+    let cantidad = parseFloat(prompt(`Ingrese la cantidad requerida de ${nombre} por unidad de producto (ej: 150):`));
+    let unidad = prompt(`Ingrese la unidad de medida para ${nombre} (ej: litro, metro, caja):`);
+    let unidadesPorSeleccionada = parseFloat(prompt(`Ingrese cantidad de unidades estándar que hay por cada ${unidad} (ej: 12 si una caja tiene 12 unidades):`));
+
+    if (isNaN(costoUnitario) 
+      || isNaN(cantidad) ||
+    isNaN(unidadesPorSeleccionada) ||
+    unidadesPorSeleccionada <= 0
+  ) {
+      alert("Por favor, ingrese valores numéricos válidos.");
+      continue;
+    }
+
+     // Se agrega el material al array con los datos necesarios
+    materiales.push(new Material({
+      nombre,
+      costoUnitario,
+      cantidad,
+      unidad,
+      unidadesPorSeleccionada,
+      costoTotal: costoUnitario * cantidad
+    }));
+
+    seguir = confirm("¿Quiere agregar otro material?");
+  }
+}
+
+
+//Función para ingresar los gastos fijos que no dependen de la cantidad producida. Ejemplo: alquiler, sueldos, etc.//
+function agregarGastosFijos() {
+  let seguir = true;
+
+  while (seguir) {
+    let concepto = prompt("Ingrese el concepto del gasto fijo (ej: Alquiler):");
+    let costo = parseFloat(prompt(`Ingrese el costo del gasto fijo ${concepto} (ej: $1000.00):`));
+
+    if (isNaN(costo)) {
+      alert("Por favor, ingrese un valor numérico válido.");
+      continue;
+    }
+
+     // Se agrega el gasto fijo al array
+    gastosFijos.push(new GastoFijo( concepto, costo));
+    seguir = confirm("¿Quiere agregar otro gasto fijo?");
+  }
+}
+
+/*
+Función para realizar todos los cálculos del simuador:
+- Primero valida que haya agregado correctamente materiales y gastos fijos.
+- Se le pide al usuario el porcentaje de ganancia y cantidad a producir
+- Se calcula el costo total de materiales, gastos fijos, y costos totales finales de producion
+- Se muestra un resumen de todos los costos
+*/
+
+function calcularCostos() {
path: script.js
user: login: MVelasquez98
body: Esta función no calcula nada, solo hace validaciones, quizas esta mal nombrada.
created_at: 2025-05-14T14:36:19Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,189 @@
+// Declaracion de variable para guardar el nombre del producto ingresado por el usuario
+let nombreProducto = prompt("Ingrese el nombre del producto (ej: Mesa):");
+console.log(` Producto: ${nombreProducto}`);
+
+//Clases
+class Material {
+  constructor(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada) {
+    this.nombre = nombre;
+    this.costoUnitario = costoUnitario;
+    this.cantidad = cantidad;
+    this.unidad = unidad;
+    this.unidadesPorSeleccionada = unidadesPorSeleccionada;
+    this.costoTotal = costoUnitario * cantidad;
+  }
+}
+
+class GastoFijo {
+  constructor(concepto, costo) {
+    this.concepto = concepto;
+    this.costo = costo;
+  }
+}
+
+
+// Arrays vacios para guardar materiales (gastos variables) y gastos fijos
+const materiales = [];
+const gastosFijos = [];
+
+/*
+- Función para agregar materiales necesarios para fabricar una unidad de producto.
+- El usuario puede ingresar uno o mas materiales.
+- Cada material tiene un nombre, costo por unidad, cantidad necesaria, y costo total.
+*/
+function agregarMateriales() {
+  let seguir = true;
+
+  while (seguir) {
+    let nombre = prompt("Ingrese el nombre del material (ej: Tornillo):");
+    let costoUnitario = parseFloat(prompt(`Ingrese el costo por unidad de ${nombre} (ej: $1000.00):`));
+    let cantidad = parseFloat(prompt(`Ingrese la cantidad requerida de ${nombre} por unidad de producto (ej: 150):`));
+    let unidad = prompt(`Ingrese la unidad de medida para ${nombre} (ej: litro, metro, caja):`);
+    let unidadesPorSeleccionada = parseFloat(prompt(`Ingrese cantidad de unidades estándar que hay por cada ${unidad} (ej: 12 si una caja tiene 12 unidades):`));
+
+    if (isNaN(costoUnitario) 
+      || isNaN(cantidad) ||
+    isNaN(unidadesPorSeleccionada) ||
+    unidadesPorSeleccionada <= 0
+  ) {
+      alert("Por favor, ingrese valores numéricos válidos.");
+      continue;
+    }
+
+     // Se agrega el material al array con los datos necesarios
+    materiales.push(new Material({
+      nombre,
+      costoUnitario,
+      cantidad,
+      unidad,
+      unidadesPorSeleccionada,
+      costoTotal: costoUnitario * cantidad
+    }));
+
+    seguir = confirm("¿Quiere agregar otro material?");
+  }
+}
+
+
+//Función para ingresar los gastos fijos que no dependen de la cantidad producida. Ejemplo: alquiler, sueldos, etc.//
+function agregarGastosFijos() {
+  let seguir = true;
+
+  while (seguir) {
+    let concepto = prompt("Ingrese el concepto del gasto fijo (ej: Alquiler):");
+    let costo = parseFloat(prompt(`Ingrese el costo del gasto fijo ${concepto} (ej: $1000.00):`));
+
+    if (isNaN(costo)) {
+      alert("Por favor, ingrese un valor numérico válido.");
+      continue;
+    }
+
+     // Se agrega el gasto fijo al array
+    gastosFijos.push(new GastoFijo( concepto, costo));
+    seguir = confirm("¿Quiere agregar otro gasto fijo?");
+  }
+}
+
+/*
+Función para realizar todos los cálculos del simuador:
+- Primero valida que haya agregado correctamente materiales y gastos fijos.
+- Se le pide al usuario el porcentaje de ganancia y cantidad a producir
+- Se calcula el costo total de materiales, gastos fijos, y costos totales finales de producion
+- Se muestra un resumen de todos los costos
+*/
+
+function calcularCostos() {
+  if (materiales.length === 0 || gastosFijos.length === 0) {
+    alert("Debe ingresar al menos un material y un gasto fijo antes de calcular.");
+    return;
+  }
+
+  let gananciaPorcentual = parseFloat(prompt("Ingrese el porcentaje de ganancia que desee (ej: 25%):"));
+  let cantidadProduccion = parseInt(prompt("Ingrese la cantidad total a producir (ej: 200):"));
+
+  if (isNaN(cantidadProduccion) || isNaN(gananciaPorcentual) || cantidadProduccion <= 0) {
+    alert("Cantidad o ganancia ingresadas inválidas.");
+    return;
+  }
+
+  // Calcular total de gastos variables por unidad
path: script.js
user: login: MVelasquez98
body: ```suggestion
calculadora.calcularCostoMaterialesUnitario()
```
created_at: 2025-05-14T14:42:55Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,189 @@
+// Declaracion de variable para guardar el nombre del producto ingresado por el usuario
+let nombreProducto = prompt("Ingrese el nombre del producto (ej: Mesa):");
+console.log(` Producto: ${nombreProducto}`);
+
+//Clases
+class Material {
+  constructor(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada) {
+    this.nombre = nombre;
+    this.costoUnitario = costoUnitario;
+    this.cantidad = cantidad;
+    this.unidad = unidad;
+    this.unidadesPorSeleccionada = unidadesPorSeleccionada;
+    this.costoTotal = costoUnitario * cantidad;
+  }
+}
+
+class GastoFijo {
+  constructor(concepto, costo) {
+    this.concepto = concepto;
+    this.costo = costo;
+  }
+}
+
+
+// Arrays vacios para guardar materiales (gastos variables) y gastos fijos
+const materiales = [];
+const gastosFijos = [];
+
+/*
+- Función para agregar materiales necesarios para fabricar una unidad de producto.
+- El usuario puede ingresar uno o mas materiales.
+- Cada material tiene un nombre, costo por unidad, cantidad necesaria, y costo total.
+*/
+function agregarMateriales() {
+  let seguir = true;
+
+  while (seguir) {
+    let nombre = prompt("Ingrese el nombre del material (ej: Tornillo):");
+    let costoUnitario = parseFloat(prompt(`Ingrese el costo por unidad de ${nombre} (ej: $1000.00):`));
+    let cantidad = parseFloat(prompt(`Ingrese la cantidad requerida de ${nombre} por unidad de producto (ej: 150):`));
+    let unidad = prompt(`Ingrese la unidad de medida para ${nombre} (ej: litro, metro, caja):`);
+    let unidadesPorSeleccionada = parseFloat(prompt(`Ingrese cantidad de unidades estándar que hay por cada ${unidad} (ej: 12 si una caja tiene 12 unidades):`));
+
+    if (isNaN(costoUnitario) 
+      || isNaN(cantidad) ||
+    isNaN(unidadesPorSeleccionada) ||
+    unidadesPorSeleccionada <= 0
+  ) {
+      alert("Por favor, ingrese valores numéricos válidos.");
+      continue;
+    }
+
+     // Se agrega el material al array con los datos necesarios
+    materiales.push(new Material({
+      nombre,
+      costoUnitario,
+      cantidad,
+      unidad,
+      unidadesPorSeleccionada,
+      costoTotal: costoUnitario * cantidad
+    }));
+
+    seguir = confirm("¿Quiere agregar otro material?");
+  }
+}
+
+
+//Función para ingresar los gastos fijos que no dependen de la cantidad producida. Ejemplo: alquiler, sueldos, etc.//
+function agregarGastosFijos() {
+  let seguir = true;
+
+  while (seguir) {
+    let concepto = prompt("Ingrese el concepto del gasto fijo (ej: Alquiler):");
+    let costo = parseFloat(prompt(`Ingrese el costo del gasto fijo ${concepto} (ej: $1000.00):`));
+
+    if (isNaN(costo)) {
+      alert("Por favor, ingrese un valor numérico válido.");
+      continue;
+    }
+
+     // Se agrega el gasto fijo al array
+    gastosFijos.push(new GastoFijo( concepto, costo));
+    seguir = confirm("¿Quiere agregar otro gasto fijo?");
+  }
+}
+
+/*
+Función para realizar todos los cálculos del simuador:
+- Primero valida que haya agregado correctamente materiales y gastos fijos.
+- Se le pide al usuario el porcentaje de ganancia y cantidad a producir
+- Se calcula el costo total de materiales, gastos fijos, y costos totales finales de producion
+- Se muestra un resumen de todos los costos
+*/
+
+function calcularCostos() {
+  if (materiales.length === 0 || gastosFijos.length === 0) {
+    alert("Debe ingresar al menos un material y un gasto fijo antes de calcular.");
+    return;
+  }
+
+  let gananciaPorcentual = parseFloat(prompt("Ingrese el porcentaje de ganancia que desee (ej: 25%):"));
+  let cantidadProduccion = parseInt(prompt("Ingrese la cantidad total a producir (ej: 200):"));
+
+  if (isNaN(cantidadProduccion) || isNaN(gananciaPorcentual) || cantidadProduccion <= 0) {
+    alert("Cantidad o ganancia ingresadas inválidas.");
+    return;
+  }
+
+  // Calcular total de gastos variables por unidad
path: script.js
user: login: MVelasquez98
body: Esta mal identada la función
created_at: 2025-05-14T14:43:12Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,189 @@
+// Declaracion de variable para guardar el nombre del producto ingresado por el usuario
+let nombreProducto = prompt("Ingrese el nombre del producto (ej: Mesa):");
+console.log(` Producto: ${nombreProducto}`);
+
+//Clases
+class Material {
+  constructor(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada) {
+    this.nombre = nombre;
+    this.costoUnitario = costoUnitario;
+    this.cantidad = cantidad;
+    this.unidad = unidad;
+    this.unidadesPorSeleccionada = unidadesPorSeleccionada;
+    this.costoTotal = costoUnitario * cantidad;
+  }
+}
+
+class GastoFijo {
+  constructor(concepto, costo) {
+    this.concepto = concepto;
+    this.costo = costo;
+  }
+}
+
+
+// Arrays vacios para guardar materiales (gastos variables) y gastos fijos
+const materiales = [];
+const gastosFijos = [];
+
+/*
+- Función para agregar materiales necesarios para fabricar una unidad de producto.
+- El usuario puede ingresar uno o mas materiales.
+- Cada material tiene un nombre, costo por unidad, cantidad necesaria, y costo total.
+*/
+function agregarMateriales() {
+  let seguir = true;
+
+  while (seguir) {
+    let nombre = prompt("Ingrese el nombre del material (ej: Tornillo):");
+    let costoUnitario = parseFloat(prompt(`Ingrese el costo por unidad de ${nombre} (ej: $1000.00):`));
+    let cantidad = parseFloat(prompt(`Ingrese la cantidad requerida de ${nombre} por unidad de producto (ej: 150):`));
+    let unidad = prompt(`Ingrese la unidad de medida para ${nombre} (ej: litro, metro, caja):`);
+    let unidadesPorSeleccionada = parseFloat(prompt(`Ingrese cantidad de unidades estándar que hay por cada ${unidad} (ej: 12 si una caja tiene 12 unidades):`));
+
+    if (isNaN(costoUnitario) 
+      || isNaN(cantidad) ||
+    isNaN(unidadesPorSeleccionada) ||
+    unidadesPorSeleccionada <= 0
+  ) {
+      alert("Por favor, ingrese valores numéricos válidos.");
+      continue;
+    }
+
+     // Se agrega el material al array con los datos necesarios
+    materiales.push(new Material({
+      nombre,
+      costoUnitario,
+      cantidad,
+      unidad,
+      unidadesPorSeleccionada,
+      costoTotal: costoUnitario * cantidad
+    }));
+
+    seguir = confirm("¿Quiere agregar otro material?");
+  }
+}
+
+
+//Función para ingresar los gastos fijos que no dependen de la cantidad producida. Ejemplo: alquiler, sueldos, etc.//
+function agregarGastosFijos() {
+  let seguir = true;
+
+  while (seguir) {
+    let concepto = prompt("Ingrese el concepto del gasto fijo (ej: Alquiler):");
+    let costo = parseFloat(prompt(`Ingrese el costo del gasto fijo ${concepto} (ej: $1000.00):`));
+
+    if (isNaN(costo)) {
+      alert("Por favor, ingrese un valor numérico válido.");
+      continue;
+    }
+
+     // Se agrega el gasto fijo al array
+    gastosFijos.push(new GastoFijo( concepto, costo));
+    seguir = confirm("¿Quiere agregar otro gasto fijo?");
+  }
+}
+
+/*
+Función para realizar todos los cálculos del simuador:
+- Primero valida que haya agregado correctamente materiales y gastos fijos.
+- Se le pide al usuario el porcentaje de ganancia y cantidad a producir
+- Se calcula el costo total de materiales, gastos fijos, y costos totales finales de producion
+- Se muestra un resumen de todos los costos
+*/
+
+function calcularCostos() {
+  if (materiales.length === 0 || gastosFijos.length === 0) {
+    alert("Debe ingresar al menos un material y un gasto fijo antes de calcular.");
+    return;
+  }
+
+  let gananciaPorcentual = parseFloat(prompt("Ingrese el porcentaje de ganancia que desee (ej: 25%):"));
+  let cantidadProduccion = parseInt(prompt("Ingrese la cantidad total a producir (ej: 200):"));
+
+  if (isNaN(cantidadProduccion) || isNaN(gananciaPorcentual) || cantidadProduccion <= 0) {
+    alert("Cantidad o ganancia ingresadas inválidas.");
+    return;
+  }
+
+  // Calcular total de gastos variables por unidad
+  function calcularCostoMateriales(materiales) {
+let totalVariablesUnitarios = 0;
+for (let i = 0; i < materiales.length; i++) {
+  totalVariablesUnitarios += materiales[i].costoTotal;
+}
+return totalVariablesUnitarios;
+  }
+
+  // Llamar a la funcion y usar el resultado
+  let totalVariablesUnitarios = calcularCostoMateriales(materiales);
+   // Total de variables para toda la producción
+let totalVariables = totalVariablesUnitarios * cantidadProduccion;
path: script.js
user: login: MVelasquez98
body: ```suggestion
calculadora.calcularCostoMaterialesTotal()
```
created_at: 2025-05-14T14:45:39Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,189 @@
+// Declaracion de variable para guardar el nombre del producto ingresado por el usuario
+let nombreProducto = prompt("Ingrese el nombre del producto (ej: Mesa):");
+console.log(` Producto: ${nombreProducto}`);
+
+//Clases
+class Material {
+  constructor(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada) {
+    this.nombre = nombre;
+    this.costoUnitario = costoUnitario;
+    this.cantidad = cantidad;
+    this.unidad = unidad;
+    this.unidadesPorSeleccionada = unidadesPorSeleccionada;
+    this.costoTotal = costoUnitario * cantidad;
+  }
+}
+
+class GastoFijo {
+  constructor(concepto, costo) {
+    this.concepto = concepto;
+    this.costo = costo;
+  }
+}
+
+
+// Arrays vacios para guardar materiales (gastos variables) y gastos fijos
+const materiales = [];
+const gastosFijos = [];
+
+/*
+- Función para agregar materiales necesarios para fabricar una unidad de producto.
+- El usuario puede ingresar uno o mas materiales.
+- Cada material tiene un nombre, costo por unidad, cantidad necesaria, y costo total.
+*/
+function agregarMateriales() {
+  let seguir = true;
+
+  while (seguir) {
+    let nombre = prompt("Ingrese el nombre del material (ej: Tornillo):");
+    let costoUnitario = parseFloat(prompt(`Ingrese el costo por unidad de ${nombre} (ej: $1000.00):`));
+    let cantidad = parseFloat(prompt(`Ingrese la cantidad requerida de ${nombre} por unidad de producto (ej: 150):`));
+    let unidad = prompt(`Ingrese la unidad de medida para ${nombre} (ej: litro, metro, caja):`);
+    let unidadesPorSeleccionada = parseFloat(prompt(`Ingrese cantidad de unidades estándar que hay por cada ${unidad} (ej: 12 si una caja tiene 12 unidades):`));
+
+    if (isNaN(costoUnitario) 
+      || isNaN(cantidad) ||
+    isNaN(unidadesPorSeleccionada) ||
+    unidadesPorSeleccionada <= 0
+  ) {
+      alert("Por favor, ingrese valores numéricos válidos.");
+      continue;
+    }
+
+     // Se agrega el material al array con los datos necesarios
+    materiales.push(new Material({
+      nombre,
+      costoUnitario,
+      cantidad,
+      unidad,
+      unidadesPorSeleccionada,
+      costoTotal: costoUnitario * cantidad
+    }));
+
+    seguir = confirm("¿Quiere agregar otro material?");
+  }
+}
+
+
+//Función para ingresar los gastos fijos que no dependen de la cantidad producida. Ejemplo: alquiler, sueldos, etc.//
+function agregarGastosFijos() {
+  let seguir = true;
+
+  while (seguir) {
+    let concepto = prompt("Ingrese el concepto del gasto fijo (ej: Alquiler):");
+    let costo = parseFloat(prompt(`Ingrese el costo del gasto fijo ${concepto} (ej: $1000.00):`));
+
+    if (isNaN(costo)) {
+      alert("Por favor, ingrese un valor numérico válido.");
+      continue;
+    }
+
+     // Se agrega el gasto fijo al array
+    gastosFijos.push(new GastoFijo( concepto, costo));
+    seguir = confirm("¿Quiere agregar otro gasto fijo?");
+  }
+}
+
+/*
+Función para realizar todos los cálculos del simuador:
+- Primero valida que haya agregado correctamente materiales y gastos fijos.
+- Se le pide al usuario el porcentaje de ganancia y cantidad a producir
+- Se calcula el costo total de materiales, gastos fijos, y costos totales finales de producion
+- Se muestra un resumen de todos los costos
+*/
+
+function calcularCostos() {
+  if (materiales.length === 0 || gastosFijos.length === 0) {
+    alert("Debe ingresar al menos un material y un gasto fijo antes de calcular.");
+    return;
+  }
+
+  let gananciaPorcentual = parseFloat(prompt("Ingrese el porcentaje de ganancia que desee (ej: 25%):"));
+  let cantidadProduccion = parseInt(prompt("Ingrese la cantidad total a producir (ej: 200):"));
+
+  if (isNaN(cantidadProduccion) || isNaN(gananciaPorcentual) || cantidadProduccion <= 0) {
+    alert("Cantidad o ganancia ingresadas inválidas.");
+    return;
+  }
+
+  // Calcular total de gastos variables por unidad
+  function calcularCostoMateriales(materiales) {
+let totalVariablesUnitarios = 0;
+for (let i = 0; i < materiales.length; i++) {
+  totalVariablesUnitarios += materiales[i].costoTotal;
+}
+return totalVariablesUnitarios;
+  }
+
+  // Llamar a la funcion y usar el resultado
+  let totalVariablesUnitarios = calcularCostoMateriales(materiales);
+   // Total de variables para toda la producción
+let totalVariables = totalVariablesUnitarios * cantidadProduccion;
+
+// Calcular total de gastos fijos
+let totalFijos = 0;
path: script.js
user: login: MVelasquez98
body: ```suggestion
calculadora.calcularGastosFijos()
```
created_at: 2025-05-14T14:46:30Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,189 @@
+// Declaracion de variable para guardar el nombre del producto ingresado por el usuario
+let nombreProducto = prompt("Ingrese el nombre del producto (ej: Mesa):");
+console.log(` Producto: ${nombreProducto}`);
+
+//Clases
+class Material {
+  constructor(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada) {
+    this.nombre = nombre;
+    this.costoUnitario = costoUnitario;
+    this.cantidad = cantidad;
+    this.unidad = unidad;
+    this.unidadesPorSeleccionada = unidadesPorSeleccionada;
+    this.costoTotal = costoUnitario * cantidad;
+  }
+}
+
+class GastoFijo {
+  constructor(concepto, costo) {
+    this.concepto = concepto;
+    this.costo = costo;
+  }
+}
+
+
+// Arrays vacios para guardar materiales (gastos variables) y gastos fijos
+const materiales = [];
+const gastosFijos = [];
+
+/*
+- Función para agregar materiales necesarios para fabricar una unidad de producto.
+- El usuario puede ingresar uno o mas materiales.
+- Cada material tiene un nombre, costo por unidad, cantidad necesaria, y costo total.
+*/
+function agregarMateriales() {
+  let seguir = true;
+
+  while (seguir) {
+    let nombre = prompt("Ingrese el nombre del material (ej: Tornillo):");
+    let costoUnitario = parseFloat(prompt(`Ingrese el costo por unidad de ${nombre} (ej: $1000.00):`));
+    let cantidad = parseFloat(prompt(`Ingrese la cantidad requerida de ${nombre} por unidad de producto (ej: 150):`));
+    let unidad = prompt(`Ingrese la unidad de medida para ${nombre} (ej: litro, metro, caja):`);
+    let unidadesPorSeleccionada = parseFloat(prompt(`Ingrese cantidad de unidades estándar que hay por cada ${unidad} (ej: 12 si una caja tiene 12 unidades):`));
+
+    if (isNaN(costoUnitario) 
+      || isNaN(cantidad) ||
+    isNaN(unidadesPorSeleccionada) ||
+    unidadesPorSeleccionada <= 0
+  ) {
+      alert("Por favor, ingrese valores numéricos válidos.");
+      continue;
+    }
+
+     // Se agrega el material al array con los datos necesarios
+    materiales.push(new Material({
+      nombre,
+      costoUnitario,
+      cantidad,
+      unidad,
+      unidadesPorSeleccionada,
+      costoTotal: costoUnitario * cantidad
+    }));
+
+    seguir = confirm("¿Quiere agregar otro material?");
+  }
+}
+
+
+//Función para ingresar los gastos fijos que no dependen de la cantidad producida. Ejemplo: alquiler, sueldos, etc.//
+function agregarGastosFijos() {
+  let seguir = true;
+
+  while (seguir) {
+    let concepto = prompt("Ingrese el concepto del gasto fijo (ej: Alquiler):");
+    let costo = parseFloat(prompt(`Ingrese el costo del gasto fijo ${concepto} (ej: $1000.00):`));
+
+    if (isNaN(costo)) {
+      alert("Por favor, ingrese un valor numérico válido.");
+      continue;
+    }
+
+     // Se agrega el gasto fijo al array
+    gastosFijos.push(new GastoFijo( concepto, costo));
+    seguir = confirm("¿Quiere agregar otro gasto fijo?");
+  }
+}
+
+/*
+Función para realizar todos los cálculos del simuador:
+- Primero valida que haya agregado correctamente materiales y gastos fijos.
+- Se le pide al usuario el porcentaje de ganancia y cantidad a producir
+- Se calcula el costo total de materiales, gastos fijos, y costos totales finales de producion
+- Se muestra un resumen de todos los costos
+*/
+
+function calcularCostos() {
+  if (materiales.length === 0 || gastosFijos.length === 0) {
+    alert("Debe ingresar al menos un material y un gasto fijo antes de calcular.");
+    return;
+  }
+
+  let gananciaPorcentual = parseFloat(prompt("Ingrese el porcentaje de ganancia que desee (ej: 25%):"));
+  let cantidadProduccion = parseInt(prompt("Ingrese la cantidad total a producir (ej: 200):"));
+
+  if (isNaN(cantidadProduccion) || isNaN(gananciaPorcentual) || cantidadProduccion <= 0) {
+    alert("Cantidad o ganancia ingresadas inválidas.");
+    return;
+  }
+
+  // Calcular total de gastos variables por unidad
+  function calcularCostoMateriales(materiales) {
+let totalVariablesUnitarios = 0;
+for (let i = 0; i < materiales.length; i++) {
+  totalVariablesUnitarios += materiales[i].costoTotal;
+}
+return totalVariablesUnitarios;
+  }
+
+  // Llamar a la funcion y usar el resultado
+  let totalVariablesUnitarios = calcularCostoMateriales(materiales);
+   // Total de variables para toda la producción
+let totalVariables = totalVariablesUnitarios * cantidadProduccion;
+
+// Calcular total de gastos fijos
+let totalFijos = 0;
+for (let i = 0; i < gastosFijos.length; i++) {
+  totalFijos += gastosFijos[i].costo;
+}
+
+// Calcular costo total con ganancia incluida
+let costoTotal = totalVariables + totalFijos;
+let costoTotalConGanancia = costoTotal * (1 + gananciaPorcentual / 100);
+
+  // Costo por unidad con ganancia incluida
+  let costoPorUnidadConGanancia = costoTotalConGanancia / cantidadProduccion;
+
+
+// Mensaje para mostrar al usuario de manera inmediata los resultados de los calculos 
+let mensaje = "CÁLCULO FINALIZADO\n";
+mensaje += "Producto: " + nombreProducto + "\n"; 
+mensaje += "Cantidad a producir: " + cantidadProduccion + "\n";
+mensaje += "Materiales: ";
+
+ for (let i = 0; i < materiales.length; i++) {
+  mensaje += materiales[i].nombre + ": $" + materiales[i].costoTotal;
+  if (i < materiales.length - 1) {
+    mensaje += " | "; 
+}
+}
+
+mensaje += "\n| Total gastos variables: $" + totalVariables + " |";
+mensaje += "\n| Total gastos fijos: $" + totalFijos + " |";
+mensaje += "\n| Costo final (con ganancia) para " + cantidadProduccion + " unidades" + ": $" + costoTotalConGanancia + " |";
+mensaje += "\n| Costo final (con ganancia) por cada unidad: $" + costoPorUnidadConGanancia + " | ";
+
+alert(mensaje);
+
+  /* Mostrar todos los resultados detalalados en consola
+  console.log("-----RESUMEN DE COSTOS-----");
+  console.log("Producto: " + nombreProducto);
+  console.log("Cantidad a producir: " + cantidadProduccion);
+
+  console.log("Materiales:");
+  for (let i = 0; i < materiales.length; i++) {
+    console.log(materiales[i].nombre + ": $" + materiales[i].costoTotal);
+  }
+
+  console.log("Total gastos variables: $" + totalVariables);
+  console.log("Total gastos fijos: $" + totalFijos);
+  console.log("Costo final (con ganancia): $" + costoTotalConGanancia + " para: " + cantidadProduccion + " unidades a producir | ");
+  console.log("Costo final (con ganancia) por cada unidad: $" + costoPorUnidadConGanancia + " | ");
+  */
+}
+/*
+Función principal que inicia todo el proceso del simulador
+Se llama a todas las funciones en orden: 1. materiales, 2. gastos fijos 3. cálculos de costos
+*/
+
+function iniciarCalculadora() {
+  alert("Bienvenido a CostoPro - Simulador- Calculadora de Costos de Producción");
+
path: script.js
user: login: MVelasquez98
body: ```suggestion
const calculadora = new CalculadoraCostos("Producto X");
```

created_at: 2025-05-14T14:47:35Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,189 @@
+// Declaracion de variable para guardar el nombre del producto ingresado por el usuario
+let nombreProducto = prompt("Ingrese el nombre del producto (ej: Mesa):");
+console.log(` Producto: ${nombreProducto}`);
+
+//Clases
+class Material {
+  constructor(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada) {
+    this.nombre = nombre;
+    this.costoUnitario = costoUnitario;
+    this.cantidad = cantidad;
+    this.unidad = unidad;
+    this.unidadesPorSeleccionada = unidadesPorSeleccionada;
+    this.costoTotal = costoUnitario * cantidad;
+  }
+}
+
+class GastoFijo {
+  constructor(concepto, costo) {
+    this.concepto = concepto;
+    this.costo = costo;
+  }
+}
+
+
+// Arrays vacios para guardar materiales (gastos variables) y gastos fijos
+const materiales = [];
+const gastosFijos = [];
+
+/*
+- Función para agregar materiales necesarios para fabricar una unidad de producto.
+- El usuario puede ingresar uno o mas materiales.
+- Cada material tiene un nombre, costo por unidad, cantidad necesaria, y costo total.
+*/
+function agregarMateriales() {
+  let seguir = true;
+
+  while (seguir) {
+    let nombre = prompt("Ingrese el nombre del material (ej: Tornillo):");
+    let costoUnitario = parseFloat(prompt(`Ingrese el costo por unidad de ${nombre} (ej: $1000.00):`));
+    let cantidad = parseFloat(prompt(`Ingrese la cantidad requerida de ${nombre} por unidad de producto (ej: 150):`));
+    let unidad = prompt(`Ingrese la unidad de medida para ${nombre} (ej: litro, metro, caja):`);
+    let unidadesPorSeleccionada = parseFloat(prompt(`Ingrese cantidad de unidades estándar que hay por cada ${unidad} (ej: 12 si una caja tiene 12 unidades):`));
+
+    if (isNaN(costoUnitario) 
+      || isNaN(cantidad) ||
+    isNaN(unidadesPorSeleccionada) ||
+    unidadesPorSeleccionada <= 0
+  ) {
+      alert("Por favor, ingrese valores numéricos válidos.");
+      continue;
+    }
+
+     // Se agrega el material al array con los datos necesarios
+    materiales.push(new Material({
+      nombre,
+      costoUnitario,
+      cantidad,
+      unidad,
+      unidadesPorSeleccionada,
+      costoTotal: costoUnitario * cantidad
+    }));
+
+    seguir = confirm("¿Quiere agregar otro material?");
+  }
+}
+
+
+//Función para ingresar los gastos fijos que no dependen de la cantidad producida. Ejemplo: alquiler, sueldos, etc.//
+function agregarGastosFijos() {
+  let seguir = true;
+
+  while (seguir) {
+    let concepto = prompt("Ingrese el concepto del gasto fijo (ej: Alquiler):");
+    let costo = parseFloat(prompt(`Ingrese el costo del gasto fijo ${concepto} (ej: $1000.00):`));
+
+    if (isNaN(costo)) {
+      alert("Por favor, ingrese un valor numérico válido.");
+      continue;
+    }
+
+     // Se agrega el gasto fijo al array
+    gastosFijos.push(new GastoFijo( concepto, costo));
+    seguir = confirm("¿Quiere agregar otro gasto fijo?");
+  }
+}
+
+/*
+Función para realizar todos los cálculos del simuador:
+- Primero valida que haya agregado correctamente materiales y gastos fijos.
+- Se le pide al usuario el porcentaje de ganancia y cantidad a producir
+- Se calcula el costo total de materiales, gastos fijos, y costos totales finales de producion
+- Se muestra un resumen de todos los costos
+*/
+
+function calcularCostos() {
+  if (materiales.length === 0 || gastosFijos.length === 0) {
+    alert("Debe ingresar al menos un material y un gasto fijo antes de calcular.");
+    return;
+  }
+
+  let gananciaPorcentual = parseFloat(prompt("Ingrese el porcentaje de ganancia que desee (ej: 25%):"));
+  let cantidadProduccion = parseInt(prompt("Ingrese la cantidad total a producir (ej: 200):"));
+
+  if (isNaN(cantidadProduccion) || isNaN(gananciaPorcentual) || cantidadProduccion <= 0) {
+    alert("Cantidad o ganancia ingresadas inválidas.");
+    return;
+  }
+
+  // Calcular total de gastos variables por unidad
+  function calcularCostoMateriales(materiales) {
+let totalVariablesUnitarios = 0;
+for (let i = 0; i < materiales.length; i++) {
+  totalVariablesUnitarios += materiales[i].costoTotal;
+}
+return totalVariablesUnitarios;
+  }
+
+  // Llamar a la funcion y usar el resultado
path: script.js
user: login: MVelasquez98
body: ¿Por qué todo esto esta por fuera? No esta ni en una clase, una función. El main principal solo para entrada y salida, toda la logica en las clases
created_at: 2025-05-14T15:08:11Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,189 @@
+// Declaracion de variable para guardar el nombre del producto ingresado por el usuario
+let nombreProducto = prompt("Ingrese el nombre del producto (ej: Mesa):");
+console.log(` Producto: ${nombreProducto}`);
+
+//Clases
+class Material {
+  constructor(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada) {
+    this.nombre = nombre;
+    this.costoUnitario = costoUnitario;
+    this.cantidad = cantidad;
+    this.unidad = unidad;
+    this.unidadesPorSeleccionada = unidadesPorSeleccionada;
+    this.costoTotal = costoUnitario * cantidad;
+  }
+}
+
+class GastoFijo {
+  constructor(concepto, costo) {
+    this.concepto = concepto;
+    this.costo = costo;
+  }
+}
+
+
+// Arrays vacios para guardar materiales (gastos variables) y gastos fijos
+const materiales = [];
+const gastosFijos = [];
+
+/*
+- Función para agregar materiales necesarios para fabricar una unidad de producto.
+- El usuario puede ingresar uno o mas materiales.
+- Cada material tiene un nombre, costo por unidad, cantidad necesaria, y costo total.
+*/
+function agregarMateriales() {
+  let seguir = true;
+
+  while (seguir) {
+    let nombre = prompt("Ingrese el nombre del material (ej: Tornillo):");
+    let costoUnitario = parseFloat(prompt(`Ingrese el costo por unidad de ${nombre} (ej: $1000.00):`));
+    let cantidad = parseFloat(prompt(`Ingrese la cantidad requerida de ${nombre} por unidad de producto (ej: 150):`));
+    let unidad = prompt(`Ingrese la unidad de medida para ${nombre} (ej: litro, metro, caja):`);
+    let unidadesPorSeleccionada = parseFloat(prompt(`Ingrese cantidad de unidades estándar que hay por cada ${unidad} (ej: 12 si una caja tiene 12 unidades):`));
+
+    if (isNaN(costoUnitario) 
+      || isNaN(cantidad) ||
+    isNaN(unidadesPorSeleccionada) ||
+    unidadesPorSeleccionada <= 0
+  ) {
+      alert("Por favor, ingrese valores numéricos válidos.");
+      continue;
+    }
+
+     // Se agrega el material al array con los datos necesarios
+    materiales.push(new Material({
+      nombre,
+      costoUnitario,
+      cantidad,
+      unidad,
+      unidadesPorSeleccionada,
+      costoTotal: costoUnitario * cantidad
+    }));
+
+    seguir = confirm("¿Quiere agregar otro material?");
+  }
+}
+
+
+//Función para ingresar los gastos fijos que no dependen de la cantidad producida. Ejemplo: alquiler, sueldos, etc.//
+function agregarGastosFijos() {
+  let seguir = true;
+
+  while (seguir) {
+    let concepto = prompt("Ingrese el concepto del gasto fijo (ej: Alquiler):");
+    let costo = parseFloat(prompt(`Ingrese el costo del gasto fijo ${concepto} (ej: $1000.00):`));
+
+    if (isNaN(costo)) {
+      alert("Por favor, ingrese un valor numérico válido.");
+      continue;
+    }
+
+     // Se agrega el gasto fijo al array
+    gastosFijos.push(new GastoFijo( concepto, costo));
+    seguir = confirm("¿Quiere agregar otro gasto fijo?");
+  }
+}
+
+/*
+Función para realizar todos los cálculos del simuador:
+- Primero valida que haya agregado correctamente materiales y gastos fijos.
+- Se le pide al usuario el porcentaje de ganancia y cantidad a producir
+- Se calcula el costo total de materiales, gastos fijos, y costos totales finales de producion
+- Se muestra un resumen de todos los costos
+*/
+
+function calcularCostos() {
+  if (materiales.length === 0 || gastosFijos.length === 0) {
+    alert("Debe ingresar al menos un material y un gasto fijo antes de calcular.");
+    return;
+  }
+
+  let gananciaPorcentual = parseFloat(prompt("Ingrese el porcentaje de ganancia que desee (ej: 25%):"));
+  let cantidadProduccion = parseInt(prompt("Ingrese la cantidad total a producir (ej: 200):"));
+
+  if (isNaN(cantidadProduccion) || isNaN(gananciaPorcentual) || cantidadProduccion <= 0) {
+    alert("Cantidad o ganancia ingresadas inválidas.");
+    return;
+  }
+
+  // Calcular total de gastos variables por unidad
+  function calcularCostoMateriales(materiales) {
+let totalVariablesUnitarios = 0;
+for (let i = 0; i < materiales.length; i++) {
+  totalVariablesUnitarios += materiales[i].costoTotal;
+}
+return totalVariablesUnitarios;
+  }
+
+  // Llamar a la funcion y usar el resultado
+  let totalVariablesUnitarios = calcularCostoMateriales(materiales);
+   // Total de variables para toda la producción
+let totalVariables = totalVariablesUnitarios * cantidadProduccion;
+
+// Calcular total de gastos fijos
+let totalFijos = 0;
+for (let i = 0; i < gastosFijos.length; i++) {
+  totalFijos += gastosFijos[i].costo;
+}
+
+// Calcular costo total con ganancia incluida
+let costoTotal = totalVariables + totalFijos;
+let costoTotalConGanancia = costoTotal * (1 + gananciaPorcentual / 100);
+
+  // Costo por unidad con ganancia incluida
+  let costoPorUnidadConGanancia = costoTotalConGanancia / cantidadProduccion;
+
+
+// Mensaje para mostrar al usuario de manera inmediata los resultados de los calculos 
+let mensaje = "CÁLCULO FINALIZADO\n";
+mensaje += "Producto: " + nombreProducto + "\n"; 
+mensaje += "Cantidad a producir: " + cantidadProduccion + "\n";
+mensaje += "Materiales: ";
+
+ for (let i = 0; i < materiales.length; i++) {
+  mensaje += materiales[i].nombre + ": $" + materiales[i].costoTotal;
+  if (i < materiales.length - 1) {
+    mensaje += " | "; 
+}
+}
+
+mensaje += "\n| Total gastos variables: $" + totalVariables + " |";
+mensaje += "\n| Total gastos fijos: $" + totalFijos + " |";
+mensaje += "\n| Costo final (con ganancia) para " + cantidadProduccion + " unidades" + ": $" + costoTotalConGanancia + " |";
+mensaje += "\n| Costo final (con ganancia) por cada unidad: $" + costoPorUnidadConGanancia + " | ";
+
+alert(mensaje);
+
+  /* Mostrar todos los resultados detalalados en consola
+  console.log("-----RESUMEN DE COSTOS-----");
+  console.log("Producto: " + nombreProducto);
+  console.log("Cantidad a producir: " + cantidadProduccion);
+
+  console.log("Materiales:");
+  for (let i = 0; i < materiales.length; i++) {
+    console.log(materiales[i].nombre + ": $" + materiales[i].costoTotal);
+  }
+
+  console.log("Total gastos variables: $" + totalVariables);
+  console.log("Total gastos fijos: $" + totalFijos);
+  console.log("Costo final (con ganancia): $" + costoTotalConGanancia + " para: " + cantidadProduccion + " unidades a producir | ");
+  console.log("Costo final (con ganancia) por cada unidad: $" + costoPorUnidadConGanancia + " | ");
+  */
+}
+/*
+Función principal que inicia todo el proceso del simulador
+Se llama a todas las funciones en orden: 1. materiales, 2. gastos fijos 3. cálculos de costos
+*/
+
+function iniciarCalculadora() {
+  alert("Bienvenido a CostoPro - Simulador- Calculadora de Costos de Producción");
path: script.js
user: login: MVelasquez98
body: Un menú de navegación es más útil para entender que funcionalidad estoy probando. Sino es confuso, abro la página y me empieza a pedir datos, pero ¿para que?
```suggestion
let salir = false;

while (!salir) {
  const opcion = prompt(
    `MENÚ PRINCIPAL\n` +
    `1. Agregar material\n` +
    `2. Agregar gasto fijo\n` +
    `3. Calcular costos\n` +
    `4. Mostrar resumen\n` +
    `5. Salir\n\n` +
    `Ingrese una opción:`
  );

  switch (opcion) {
    case "1":
      const nombre = prompt("Nombre del material:");
      const costoUnitario = parseFloat(prompt("Costo unitario:"));
      const cantidad = parseFloat(prompt("Cantidad:"));
      const unidad = prompt("Unidad:");
      const unidadesPorSeleccionada = parseFloat(prompt("Unidades por seleccionada:"));
      calculadora.agregarMaterial(new Material({
        nombre,
        costoUnitario,
        cantidad,
        unidad,
        unidadesPorSeleccionada
      }));
      alert("Material agregado correctamente.");
      break;

    case "2":
      const concepto = prompt("Concepto del gasto fijo:");```
      // ...
created_at: 2025-05-14T15:12:07Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,70 @@
+
+import GastoFijo from './GastoFijo.js';
+import Material from './Material.js';
+
+
+class Calculadora{
+    constructor(nombreProducto) {
+    this.nombreProducto = nombreProducto;
+    this.materiales = [];
+    this.gastosFijos = [];
+  }
+
+  /*
+- Función para agregar materiales necesarios para fabricar una unidad de producto.
+- El usuario puede ingresar uno o mas materiales.
+- Cada material tiene un nombre, costo por unidad, cantidad necesaria, y costo total.
+*/
+
+   agregarMaterial({ nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada }) {
+    // Se agrega el material al array con los datos necesarios
+    this.materiales.push(new Material(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada));
+  }
+
+  //Función para ingresar los gastos fijos que no dependen de la cantidad producida. Ejemplo: alquiler, sueldos, etc.//
+  agregarGastoFijo(concepto, costo) {
+     // Se agrega el gasto fijo al array
+    this.gastosFijos.push(new GastoFijo(concepto, costo));
+  }
+
+  calcularCostoMaterialesUnitario() {
+    return this.materiales.reduce((total, material) => total + material.calcularCostoPorUnidadProducto(), 0);
+  }
+
+  calcularCostoMaterialesTotal(cantidad) {
+    return this.calcularCostoMaterialesUnitario() * cantidad;
+  }
+
+  calcularGastosFijos() {
+    return this.gastosFijos.reduce((total, gasto) => total + gasto.costo, 0);
+  }
+
+  generarResumen(gananciaPorcentual, cantidadProduccion) {
+    const totalVariables = this.calcularCostoMaterialesTotal(cantidadProduccion);
+    const totalFijos = this.calcularGastosFijos();
+    const costoTotal = totalVariables + totalFijos;
+    const costoTotalConGanancia = costoTotal * (1 + gananciaPorcentual / 100);
+    const costoPorUnidadConGanancia = costoTotalConGanancia / cantidadProduccion;
+
+    // Mensaje para mostrar al usuario de manera inmediata los resultados de los calculos 
+    let mensaje = "CÁLCULO FINALIZADO\n";
+    mensaje += "Producto: " + this.nombreProducto + "\n";
+    mensaje += "Cantidad a producir: " + cantidadProduccion + "\n";
+    mensaje += "Materiales: ";
+
+    for (let i = 0; i < this.materiales.length; i++) {
+      const material = this.materiales[i];
+      mensaje += material.nombre + ": $" + material.calcularCostoTotal();
path: Calculadora.js
user: login: MVelasquez98
body: Revisar errores por consola
![image](https://github.com/user-attachments/assets/3fa34be3-42f4-4492-8c67-b885995dd6eb)

created_at: 2025-05-15T14:25:24Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,70 @@
+
+import GastoFijo from './GastoFijo.js';
+import Material from './Material.js';
+
+
+class Calculadora{
+    constructor(nombreProducto) {
+    this.nombreProducto = nombreProducto;
+    this.materiales = [];
+    this.gastosFijos = [];
+  }
+
+  /*
+- Función para agregar materiales necesarios para fabricar una unidad de producto.
+- El usuario puede ingresar uno o mas materiales.
+- Cada material tiene un nombre, costo por unidad, cantidad necesaria, y costo total.
+*/
+
+   agregarMaterial({ nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada }) {
+    // Se agrega el material al array con los datos necesarios
+    this.materiales.push(new Material(nombre, costoUnitario, cantidad, unidad, unidadesPorSeleccionada));
+  }
+
+  //Función para ingresar los gastos fijos que no dependen de la cantidad producida. Ejemplo: alquiler, sueldos, etc.//
+  agregarGastoFijo(concepto, costo) {
+     // Se agrega el gasto fijo al array
+    this.gastosFijos.push(new GastoFijo(concepto, costo));
+  }
+
+  calcularCostoMaterialesUnitario() {
+    return this.materiales.reduce((total, material) => total + material.calcularCostoPorUnidadProducto(), 0);
+  }
+
+  calcularCostoMaterialesTotal(cantidad) {
+    return this.calcularCostoMaterialesUnitario() * cantidad;
+  }
+
+  calcularGastosFijos() {
+    return this.gastosFijos.reduce((total, gasto) => total + gasto.costo, 0);
+  }
+
+  generarResumen(gananciaPorcentual, cantidadProduccion) {
+    const totalVariables = this.calcularCostoMaterialesTotal(cantidadProduccion);
+    const totalFijos = this.calcularGastosFijos();
+    const costoTotal = totalVariables + totalFijos;
+    const costoTotalConGanancia = costoTotal * (1 + gananciaPorcentual / 100);
+    const costoPorUnidadConGanancia = costoTotalConGanancia / cantidadProduccion;
+
+    // Mensaje para mostrar al usuario de manera inmediata los resultados de los calculos 
+    let mensaje = "CÁLCULO FINALIZADO\n";
+    mensaje += "Producto: " + this.nombreProducto + "\n";
path: Calculadora.js
user: login: MVelasquez98
body: ¿Que paso ahi?
![image](https://github.com/user-attachments/assets/e7a1126c-d132-49e3-b792-76e4f0368363)

created_at: 2025-05-15T16:37:17Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,99 @@
+import Calculadora from './Calculadora.js';
+import Material from './Material.js';
path: script.js
user: login: MVelasquez98
body: ¿Esta clase la usas en este modulo?¿o por qué esta importada?
created_at: 2025-05-15T16:38:22Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,99 @@
+import Calculadora from './Calculadora.js';
+import Material from './Material.js';
+import GastoFijo from './GastoFijo.js';
path: script.js
user: login: MVelasquez98
body: ¿Esta clase la usas en este modulo?¿o por qué esta importada?
created_at: 2025-05-15T16:38:26Z
author_association: COLLABORATOR

PR comments:
user: login: candegodoy0
created_at: 2025-05-15T15:56:54Z
body: @MVelasquez98 
author_association: OWNER
user: login: candegodoy0
created_at: 2025-05-15T17:10:22Z
body: @MVelasquez98 
author_association: OWNER