0% encontró este documento útil (0 votos)
0 vistas13 páginas

Doctype HTML

El documento es un simulador de presupuestos y metrado de obra diseñado para contratistas e ingenieros. Permite ingresar datos sobre dimensiones y costos de una obra, calcular el presupuesto estimado y exportar los resultados a un archivo CSV. Incluye una interfaz con formularios y tablas para mostrar los resultados de manera clara y organizada.

Cargado por

lulubejar84
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
0 vistas13 páginas

Doctype HTML

El documento es un simulador de presupuestos y metrado de obra diseñado para contratistas e ingenieros. Permite ingresar datos sobre dimensiones y costos de una obra, calcular el presupuesto estimado y exportar los resultados a un archivo CSV. Incluye una interfaz con formularios y tablas para mostrar los resultados de manera clara y organizada.

Cargado por

lulubejar84
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

<!

DOCTYPE html>

<html lang="es">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-


scale=1.0">

<title>Simulador de Presupuestos y Metrados de Obra</title>

<style>

:root {

--primary-color: #2c3e50;

--secondary-color: #18bc9c;

--dark-color: #34495e;

--light-color: #ecf0f1;

--border-color: #bdc3c7;

body {

font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;

line-height: 1.6;

background-color: #f4f6f7;

color: var(--dark-color);

margin: 0;

padding: 20px;

.container {

max-width: 900px;

margin: 0 auto;

background: #fff;
padding: 30px;

border-radius: 8px;

box-shadow: 0 4px 15px rgba(0,0,0,0.1);

h1 {

color: var(--primary-color);

text-align: center;

margin-bottom: 5px;

font-size: 28px;

.subtitle {

text-align: center;

color: #7f8c8d;

margin-bottom: 30px;

font-size: 14px;

fieldset {

border: 1px solid var(--border-color);

border-radius: 6px;

padding: 20px;

margin-bottom: 25px;

legend {

font-weight: bold;

color: var(--primary-color);
padding: 0 10px;

.grid-inputs {

display: grid;

grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));

gap: 15px;

.form-group {

display: flex;

flex-direction: column;

label {

margin-bottom: 5px;

font-weight: 600;

font-size: 14px;

input, select {

padding: 10px;

border: 1px solid var(--border-color);

border-radius: 4px;

font-size: 15px;

outline: none;

transition: border 0.3s;

}
input:focus, select:focus {

border-color: var(--secondary-color);

.actions {

display: flex;

gap: 15px;

margin-bottom: 30px;

button {

flex: 1;

padding: 12px;

font-size: 16px;

font-weight: bold;

border: none;

border-radius: 4px;

cursor: pointer;

transition: background 0.3s;

.btn-calc {

background-color: var(--secondary-color);

color: white;

.btn-calc:hover {

background-color: #128f76;

}
.btn-export {

background-color: var(--primary-color);

color: white;

.btn-export:hover {

background-color: #1a252f;

.results-section {

margin-top: 20px;

table {

width: 100%;

border-collapse: collapse;

margin-top: 15px;

background: white;

th, td {

border: 1px solid var(--border-color);

padding: 12px;

text-align: left;

th {

background-color: var(--primary-color);
color: white;

tr:nth-child(even) {

background-color: #f9f9f9;

.total-row {

font-weight: bold;

background-color: #eaeded !important;

font-size: 16px;

.hidden {

display: none;

</style>

</head>

<body>

<div class="container">

<h1>Simulador de Presupuestos y Metrados de Obra</h1>

<p class="subtitle">Fase de Cotización Preliminar para


Contratistas e Ingenieros</p>

<fieldset>

<legend>Datos de la Estructura y Costos</legend>

<div class="grid-inputs">

<div class="form-group">
<label for="descripcion">Descripción de Obra</label>

<input type="text" id="descripcion" placeholder="Ej. Losa,


Excavación, Muro..." value="Módulo de Vivienda Estándar">

</div>

<div class="form-group">

<label for="largo">Largo (m)</label>

<input type="number" id="largo" step="0.01" min="0"


placeholder="0.00" value="10.00">

</div>

<div class="form-group">

<label for="ancho">Ancho (m)</label>

<input type="number" id="ancho" step="0.01" min="0"


placeholder="0.00" value="6.00">

</div>

<div class="form-group">

<label for="alto">Alto / Espesor (m)</label>

<input type="number" id="alto" step="0.01" min="0"


placeholder="0.00" value="0.15">

</div>

<div class="form-group">

<label for="tipoCalculo">Base del Costo</label>

<select id="tipoCalculo">

<option value="m2">Por Metro Cuadrado (m²)</option>

<option value="m3" selected>Por Metro Cúbico


(m³)</option>

</select>

</div>

<div class="form-group">

<label for="costoUnitario">Costo Unitario ($)</label>

<input type="number" id="costoUnitario" step="0.01"


min="0" placeholder="0.00" value="120.00">
</div>

</div>

</fieldset>

<div class="actions">

<button class="btn-calc"
onclick="calcularPresupuesto()">Generar Presupuesto</button>

<button class="btn-export id="btnExportar" class="btn-export


hidden" onclick="exportarExcel()">Exportar a Excel (.csv)</button>

</div>

<div id="resultadoSeccion" class="results-section hidden">

<h3>Detalle del Presupuesto Generado</h3>

<table id="tablaPresupuesto">

<thead>

<tr>

<th>Descripción</th>

<th>Área (m²)</th>

<th>Volumen (m³)</th>

<th>Unidad Aplicada</th>

<th>Costo Unitario</th>

<th>Total Parcial</th>

</tr>

</thead>

<tbody>

</tbody>

</table>

</div>

</div>
<script>

function calcularPresupuesto() {

// 1. Obtener los valores de los inputs

const descripcion =
[Link]('descripcion').value || "Obra General";

const largo =
parseFloat([Link]('largo').value) || 0;

const ancho =
parseFloat([Link]('ancho').value) || 0;

const alto = parseFloat([Link]('alto').value)


|| 0;

const tipoCalculo =
[Link]('tipoCalculo').value;

const costoUnitario =
parseFloat([Link]('costoUnitario').value) || 0;

// Validar que los datos ingresados sean mayores a cero

if (largo <= 0 || ancho <= 0 || costoUnitario <= 0) {

alert("Por favor, ingrese dimensiones y costos válidos mayores


a cero.");

return;

// 2. Realizar los cálculos matemáticos (Metrados)

const area = largo * ancho;

const volumen = area * alto;

let metradoAplicado = 0;

let unidadTexto = "";

if (tipoCalculo === "m2") {


metradoAplicado = area;

unidadTexto = "m²";

} else {

metradoAplicado = volumen;

unidadTexto = "m³";

const costoTotal = metradoAplicado * costoUnitario;

// 3. Renderizar los datos en la tabla de resultados

const tbody = [Link]('#tablaPresupuesto


tbody');

[Link] = `

<tr>

<td>${descripcion}</td>

<td>${[Link](2)}</td>

<td>${[Link](2)}</td>

<td>${unidadTexto}</td>

<td>$${[Link](2)}</td>

<td>$${[Link](2)}</td>

</tr>

<tr class="total-row">

<td colspan="5" style="text-align: right;">PRESUPUESTO


ESTIMADO TOTAL:</td>

<td>$${[Link](2)}</td>

</tr>

`;

// Mostrar la tabla y el botón de exportación


[Link]('resultadoSeccion').[Link]('hidde
n');

[Link]('btnExportar').[Link]('hidden');

function exportarExcel() {

// Obtener datos calculados para estructurar el CSV

const descripcion =
[Link]('descripcion').value || "Obra";

const largo = [Link]('largo').value;

const ancho = [Link]('ancho').value;

const alto = [Link]('alto').value;

const tipoCalculo =
[Link]('tipoCalculo').value;

const costoUnitario =
[Link]('costoUnitario').value;

const area = (largo * ancho).toFixed(2);

const volumen = (area * alto).toFixed(2);

const metrado = tipoCalculo === "m2" ? area : volumen;

const total = (metrado * costoUnitario).toFixed(2);

// Crear contenido CSV estructurado

let csvContent = "data:text/csv;charset=utf-8,\uFEFF"; // \uFEFF


fuerza UTF-8 para tildes en Excel

csvContent += "REPORTES DE METRADOS Y PRESUPUESTO\n\n";

csvContent += "Concepto,Valor,Unidad\n";

csvContent += `Descripción,${descripcion},-\n`;

csvContent += `Largo,${largo},m\n`;
csvContent += `Ancho,${ancho},m\n`;

csvContent += `Alto/Espesor,${alto},m\n`;

csvContent += `Área Calculada,${area},m2\n`;

csvContent += `Volumen Calculado,${volumen},m3\n`;

csvContent += `Base de Cálculo,${[Link]()},-\


n`;

csvContent += `Costo Unitario,${costoUnitario},$\n`;

csvContent += `PRESUPUESTO TOTAL ESTIMADO,${total},$\n`;

// Proceso de descarga del archivo

const encodedUri = encodeURI(csvContent);

const link = [Link]("a");

[Link]("href", encodedUri);

[Link]("download", `Presupuesto_$
{[Link](/ /g, "_")}.csv`);

[Link](link);

[Link]();

[Link](link);

</script>

</body>

</html>

También podría gustarte