I return a dynamic form where the products are separated by chapters. In the example I put there are 3 different chapters. At the end of each chapter, I intend to create an input with the total value of each chapter.
I’m doing it this way:
var data = [ {Designacao: "Micro-ondas1", NumCap: "1", Capitulo: "Cozinha", NumSub: "1.1", Valor: "300", }, {Designacao: "Exaustor cinzento 1", NumCap: "", Capitulo: "", NumSub: "1.2", Valor: "75.00", }, {Designacao: "Mesa - Castanha -8 Lugares", NumCap: "2", Capitulo: "Sala", NumSub: "2.1", Valor: "741.00" }, {Designacao: "Castanhas douradas", NumCap: "", Capitulo: "", NumSub: "2.2", Valor: "150.00", }, {Designacao: "cama", NumCap: "3", Capitulo: "Quarto", NumSub: "3.1", Valor: "485.00", }, {Designacao: "Guarda Vestidos", NumCap: "", Capitulo: "", NumSub: "3.2", Valor: "685.00", }, ]; var linha = ``; var soma = 0; Object.keys(data).forEach(i=>{ Designacao = data[i].Designacao; NumCap = data[i].NumCap; Capitulo = data[i].Capitulo; NumSub = data[i].NumSub; Valor = data[i].Valor; teste = parseInt(Valor); if( NumCap > 0){ soma += teste; } if(NumCap > 1){ linha += `<div class="form-group col-md-1" style="float: right;"> <input type="text" class="form-control1 alinha" value="${soma}"> <span class="form-highlight">€</span> <span class="form-bar"></span> <label class="label3 logo8" for="Valor">Total</label> </div> <div style="clear:both;"></div>`; } if(!NumCap.length||!Capitulo.length){ linha += `<div class="form-group col-md-2" style="display: none;"> <input type="text" class="form-control1 alinha" value="${NumCap}"> <span class="form-highlight"></span> <span class="form-bar"></span> <label class="label3 logo8" for="Capitulo">Nº Capitulo</label> </div> <div class="form-group col-md-4" style="display: none;"> <input type="text" class="form-control1" value="${Capitulo}"> <span class="form-highlight"></span> <span class="form-bar"></span> <label class="label1 logo8" for="Capitulo">Capitulo</label> </div> <div style="clear:both;"></div>`; }else{ linha += `<div class="form-group col-md-2"> <input type="text" class="form-control1 alinha" value="${NumCap}"> <span class="form-highlight"></span> <span class="form-bar"></span> <label class="label3 logo8" for="Capitulo">Nº Capitulo</label> </div> <div class="form-group col-md-4"> <input type="text" class="form-control1" value="${Capitulo}"> <span class="form-highlight"></span> <span class="form-bar"></span> <label class="label1 logo8" for="Capitulo">Capitulo</label> </div> <div style="clear:both;"></div>`; } linha += `<div class="form-group col-md-1"> <input type="text" class="form-control1 alinha" value="${NumSub}"> <span class="form-highlight"></span> <span class="form-bar"></span> <label class="label3 logo8" for="Capitulo1">Nº</label> </div> <div class="form-group col-md-4"> <textarea class="area2" rows="1" data-min-rows="1">${Designacao}</textarea> <span class="form-highlight"></span> <span class="form-bar"></span> <label class="label1 logo8" for="Designaca">Designação</label> </div> <div class="form-group col-md-1"> <input type="text" class="form-control1 alinha" value="${Valor}"> <span class="form-highlight">€</span> <span class="form-bar"></span> <label class="label3 logo8" for="Valor">Total</label> </div> <div style="clear:both;"></div>`; }) linha += `<div class="form-group col-md-1" style="float: right;"> <input type="text" class="form-control1 alinha" value="${soma}"> <span class="form-highlight">€</span> <span class="form-bar"></span> <label class="label3 logo8" for="Valor">Total</label> </div> <div style="clear:both;"></div>`; $("#retorc6").html(linha);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <form role="form" action="#!" id="retorc6"> </form>
The problem is that the total value of each chapter is being returned incorrectly. In chapter 1 the total value must be 375.00, in chapter 2 of 891.00 and in chapter 3 of 1170.00.
I’m not able to create the correct condition to return the values as I want, can someone help to solve the problem?
The idea is to create, at the end of each chapter, the total value of the products in that same chapter.
Advertisement
Answer
I just moved the soma += teste
to the end, and added a check to reset it after every ‘chapter’.
The code below should work.
var data = [ {Designacao: "Micro-ondas1", NumCap: "1", Capitulo: "Cozinha", NumSub: "1.1", Valor: "300", }, {Designacao: "Exaustor cinzento 1", NumCap: "", Capitulo: "", NumSub: "1.2", Valor: "75.00", }, {Designacao: "Mesa - Castanha -8 Lugares", NumCap: "2", Capitulo: "Sala", NumSub: "2.1", Valor: "741.00" }, {Designacao: "Castanhas douradas", NumCap: "", Capitulo: "", NumSub: "2.2", Valor: "150.00", }, {Designacao: "cama", NumCap: "3", Capitulo: "Quarto", NumSub: "3.1", Valor: "485.00", }, {Designacao: "Guarda Vestidos", NumCap: "", Capitulo: "", NumSub: "3.2", Valor: "685.00", }, ]; var linha = ``; var soma = 0; Object.keys(data).forEach(i=>{ Designacao = data[i].Designacao; NumCap = data[i].NumCap; Capitulo = data[i].Capitulo; NumSub = data[i].NumSub; Valor = data[i].Valor; teste = parseInt(Valor); if(NumCap > 1){ linha += `<div class="form-group col-md-1" style="float: right;"> <input type="text" class="form-control1 alinha" value="${soma}"> <span class="form-highlight">€</span> <span class="form-bar"></span> <label class="label3 logo8" for="Valor">Total</label> </div> <div style="clear:both;"></div>`; } if(!NumCap.length||!Capitulo.length){ linha += `<div class="form-group col-md-2" style="display: none;"> <input type="text" class="form-control1 alinha" value="${NumCap}"> <span class="form-highlight"></span> <span class="form-bar"></span> <label class="label3 logo8" for="Capitulo">Nº Capitulo</label> </div> <div class="form-group col-md-4" style="display: none;"> <input type="text" class="form-control1" value="${Capitulo}"> <span class="form-highlight"></span> <span class="form-bar"></span> <label class="label1 logo8" for="Capitulo">Capitulo</label> </div> <div style="clear:both;"></div>`; }else{ linha += `<div class="form-group col-md-2"> <input type="text" class="form-control1 alinha" value="${NumCap}"> <span class="form-highlight"></span> <span class="form-bar"></span> <label class="label3 logo8" for="Capitulo">Nº Capitulo</label> </div> <div class="form-group col-md-4"> <input type="text" class="form-control1" value="${Capitulo}"> <span class="form-highlight"></span> <span class="form-bar"></span> <label class="label1 logo8" for="Capitulo">Capitulo</label> </div> <div style="clear:both;"></div>`; } linha += `<div class="form-group col-md-1"> <input type="text" class="form-control1 alinha" value="${NumSub}"> <span class="form-highlight"></span> <span class="form-bar"></span> <label class="label3 logo8" for="Capitulo1">Nº</label> </div> <div class="form-group col-md-4"> <textarea class="area2" rows="1" data-min-rows="1">${Designacao}</textarea> <span class="form-highlight"></span> <span class="form-bar"></span> <label class="label1 logo8" for="Designaca">Designação</label> </div> <div class="form-group col-md-1"> <input type="text" class="form-control1 alinha" value="${Valor}"> <span class="form-highlight">€</span> <span class="form-bar"></span> <label class="label3 logo8" for="Valor">Total</label> </div> <div style="clear:both;"></div>`; if (NumCap !== '') soma = 0; soma += teste; }) linha += `<div class="form-group col-md-1" style="float: right;"> <input type="text" class="form-control1 alinha" value="${soma}"> <span class="form-highlight">€</span> <span class="form-bar"></span> <label class="label3 logo8" for="Valor">Total</label> </div> <div style="clear:both;"></div>`; $("#retorc6").html(linha);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <form role="form" action="#!" id="retorc6"> </form>