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("."); }