Gestion événement tableau

Eléphanteau du PHP | 16 Messages

27 nov. 2016, 16:05

Bonjour à Tous

Lors de la récupération de ma facture pour modification mes événements ne se font plus dans ma case quantité et total, l'événement est actif sur la première ligne mais pas sur les autres. lors de la création de la facture j'ajoute des lignes chaque case quantité et total prix on un événement calcul tout cela fonctionne bien. chaque ligne est stocké dans une table de ma BDD, lors de la récupération de mes lignes pour modifier ma facture je m'aperçois que toute les infos sont présente mais que la première ligne est active lorsque je change ma quantité, le calcul ne se fait que sur cette ligne et non les autres lignes récupérées.

Mon php
<div class='row'>
      		<div class='col-xs-12 col-sm-12 col-md-12 col-lg-12'>
      			<table class="table table-bordered table-hover" >
					<thead>
						<tr>
							<th width="2%"><input id="id" class="formcontrol" type="checkbox"/></th>
							<th width="15%">Ref</th>
							<th width="38%">Produits</th>
							<th width="15%">Prix</th>
							<th width="15%">Qtt</th>
							<th width="15%">Total</th>
						</tr>
					</thead>
					
			
					<?php

$query = "select * from subsciption WHERE invoice='$memid'";

$result = mysqli_query($con,$query);


    if(mysqli_affected_rows($con)!=0){
          while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)){
          	
          	$id=$row['id'];
          	$sub_type=$row['sub_type'];
          	$name_produit=$row['name_produit'];
          	$prix_produit=$row['prix_produit'];
          	$qtt=$row['qtt'];
          	$total_produit=$row['total_produit'];


	
?>
<tr>
					<td><input class="case" name="id[]" type="checkbox" value="<?php echo $id;?>" /></td>
					<td><input type="text" data-type="productCode" name="itemNo[]" id="itemNo_1" class="form-control autocomplete_txt" autocomplete="off" value="<?php echo $sub_type;?>"></td>
					<td><input type="text" data-type="productName" name="itemName[]" id="itemName_1" class="form-control autocomplete_txt"  autocomplete="off" value="<?php echo $name_produit;?>"></td>
					<td><input type="number" name="price[]" id="price_1" class="form-control changesNo" value="<?php echo $prix_produit;?>" autocomplete="off" onkeypress="return IsNumeric(event);" ondrop="return false;" onpaste="return false;" ></td>
					<td><input type="number" name="quantity[]" id="quantity_1" class="form-control changesNo" value="<?php echo $qtt;?>" autocomplete="off" onkeypress="return IsNumeric(event);" ondrop="return false;" onpaste="return false;" ></td>
					<td><input type="number" name="total[]" id="total_1" class="form-control totalLinePrice" value="<?php echo $total_produit;?>" autocomplete="off" onkeypress="return IsNumeric(event);" ondrop="return false;" onpaste="return false;" ></td>
					
	</tr>				
				
<?php
}
}


								?>
      		
		 

					</table>
					
								
	
		
 

      	<div class='row' style="margin-left: 10px; margin-top: 10px;">
      		<div class='col-xs-12 col-sm-3 col-md-3 col-lg-3'>
      			<button class="btn btn-danger delete" type="button">- Supprimer</button>
      			<button class="btn btn-success addmore" type="button">+ Ajout produit</button>
      		</div>
      		<?php

$query = "select * from invoices WHERE invoice='$memid'";

$result = mysqli_query($con,$query);


    if(mysqli_affected_rows($con)!=0){
          while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)){


?>
      		<div class='col-xs-12 col-sm-offset-4 col-md-offset-4 col-lg-offset-4 col-sm-5 col-md-5 col-lg-5'>
				<form class="form-inline">
					<div class="form-group">
						<label>Sous Total: &nbsp;</label>
						<div class="input-group">
							<input type="number" class="form-control" name="subtotal" id="subTotal" placeholder="Sous Total" onkeypress="return IsNumeric(event);" ondrop="return false;" value="<?php echo $row['sous_total'];?>" onpaste="return false;">
							<div class="input-group-addon">€</div>
						</div>
					</div>
					<div class="form-group">
						<label>TVA: &nbsp;</label>
						<div class="input-group">
						<div class="input-group-addon">%</div>
							<input type="number" class="form-control" id="tax" placeholder="TVA" onkeypress="return IsNumeric(event);" ondrop="return false;" onpaste="return false;">
							
						</div>
					</div>
					<div class="form-group">
						<label>Total TVA: &nbsp;</label>
						<div class="input-group">
							<input type="number" class="form-control" name="taxAmount" id="taxAmount" placeholder="TVA" onkeypress="return IsNumeric(event);" ondrop="return false;" value="<?php echo $row['tva'];?>" onpaste="return false;">
							<div class="input-group-addon">€</div>
						</div>
					</div>
					<div class="form-group">
						<label>Total: &nbsp;</label>
						<div class="input-group">
							<input type="number" class="form-control" name="totalAftertax" id="totalAftertax" placeholder="Total" value="<?php echo $row['total'];?>" onkeypress="return IsNumeric(event);" ondrop="return false;"  onpaste="return false;">
							<div class="input-group-addon">€</div>
						</div>
					</div>
					<div class="form-group">
						<label>Paiement: &nbsp;</label>
						<div class="input-group">
							<input type="number" class="form-control" name="amountPaid" id="amountPaid" placeholder="Paiement" onkeypress="return IsNumeric(event);" ondrop="return false;" value="<?php echo $row['paid'];?>" onpaste="return false;">
							<div class="input-group-addon">€</div>
						</div>
					</div>
					<div class="form-group">
						<label>Solde: &nbsp;</label>
						<div class="input-group">
							<input type="number" class="form-control amountDue" name="amountDue" id="amountDue" placeholder="Solde" onkeypress="return IsNumeric(event);" ondrop="return false;"  value="<?php echo $row['bal'];?>" onpaste="return false;">
							<div class="input-group-addon">€</div>
						</div>
					</div>
				<div class="form-group">
										<div class="controls"><span id="spryselect2">
										  <select name="m" id="id" data-rule-required="true" required>
										  <option value=""><?php echo $row['reglement'];?></option>
										    <option value="CB">CB</option>
											 <option value="Chèque">Chèque</option>
											  <option value="Espèces ">Espèces </option>
											   
										   
									    </select>
							
									    </div>
				</div>
				 <?php
									}
								}
								?>

									<div class="form-actions">
										<button type="submit" class="btn btn-primary">Enregistrer</button>
										
									</div>
								</form>
côté script
//autocomplete script
$(document).on('focus','.autocomplete_txt',function(){
	type = $(this).data('type');
 
	if(type =='productCode' )autoTypeNo=0;
	if(type =='productName' )autoTypeNo=1; 	
 
	$(this).autocomplete({
		source: function( request, response ) {	 
			 var array = $.map(prices, function (item) {
                 var code = item.split("|");
                 return {
                     label: code[autoTypeNo],
                     value: code[autoTypeNo],
                     data : item
                 }
             });
             //appel au filtre
             response($.ui.autocomplete.filter(array, request.term));
		},
		autoFocus: true,	      	
		minLength: 2,
		select: function( event, ui ) {
			var names = ui.item.data.split("|");						
			id_arr = $(this).attr('id');
	  		id = id_arr.split("_");
			$('#itemNo_'+id[1]).val(names[0]);
			$('#itemName_'+id[1]).val(names[1]);
			$('#quantity_'+id[1]).val(1);
			$('#price_'+id[1]).val(names[2]);
			$('#total_'+id[1]).val( 1*names[2] );
			calculateTotal();
		}		      	
	});
});
 
//Changement du prix
$(document).on('change keyup blur','.changesNo',function(){
	id_arr = $(this).attr('id');
	id = id_arr.split("_");
	quantity = $('#quantity_'+id[1]).val();
	price = $('#price_'+id[1]).val();
	if( quantity!='' && price !='' ) $('#total_'+id[1]).val( (parseFloat(price)*parseFloat(quantity)).toFixed(2) );	
	calculateTotal();
});
 
$(document).on('change keyup blur','#tax',function(){
	calculateTotal();
});
 
//calcul du prix
function calculateTotal(){
	subTotal = 0 ; total = 0; 
	$('.totalLinePrice').each(function(){
		if($(this).val() != '' )subTotal += parseFloat( $(this).val() );
	});
	$('#subTotal').val( subTotal.toFixed(2) );
	tax = $('#tax').val();
	if(tax != '' && typeof(tax) != "undefined" ){
		taxAmount = subTotal * ( parseFloat(tax) /100 );
		$('#taxAmount').val(taxAmount.toFixed(2));
		total = subTotal + taxAmount;
	}else{
		$('#taxAmount').val(0);
		total = subTotal;
	}
	$('#totalAftertax').val( total.toFixed(2) );
	calculateAmountDue();
}
 
$(document).on('change keyup blur','#amountPaid',function(){
	calculateAmountDue();
});
 
//calcul du solde
function calculateAmountDue(){
	amountPaid = $('#amountPaid').val();
	total = $('#totalAftertax').val();
	if(amountPaid != '' && typeof(amountPaid) != "undefined" ){
		amountDue = parseFloat(total) - parseFloat( amountPaid );
		$('.amountDue').val( amountDue.toFixed(2) );
	}else{
		total = parseFloat(total).toFixed(2);
		$('.amountDue').val( total);
	}
}
 
 
//restriction non-chifre 
var specialKeys = new Array();
specialKeys.push(8,46); //Backspace
function IsNumeric(e) {
    var keyCode = e.which ? e.which : e.keyCode;
    console.log( keyCode );
    var ret = ((keyCode >= 48 && keyCode <= 57) || specialKeys.indexOf(keyCode) != -1);
    return ret;
}
Merci pour votre aide

ViPHP
ViPHP | 1971 Messages

29 nov. 2016, 00:45

As tu un effet sur chaque ligne ?
Essayes de lancer un mode console comme ceci :
//Changement du prix
$(document).on('change keyup blur','.changesNo',function(i,v){
  console.log (i+" "+v);
  id_arr = $(this).attr('id');
  id = id_arr.split("_");
  quantity = $('#quantity_'+id[1]).val();
  price = $('#price_'+id[1]).val();
  if( quantity!='' && price !='' ) $('#total_'+id[1]).val( (parseFloat(price)*parseFloat(quantity)).toFixed(2) );	
  calculateTotal();
});
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 16 Messages

03 déc. 2016, 15:06

Bonjour,
En fait lorsque mes lignes s'affichent, la première ligne reste active est si je change le prix ou la quantité le total se fait, si j'ajoute une ligne avec le bouton, le calcul se fait aussi mais par contre les autres lignes de produit ne changent pas, d'ailleurs lorsque je tablule dans ma première ligne il y a un effet dans le prix qui s'affiche avec le (, et 00) mais les autres rien ne se passe et la case est insensible aux variations de prix ou de quantité.

J'ai lancé en mode console comme indiqué et rien ne se passe.

Merci

Eléphanteau du PHP | 16 Messages

03 déc. 2016, 15:13

D'ailleur j'ai l'impression qu'il considère que toutes mes lignes renvoyées de la BDD ont la même Id, si j'ai 3 lignes, la ligne 1 est quantite_1 , la deux quantite_1, la trois quantite_1 et si j'ajoute une ligne donc la quatrième alors il me met bien quantite_4

ViPHP
ViPHP | 1971 Messages

08 déc. 2016, 22:26

Rien ne se passe ?
Essaye cela, juste avec un onchange et keyup:

Code : Tout sélectionner

$(document).on({ change : function () { console.log ('essai change'); }, keyup : function () { console.log ('essai keyup'); } },'.changesNo');
Regarde si quelques chose s'affiche. Si rien ne s'affiche ton DOM n'est pas bon et tu ne peux pas "trigger" l'évènement.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr