Validate PivotTable Summaries in JavaScript

3

I have a question about validating sums of PivotTables. I have 2 inputs one with the value with iva and another of the value without VAT. I have a PivotTable where I enter billing periods. When you put the total value with viva it has to add up all values with VAT entered in the table. I can only do this with values with VAT. How do I get the values without VAT? I do not know how to do. Thank you!

<script language="JavaScript" type="text/javascript">
	function addRow(tableID) {
		var table = document.getElementById(tableID);
		var rowCount = table.rows.length;
		var row = table.insertRow(rowCount);
		var colCount = table.rows[0].cells.length;
		for(var i=0; i<colCount; i++) {
			var newcell	= row.insertCell(i);
			newcell.innerHTML = table.rows[0].cells[i].innerHTML;
			//alert(newcell.childNodes);
			switch(newcell.childNodes[0].type) {
				case "text":
					newcell.childNodes[0].value = "";
					break;
				case "checkbox":
					newcell.childNodes[0].checked = false;
					break;
				case "select-one":
					newcell.childNodes[0].selectedIndex = 0;
					break;
			}
		}
	}
	function deleteRow(tableID) {
		try {
			var table = document.getElementById(tableID);
			var rowCount = table.rows.length;
			for(var i=0; i<rowCount; i++) {
				var row = table.rows[i];
				var chkbox = row.cells[0].childNodes[0];
				if(null != chkbox && true == chkbox.checked) {
					if(rowCount <= 1) {
						alert("Não é possível apagar todas as linhas da tabela.");
						break;
					}
					table.deleteRow(i);
					rowCount--;
					i--;
				}
			}
		}catch(e) {
			alert(e);
		}
	}
	var quant_civa = document.getElementsByName("valor_afaturar_civa[]");
	var quant_siva = document.getElementsByName("valor_afaturar_siva[]");
	var teste = [];
	teste = dataString.split(",");
	function verifica(){
		var designacao_prest_serv = f.designacao_prest_serv.value;
		var fk_obra = f.fk_obra.value;
		var valor_total_civa = f.valor_total_civa.value;
		var valor_total_siva = f.valor_total_siva.value;
		var fk_subcontratado = f.fk_subcontratado.value;
		
		if (designacao_prest_serv == '' || designacao_prest_serv == ' '){
			alert ("Preencha a designação da prestação de serviços");
			designacao_prest_serv.focus();
			return false;
		}
		if (fk_subcontratado == '0') {
			alert ("Selecione um subcontratado");
			return false;
		}
		else{
			var soma_civa = 0;
			for (var i=0; i<quant_civa.length; i++){
				teste[i] = parseFloat(quant_civa[i].value);
				soma_civa += parseFloat(teste[i])			
			}
			if (soma_civa == valor_total_civa){
				return true;				
			}
			else{
				alert('A soma dos períodos de faturação não corresponde ao valor da Prestação de Serviços');
				return false;
			}

		}
	}
	function habilitar(){
	if(document.getElementById('obra').checked){
		document.getElementById('fk_obra').disabled = false;
		document.getElementById('fk_obra').value = 'obra';

	} else{
		document.getElementById('fk_obra').disabled = true;
		document.getElementById('fk_obra').value = '';

	}
}
</script>
<?php 	$sql = "SHOW TABLE STATUS LIKE 'adicionais_contrato'";
		$resultado = mysqli_query($link,$sql);
		$linha = mysqli_fetch_array($resultado);
		$idd = $linha['Auto_increment']; ?>
<h2>Criar Prestação de Serviços - Subcontratados</h2>
<form name="f" action="enviar_criar_adicional.php?id=<?php echo $idd; ?>" method="post" >
	<strong>Designa&ccedil;&atilde;o da prestação de serviços:</strong><br />
	<input id="designacao_prest_serv" type="text" size="100" name="designacao_prest_serv" maxlength="150" required/></br></br>
	<strong>Subcontratados:</strong>
	<select name="fk_subcontratado" id="fk_subcontratado">
	<option value="0">Selecione...</option>
	<?php $query_subcontratado = mysqli_query($link,"SELECT * FROM subcontratados ORDER BY nome ASC");
	while($subcontratado = mysqli_fetch_array($query_subcontratado)) { ?>
		<option value="<?php echo $subcontratado['id'] ?>" title="<?php echo $subcontratado['nome'] ?>"><?php echo $subcontratado['nome']; ?></option>
<?php } ?>
	</select><br><br>
	<label style="cursor: pointer;">
	<input type="radio" name="custos" id="custos_gerais" value="custos_gerais" onclick="habilitar();" checked  /> <strong>Custos Gerais</strong></label>
	<label style="cursor: pointer;">
	<input type="radio" name="custos" id="obra" value="obra" onclick="habilitar();"/> <strong>Obra</strong></label><br>
	<select name="fk_obra" id="fk_obra" disabled required>
		<option value="0">Selecione a obra...</option>
		<?php $query_prefixo = mysqli_query($link,"SELECT * FROM prefixos ");
		while($prefixo = mysqli_fetch_array($query_prefixo)) { 
			$query_obra = mysqli_query($link,"SELECT * FROM obras WHERE fk_prefixo=".$prefixo['id']." ORDER BY abrev_ano ASC, num_sequencial ASC");
			while($obra = mysqli_fetch_array($query_obra)) { 
				$id_obra = $obra['id'];?>
				<option value="<?php echo $obra['id'] ?>" title="<?php echo $obra['designacao'] ?>"><?php echo "O".$prefixo['tipo'].$obra['abrev_ano'].".".$obra['num_sequencial'].".".$obra['abrev_designacao']; ?></option>
			<?php
			}
		} ?>
	</select>
	<?php $data_abertura = date('Y-m-d'); ?>
	<br><br><strong>Data de abertura: </strong><?php echo $data_abertura ?><br /><br />
	<strong>Valor Total da Prestação de Serviços<br> Com IVA: </strong><input type="text" name="valor_total_civa" id="valor_total_civa" required/>
	<strong>Sem IVA: </strong><input type="text" name="valor_total_siva" id="valor_total_siva" required/><br /><br />
	<strong>Periodos de Fatura&ccedil;&atilde;o:</strong><br>
	<INPUT type="button" value="Adicionar linha" onclick="addRow('dataTable')" />
	<INPUT type="button" value="Apagar Linha" onclick="deleteRow('dataTable')" />
	<TABLE id="dataTable">
		<TR>
			<TD width="20px;"><INPUT type="checkbox" name="chk"/></TD>
			<TD width="100px;"><INPUT type="date" min="<?php echo date('Y-m-d'); ?>" id="data_afaturar" name="data_afaturar[]" required/></TD>
			<TD>Com IVA:<input type="text" name="valor_afaturar_civa[]" id="valor_afaturar_civa[]" value="0.00" required>€</TD>
			<TD>Sem IVA:<input type="text" name="valor_afaturar_siva[]" id="valor_afaturar_siva[]" value="0.00" required>€</TD>
		</TR>
	</TABLE>
	<p><input type="submit" onClick="return verifica()" value="Criar Prestação de Serviços"></p></br>
</form> 
    
asked by anonymous 06.03.2017 / 12:38

1 answer

1

Try adding the following function CalcularValoresSemIVA() , which calculates the total of all elements with the name valor_afaturar_siva[] , in your add and delete rows functions:

function CalcularValoresSemIVA(){
  var TotalValoresSemIVA = 0;
  for(i=0;i<document.getElementsByName("valor_afaturar_siva[]").length;i++){
    TotalValoresSemIVA += eval(document.getElementsByName("valor_afaturar_siva[]")[i].value);
  }
  alert("Total dos valores sem IVA: " + TotalValoresSemIVA + "€");
}

Edited:

If you want to have the value before testing the validations simply do something like this:

function verifica(){
  /*
    No início da tua função verifica() que é chamada
    ao clicar em "Criar Prestação de Serviços" usas
    o meu código para obteres a variável com o valor
  */
  var TotalValoresSemIVA = 0;
  for(i=0;i<document.getElementsByName("valor_afaturar_siva[]").length;i++){
    TotalValoresSemIVA += eval(document.getElementsByName("valor_afaturar_siva[]")[i].value);
  }
  /*
    Depois fazes o que quiseres com a variável
    TotalValoresSemIVA nas validações abaixo
  */
}

Last code:

var Total = 0;
for(i=1; i<9; i++) {
  var NumAleatorio = Math.random().toFixed(2);
  document.write("Número " + i + " = " + NumAleatorio + "<br>");
  Total += eval(NumAleatorio);
}
document.write("Total sem toFixed(2) = " + Total);
document.write("<br>");
document.write("Total com toFixed(2) = " + Total.toFixed(2));
    
06.03.2017 / 13:36