Adaugare TVA

Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
adrian_ady
Mesaje: 80

Adaugare TVA

Salut,
cum se adauga functia de calcul TVA la codul urmator?

Cod: Selectaţi tot

function update_total() {
  var total = 0;
  $('.price').each(function(i){
    price = $(this).html().replace(" Lei","");
    if (!isNaN(price)) total += Number(price);
  });

  total = roundNumber(total,2);

  $('#subtotal').html(total+" Lei");
  $('#total').html(total+" Lei");
  
  update_balance();
}

function update_balance() {
  var due = $("#total").html().replace(" Lei","") - $("#paid").val().replace(" Lei","");
  due = roundNumber(due,2);
  
  $('.due').html(due+" Lei");
}

function update_price() {
  var row = $(this).parents('.item-row');
  var price = row.find('.cost').val().replace(" Lei","") * row.find('.qty').val();
  price = roundNumber(price,2);
  isNaN(price) ? row.find('.price').html("N/A") : row.find('.price').html(price+" Lei");
  
  update_total();
}

function bind() {
  $(".cost").blur(update_price);
  $(".qty").blur(update_price);
}

MarPlo Mesaje: 4343
Salut
Ca sa obtii valoarea TVA, se inmulteste pretul sau total cu procentul de TVA. De exemplu, 24% inseamna sa inmultesti cu 0.24.
Pe cod e asa:

Cod: Selectaţi tot

var tva = 0.24;  // TVA 24%
function update_total() {
  var total = 0;
  $('.price').each(function(i){
    price = $(this).html().replace(" Lei","");
    if (!isNaN(price)) total += Number(price);
  });

  total *= tva;  // se aplica TVA-ul
  total = roundNumber(total,2);

  $('#subtotal').html(total+" Lei");
  $('#total').html(total+" Lei");
 
  update_balance();
}

adrian_ady Mesaje: 80
Am facut schimbarile, rezultatul nu e chiar ok, am facut doua imagini ca sa vezi. TVA-ul il iau din db->setari.

Cod: Selectaţi tot

		<table class="table_factura" id="items">
		
		  <tr>
		      <th>Produs</th>
		      <th>Descriere</th>
		      <th>Pret unitar</th>
		      <th>Cantitate</th>
		      <th>Total rand</th>
		  </tr>
		  
		  <tr class="item-row">
		      <td class="item-name"><div class="delete-wpr"><textarea class="textarea_factura" placeholder=" Denumire produs "></textarea></div></td>
		      <td class="description"><textarea class="textarea_factura" placeholder=" Descriere produs "></textarea></td>
		      <td><textarea class="textarea_factura cost"></textarea></td>
		      <td><textarea class="textarea_factura qty"></textarea></td>
		      <td><span class="price"></span></td>
		  </tr>
		  
		  <tr id="hiderow">
		    <td colspan="5"><a id="addrow" href="javascript:;" title="Add a row"> <i class="fa fa-plus-square-o"></i></a></td>
		  </tr>
		  
		  <tr>
		      <td colspan="2" class="blank"> </td>
		      <td colspan="2" class="total-line">Subtotal</td>
		      <td class="total-value"><div id="subtotal"></div></td>
		  </tr>
		  <tr>
		      <td colspan="2" class="blank"> </td>
		      <td colspan="2" class="total-line">+ TVA <?=$tva?></td>
		      <td class="total-value"><div id="tva"></div></td>
		  </tr>
		  <tr>

		      <td colspan="2" class="blank"> </td>
		      <td colspan="2" class="total-line">Total</td>
		      <td class="total-value"><div id="total"></div></td>
		  </tr>
		  <tr>
		      <td colspan="2" class="blank"> </td>
		      <td colspan="2" class="total-line">- Avans platit</td>
		      <td class="total-value"><textarea class="textarea_factura" id="paid"></textarea></td>
		  </tr>
		  <tr>
		      <td colspan="2" class="blank"> </td>
		      <td colspan="2" class="total-line balance"><b>Total de plata</b></td>
		      <td class="total-value balance"><div class="due"></div></td>
		  </tr>
		
		</table>
Imagine
Codul

Cod: Selectaţi tot

var tva = 0.24;  // TVA 24%

function update_total() {
  var total = 0;
  $('.price').each(function(i){
    price = $(this).html().replace(" Lei","");
    if (!isNaN(price)) total += Number(price);
  });
  total *= tva;  // se aplica TVA-ul 
  total = roundNumber(total,2);

  $('#subtotal').html(total+" Lei");
  $('#total').html(total+" Lei");
  $('#tva').html(total+" Lei");
 
  update_balance();
}

function update_subtotal() {
  var subtotal = $("#tva").html().replace(" Lei","") + $("#total").html().replace(" Lei","");
  subtotal = roundNumber(subtotal,2);

  $('.subtotal').html(subtotal+" Lei");

}

function update_balance() {
  var due = $("#total").html().replace(" Lei","") - $("#paid").val().replace(" Lei","") + $("#subtotal").html().replace(" Lei","");
  due = roundNumber(due,2);

  $('.due').html(due+" Lei");
}

function update_price() {
  var row = $(this).parents('.item-row');
  var price = row.find('.cost').val().replace(" Lei","") * row.find('.qty').val();
  price = roundNumber(price,2);
  isNaN(price) ? row.find('.price').html("N/A") : row.find('.price').html(price+" Lei");

  update_total();
}

function bind() {
  $(".cost").blur(update_price);
  $(".qty").blur(update_price);
  $(".tva").blur(update_price);
}

MarPlo Mesaje: 4343
Nu stiu exact unde trebuie aplicat tva-ul in codul tau. Eu doar iti arat cum obtii si incluzi tva-ul in pretul total, in rest aplica-l in codul tau unde stii ca trebuie adaugat.
Deci, in loc de aceste linii de cod:

Cod: Selectaţi tot

total *= tva;  // se aplica TVA-ul
total = roundNumber(total,2);

$('#subtotal').html(total+" Lei");
$('#total').html(total+" Lei");
$('#tva').html(total+" Lei");
Foloseste pe acestea:

Cod: Selectaţi tot

var tva_val = total * tva;  // obtine valoarea tva-ului
$('#tva').html(tva_val +" Lei");  // adauga tva in html
$('#subtotal').html(total+" Lei");  // in html totalul fara tva
total = roundNumber(total + tva_val, 2);  // adauga TVA la total, si se rotunjeste numarul
$('#total').html(total+" Lei");  // in html totalul cu tva inclus

adrian_ady Mesaje: 80
Multumesc, este foaaaaaarte bine!
Ar mai fi ceva care credeam ca pot sa rezolv insa... iata ca nu. Exista mici neconcordante cu zecimalele, arat in poza.

Imagine

MarPlo Mesaje: 4343
Aplica roundNumber() ca sa rotunjesti numarul la cate zecimale vrei.
Adica:

Cod: Selectaţi tot

var tva_val = roundNumber(total * tva, 2);

adrian_ady Mesaje: 80
Ies toate in afara de Total: total = roundNumber(total + tva_val, 2);
Semnul plus adauga una langa alta cele doua valori, nu le aduna. Ex: 1+3 = 13 in loc de 1+3 = 4

Cod: Selectaţi tot

function update_total() {
  var total = 0;
  $('.price').each(function(i){
    price = $(this).html().replace(" Lei","");
    if (!isNaN(price)) total += Number(price);
  });
var tva_val = total * tva;  // obtine valoarea tva-ului
tva_val = roundNumber(tva_val,2);
$('#tva').html(tva_val+" Lei");  // adauga tva in html
var subtotal = total;
subtotal = roundNumber(subtotal,2);
$('#subtotal').html(subtotal+" Lei");  // in html totalul fara tva

total = roundNumber(total + tva_val, 2); 
$('#total').html(total+" Lei");  // in html totalul cu tva inclus
 
  update_balance();
}

MarPlo Mesaje: 4343
Posibil ca unul din acele numere e preluat ca sir, de aceea semnul "+" are rol de concatenare (unire).
Asa ar trebui sa mearga:

Cod: Selectaţi tot

total = roundNumber(1*total + tva_val*1, 2);

adrian_ady Mesaje: 80
Merge brici. Cum ne(ma) mai suporti pe aici asa fraieri? ;)

Subiecte similare