Files
roi-theme/wp-content/plugins/calculatg/js/dosification-concreto.js
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

378 lines
18 KiB
JavaScript
Executable File

var is_export_allowed = false;
jQuery.valHooks.input = {
get: function( elem ) {
return elem.value.replace( ',', "" );
},
set: function( elem, val ) {
elem.value = thousands_separators( val );
}
};
jQuery(function($) {
$('#tabs').tabs();
$("#calculate-proportions").click(function() {
calculate_proportions();
});
$(".calculatg-wrap select").change(function(event) {
dropdown_change( event.target );
});
$(".export-excel").click(function() {
if (!is_export_allowed) {
alert('Calcular proporciones, verifica');
return;
}
var activeTab = jQuery( "#tabs" ).tabs( "option", "active" );
jQuery("#active_tab").val( activeTab );
jQuery("#tab_str").val( jQuery( "#tabs > ul > li" ).eq(activeTab).text() );
$(this).closest('form').find('input[disabled]').attr('rel', 'disabled');
$(this).closest('form').find('input[disabled]').removeAttr('disabled');
var postData = 'action=calculatg_export_excel&type=1&' + $(this).closest('form').serialize();
$.ajax({
url: calculatg_obj.ajaxurl,
method: 'POST',
data: 'check=1&' + postData,
dataType: 'json',
success: function( output ) {
if ( output && output.redirect ) {
window.open( output.redirect_url );
return;
}
else {
var request = new XMLHttpRequest();
request.open('POST', calculatg_obj.ajaxurl, true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.responseType = 'blob';
request.onload = function(e) {
if (this.status === 200) {
var blob = this.response;
fileName = 'Dosification Concreto.xlsx';
if(window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveBlob(blob, fileName);
}
else{
var downloadLink = window.document.createElement('a');
var contentTypeHeader = request.getResponseHeader("Content-Type");
downloadLink.href = window.URL.createObjectURL(new Blob([blob], { type: contentTypeHeader }));
downloadLink.download = fileName;
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
}
}
};
request.send( postData );
}
}
});
$(this).closest('form').find('input[rel=disabled]').attr('disabled', 'disabled');
});
dropdown_change( $('#resistance') );
});
function dropdown_change( currentTarget ) {
if (currentTarget && jQuery(currentTarget).is('#resistance')) {
jQuery("#application option").eq(jQuery("#resistance option:selected").index()).prop('selected', true);
}
else if (currentTarget && jQuery(currentTarget).is('#application')) {
jQuery("#resistance option").eq(jQuery("#application option:selected").index()).prop('selected', true);
}
var aggregate_origin = jQuery("#aggregate_origin").val();
jQuery("#semi-compact-pv-grava").val( compact_pv_config[ aggregate_origin ]['semi-compact-grava'] );
jQuery("#density-grava").val( compact_pv_config[ aggregate_origin ]['density-grava'] );
jQuery("#semi-compact-pv-arena").val( compact_pv_config[ aggregate_origin ]['semi-compact-arena'] );
jQuery("#density-arena").val( compact_pv_config[ aggregate_origin ]['density-arena'] );
jQuery("#application_str").val( jQuery("#application option:selected").text() );
jQuery("#resistance_str").val( jQuery("#resistance option:selected").text() );
jQuery("#aggregate_origin_str").val( jQuery("#aggregate_origin option:selected").text() );
jQuery("#sand_moisture_str").val( jQuery("#sand_moisture option:selected").text() );
jQuery("#gravel_size_str").val( jQuery("#gravel_size option:selected").text() );
jQuery("#volume_liters_str").val( jQuery("#volume_liters option:selected").text() );
}
var compact_pv_config = {
'river': { 'semi-compact-grava': '1450.00', 'density-grava': '2.60', 'semi-compact-arena': '1580.00', 'density-arena': '2.58' },
'valley': { 'semi-compact-grava': '1390.00', 'density-grava': '2.38', 'semi-compact-arena': '1480.00', 'density-arena': '2.36' },
'volcanica ligeria': { 'semi-compact-grava': '1220.00', 'density-grava': '2.28', 'semi-compact-arena': '1350.00', 'density-arena': '2.30' },
'yucatan limestone': { 'semi-compact-grava': '1270.00', 'density-grava': '2.29', 'semi-compact-arena': '1360.00', 'density-arena': '2.32' },
'crushed limestone': { 'semi-compact-grava': '1590.00', 'density-grava': '2.65', 'semi-compact-arena': '1670.00', 'density-arena': '2.66' },
'crushed volcanic quarry': { 'semi-compact-grava': '1440.00', 'density-grava': '2.53', 'semi-compact-arena': '1550.00', 'density-arena': '2.55' },
};
var amount_water_resistance_config = {
'100': {'dry': '3.00', 'semi wet': '2.50', 'wet': '2.00'},
'150': {'dry': '2.50', 'semi wet': '2.00', 'wet': '1.50'},
'200': {'dry': '2.00', 'semi wet': '1.50', 'wet': '1.00'},
'250': {'dry': '1.75', 'semi wet': '1.25', 'wet': '0.75'},
'300': {'dry': '1.25', 'semi wet': '0.75', 'wet': '0.50'},
};
var sand_pot_number_config = {
'100': {'paved and firm': '7.50'},
'150': {'flats castles': '5.50'},
'200': {'footings walls': '4.00'},
'250': {'special slabs': '3.50'},
'300': {'high strength': '2.50'},
};
var gravel_cans_number_config = {
'100': {'three fourth': '8.00', 'one and half': '9.50'},
'150': {'three fourth': '6.50', 'one and half': '8.50'},
'200': {'three fourth': '6.00', 'one and half': '7.50'},
'250': {'three fourth': '5.00', 'one and half': '6.50'},
'300': {'three fourth': '4.50', 'one and half': '5.50'},
};
function calculate_proportions( currentTarget ) {
is_export_allowed = true;
//dropdown_change( currentTarget );
// tab 1 calculations
var activeTab = jQuery( "#tabs" ).tabs( "option", "active" );
var application = jQuery("#application").val();
var resistance = jQuery("#resistance").val();
var aggregate_origin = jQuery("#aggregate_origin").val();
var sand_moisture = jQuery("#sand_moisture").val();
var gravel_size = jQuery("#gravel_size").val();
var volume_liters = jQuery("#volume_liters").val();
var cement_density = jQuery("#cement-density").val();
var semi_compact_grava = jQuery("#semi-compact-pv-grava").val();
var semi_compact_arena = jQuery("#semi-compact-pv-arena").val();
var density_grava = jQuery("#density-grava").val();
var density_arena = jQuery("#density-arena").val();
if (activeTab == 3) {
var manufacturer_volume = jQuery("#tab4_manufacturer_volume").val();
var agua = jQuery("#tab4_agua").val();
var cemento = jQuery("#tab4_cemento").val();
var arena = jQuery("#tab4_arena").val();
var grava = jQuery("#tab4_grava").val();
var tab4_agua = jQuery("#tab4_agua").val();
var tab4_cemento = jQuery("#tab4_cemento").val();
var tab4_arena = jQuery("#tab4_arena").val();
var tab4_grava = jQuery("#tab4_grava").val();
if (gravel_size == '') {
alert('Seleccionar el tamaño de la grava, que usarás.');
}
else if ( manufacturer_volume == '' || manufacturer_volume <= 0.499 ) {
alert('El valor de del volumen a fabricar debe ser mayor o igual a 0.50 m3.');
}
else if ( agua == '' || agua <= 0.499 ) {
alert('El valor del agua debe ser mayor o igual a 0.50');
}
else if ( cemento == '' || cemento <= 0.999 ) {
alert('El valor del cemento debe ser mayor o igual a 1.');
}
else if ( arena == '' || arena <= 0.999 ) {
alert('El valor de la arena debe ser mayor o igual a 1.');
}
else if ( grava == '' || grava <= 0.999 ) {
alert('El valor de la grava debe ser mayor o igual a 1.');
}
else if ( (gravel_size == 'one and half' || gravel_size == 'three fourth') && tab4_arena > 10 ) {
alert('La cantidad de arena es mayor de 10, rebasa los límites para un saco de cemento. Revisa la cantidad de Arena.');
}
else if ( gravel_size == 'three fourth' && tab4_grava > 10 ) {
alert('La cantidad de grava es mayor de 10, rebasa los límites para un saco de cemento. Revisa la cantidad de Arena.');
}
else if ( gravel_size == 'one and half' && tab4_grava > 11.5 ) {
alert('La cantidad de grava es mayor de 11.50, rebasa los límites para un saco de cemento. Revisa la cantidad de Arena.');
}
else if ( gravel_size == 'three fourth' && ( tab4_arena - tab4_grava ) > 0 && ( tab4_arena - tab4_grava ) <= 1 ) {
alert('La arena rebasa en ' + number_format(tab4_arena - tab4_grava, 2) + ' botes a la grava. Un buen concreto NUNCA debe tener más arena que grava, ¿Deseas continuar?' );
}
else if ( gravel_size == 'three fourth' && ( tab4_arena - tab4_grava ) > 1 ) {
alert('La arena rebasa en ' + number_format(tab4_arena - tab4_grava, 2) + ' botes a la grava. Tu mezcla será demasiado arenosa por lo que tendrás baja resistencia y agrietamientos. REVISA TU PROPORCION GRAVA - ARENA.' );
}
else if ( gravel_size == 'three fourth' && ( tab4_grava - tab4_arena ) > 3 ) {
alert('La grava rebasa en ' + number_format(tab4_grava - tab4_arena, 2) + ' botes a la arena. Tu mezcla no tendrá trabajabilidad y presentará mala cohesión, sangrado y segregación. REVISA TU PROPORCION GRAVA - ARENA.' );
}
else if ( gravel_size == 'three fourth' && ( tab4_grava - tab4_arena ) > 2.5 && ( tab4_grava - tab4_arena ) <= 3 ) {
alert('La grava rebasa en ' + number_format(tab4_grava - tab4_arena, 2) + ' botes a la arena. La mezcla pudiera resultar poco trabajable por el alto contenido de grava, ¿deseas continuar?.' );
}
else if ( gravel_size == 'one and half' && ( tab4_arena - tab4_grava ) > 0 && ( tab4_arena - tab4_grava ) <= 1 ) {
alert('La arena rebasa en ' + number_format(tab4_arena - tab4_grava, 2) + ' botes a la grava. Un buen concreto NUNCA debe tener más arena que grava, ¿Deseas continuar?' );
}
else if ( gravel_size == 'one and half' && ( tab4_arena - tab4_grava ) > 1 ) {
alert('La arena rebasa en ' + number_format(tab4_arena - tab4_grava, 2) + ' botes a la grava. Tu mezcla será demasiado arenosa por lo que tendrás baja resistencia y agrietamientos. REVISA TU PROPORCION GRAVA - ARENA.' );
}
else if ( gravel_size == 'one and half' && ( tab4_grava - tab4_arena ) > 3.5 ) {
alert('La grava rebasa en ' + number_format(tab4_grava - tab4_arena, 2) + ' botes a la arena. Tu mezcla no tendrá trabajabilidad y presentará mala cohesión, sangrado y segregación. REVISA TU PROPORCION GRAVA - ARENA.' );
}
else if ( gravel_size == 'one and half' && ( tab4_grava - tab4_arena ) >= 3 && ( tab4_grava - tab4_arena ) < 3.5 ) {
alert('La grava rebasa en ' + number_format(tab4_grava - tab4_arena, 2) + ' botes a la arena. La mezcla pudiera resultar poco trabajable por el alto contenido de grava, ¿deseas continuar?.' );
}
else if ( tab4_agua > 3.5 ) {
alert('El contenido de agua que estás usando es ' + tab4_agua + ', es demasiado alto para un bulto de cemento. UTILIZA MENOS AGUA.' );
}
else if ( tab4_agua >= 3.1 && tab4_agua <= 3.5 ) {
alert('El contenido de agua que estás usando es ' + tab4_agua + ', podrías estar dosificando demasiada agua. El exceso de agua en las mezclas de concreto provoca menor resistencia, mayor agrietamiento y sangrado, ¿Deseas continuar?' );
}
jQuery("#tab4-heading").html("Proporcionamiento personalizado para " + manufacturer_volume + " m3.");
var aguaLiters = number_format( agua * volume_liters, 3);
var cementoLiters = number_format( 50 / cement_density, 3 );
var arenaLiters = number_format( (( tab4_arena * volume_liters * semi_compact_arena ) / density_arena / 1000 ), 3 );
var gravaLiters = number_format( (( tab4_grava * volume_liters * semi_compact_grava ) / density_grava / 1000 ), 3 );
var volumen = number_format( (aguaLiters + cementoLiters + arenaLiters + gravaLiters) / 1000, 3 );
jQuery("#tab4_agua_botes").val( number_format( agua / volumen * manufacturer_volume, 2 ) );
jQuery("#tab4_agua_botes_2").val( number_format( jQuery("#tab4_agua_botes").val() * volume_liters / 1000, 3 ) );
jQuery("#tab4_cemento_sacos").val( number_format( 1 / volumen * manufacturer_volume, 2 ) );
jQuery("#tab4_cemento_sacos_2").val( number_format( jQuery("#tab4_cemento_sacos").val() * 50 / 1000, 3 ) );
jQuery("#tab4_arena_botes").val( number_format( arena / volumen * manufacturer_volume, 2 ) );
jQuery("#tab4_arena_botes_2").val( number_format( jQuery("#tab4_arena_botes").val() * volume_liters / 1000, 3 ) );
jQuery("#tab4_grava_botes").val( number_format( grava / volumen * manufacturer_volume, 2 ) );
jQuery("#tab4_grava_botes_2").val( number_format( jQuery("#tab4_grava_botes").val() * volume_liters / 1000, 3 ) );
}
else if (activeTab == 0 || activeTab == 1 || activeTab == 2) {
// tab 1 calculations
if (resistance == '') {
alert('Resistencia: no puede estar vacía, selecciona una opción');
}
else if (gravel_size == '') {
alert('Tamaño de la grava: no puede estar vacía, selecciona una opción');
}
else if (aggregate_origin == '') {
alert('Origen del agregado: no puede estar vacío, selecciona una opción');
}
else if (sand_moisture == '') {
alert('Humedad de la arena: no puede estar vacía, selecciona una opción');
}
else if (volume_liters == '') {
alert('Volumen del bote: no puede estar vacío, selecciona una opción');
}
else {
jQuery("#tab1_agua").val( amount_water_resistance_config[ resistance ][ sand_moisture ] );
}
jQuery("#tab1_cemento").val('1.00');
jQuery("#tab1_arena").val( sand_pot_number_config[ resistance ][ application ] );
jQuery("#tab1_grava").val( gravel_cans_number_config[ resistance ][ gravel_size ] );
jQuery("#tab1-heading").html("Proporcionamiento para una resistencia de " + jQuery("#resistance option:selected").text() + ", para aplicarlo en " + jQuery("#application option:selected").text().toLowerCase() + ".");
var agua = number_format( jQuery("#tab1_agua").val() * volume_liters );
jQuery("#tab1_agua_botes").val( agua );
var cemento = number_format( 50 / cement_density );
jQuery("#tab1_cemento_sacos").val( cemento );
var arena = number_format((jQuery("#tab1_arena").val() * volume_liters * jQuery("#semi-compact-pv-arena").val()) / jQuery("#density-arena").val() / 1000);
jQuery("#tab1_arena_botes").val( arena );
var grava = number_format((jQuery("#tab1_grava").val() * volume_liters * jQuery("#semi-compact-pv-grava").val()) / jQuery("#density-grava").val() / 1000);
jQuery("#tab1_grava_botes").val( grava );
var volumen = number_format( agua + cemento + arena + grava, 3 );
jQuery("#tab1_approximate_volume").val( number_format( volumen / 1000, 3 ) );
jQuery("#tab1_number_of_stirrers").val( number_format( round_number( 1 / jQuery("#tab1_approximate_volume").val(), 1 ), 3 ) );
// tab 2 calculations
jQuery("#tab2-heading").html("Proporcionamiento para un volumen de " + jQuery("#tab2_manufacturer_volume").val() + " m3. Resistencia de " + jQuery("#resistance option:selected").text() + ", aplicación en " + jQuery("#application option:selected").text().toLowerCase() + ".");
var aquaVolumen = number_format( ( jQuery("#tab1_agua").val() / jQuery("#tab1_approximate_volume").val()) * jQuery("#tab2_manufacturer_volume").val() );
jQuery("#tab2_agua").val( aquaVolumen );
var cementVolumen = number_format( ( 1 / jQuery("#tab1_approximate_volume").val() ) * jQuery("#tab2_manufacturer_volume").val() );
jQuery("#tab2_cemento").val( cementVolumen );
var arenaVolumen = number_format( ( jQuery("#tab1_arena").val() / jQuery("#tab1_approximate_volume").val() ) * jQuery("#tab2_manufacturer_volume").val() );
jQuery("#tab2_arena").val( arenaVolumen );
var gravaVolumen = number_format( ( jQuery("#tab1_grava").val() / jQuery("#tab1_approximate_volume").val() ) * jQuery("#tab2_manufacturer_volume").val() );
jQuery("#tab2_grava").val( gravaVolumen );
var aquaVolumenUnits = number_format( ( aquaVolumen * volume_liters ) / 1000, 3 );
jQuery("#tab2_agua_botes").val( aquaVolumenUnits );
var cementVolumenUnits = number_format( ( cementVolumen * 50 ) / 1000, 3 );
jQuery("#tab2_cemento_sacos").val( cementVolumenUnits );
var arenaVolumenUnits = number_format( ( arenaVolumen * volume_liters ) / 1000, 3 );
jQuery("#tab2_arena_botes").val( arenaVolumenUnits );
var gravaVolumenUnits = number_format( ( gravaVolumen * volume_liters ) / 1000, 3 );
jQuery("#tab2_grava_botes").val( gravaVolumenUnits );
// tab 3 calculations
jQuery("#tab3-heading").html("Proporcionamiento para " + jQuery("#tab3_bags_to_use").val() + " sacos. Resistencia de " + jQuery("#resistance option:selected").text() + ", aplicación en " + jQuery("#application option:selected").text().toLowerCase() + ".");
var aguaSacos = number_format( jQuery("#tab1_agua").val() * jQuery("#tab3_bags_to_use").val(), 3 );
jQuery("#tab3_agua").val( aguaSacos );
var cementoSacos = number_format( jQuery("#tab1_cemento").val() * jQuery("#tab3_bags_to_use").val(), 3 );
jQuery("#tab3_cemento").val( cementoSacos );
var arenaSacos = number_format( jQuery("#tab1_arena").val() * jQuery("#tab3_bags_to_use").val(), 3 );
jQuery("#tab3_arena").val( arenaSacos );
var gravaSacos = number_format( jQuery("#tab1_grava").val() * jQuery("#tab3_bags_to_use").val(), 3 );
jQuery("#tab3_grava").val( gravaSacos );
var approximate_volume = ((( aguaSacos * volume_liters) / 1000) + ((( 50 / cement_density) / 1000 ) * jQuery("#tab3_cemento").val() ) + ((( jQuery("#tab3_arena").val() * volume_liters * semi_compact_arena ) / density_arena / 1000 ) / 1000 ) + ((( jQuery("#tab3_grava").val() * volume_liters * semi_compact_grava ) / density_grava / 1000 ) / 1000));
jQuery("#tab3_approximate_volume").val( number_format( approximate_volume, 3 ) );
jQuery("#tab3_agua_botes").val( number_format( aguaSacos * volume_liters / 1000, 3 ) );
jQuery("#tab3_cemento_sacos").val( number_format( cementoSacos * 50 / 1000, 3 ) );
jQuery("#tab3_arena_botes").val( number_format( arenaSacos * volume_liters / 1000, 3 ) );
jQuery("#tab3_grava_botes").val( number_format( gravaSacos * volume_liters / 1000, 3 ) );
}
}
function number_format( val, number_digits ) {
number_digits = number_digits ? number_digits : 3;
return parseFloat(parseFloat(val).toFixed(number_digits));
}
function round_number( val, decimals ) {
decimals = decimals ? decimals : 3;
var fraction = 10 * decimals;
return Math.ceil( val * fraction ) / fraction;
}
function thousands_separators( num ) {
var num_parts = num.toString().split(".");
num_parts[0] = num_parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return num_parts.join(".");
}