Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/06/2011, 12h29   #1
Invité de passage
 
MEISSA MBAYE
Inscription : mai 2010
Messages : 17
Détails du profil
Informations personnelles :
Nom : MEISSA MBAYE

Informations forums :
Inscription : mai 2010
Messages : 17
Points : 1
Points : 1
Par défaut Problème pour calculer la somme des données d'un champs d'une table

Bonjour,

Je viens de démarrer symfony et j'ai un probléme pour calculer la somme des réglements pour une facture donnée. J'ai une relation 1-n entre facture et réglements car un client peut régler sa facture en plusieurs fois et j'aimerai pouvoir savoir le montant global que le client a réglé. Je vous mets le fichier indexSuccess.php A noter que j'arrive à afficher le montant d'un réglement d'une facture mais je bloque au niveau de la somme des réglements.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<h1>Liste des factures</h1>
 
<table>
  <thead>
    <tr>
      <th>Num&eacute;ro Facture</th>
      <th>Nom Client</th>            
      <th>Date facture</th>      
      <th>Montant factur&eacute;</th>
      <th>Montant R&eacute;glement</th>
      <th>Solde</th>
    </tr>
  </thead>
  <tbody>
    <?php foreach ($factures as $facture): ?>
    <tr>
      <td><a href="<?php echo url_for('facture/show?id='.$facture->getId()) ?>"><?php echo $facture->getId() ?></a></td>      
      <td><?php echo $facture -> getClient() -> getRaisSoc() ?></td>
      <td><?php echo $facture->getDateFre() ?></td>      
      <td><center><?php echo $facture->getMontantFre() ?></center></td>      
      <td><center><?php $total=0;
      foreach ($facture -> getReglements() as $reglemt): 
      {     	  	  
       	  	$total += $reglemt['montant_reglement']; 
       	  	echo $total;      	        	
      }
      ?>
      </center></td>
      <?php endforeach; ?>      
      <td><center></center></td>
    </tr>
    <?php endforeach; ?>
  </tbody>
</table>
 
  <a href="<?php echo url_for('facture/new') ?>">Nouvelle facture</a>

Si quelqu'un peut m'aider svp. Merci d'avance.
sipap est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 13h27   #2
Membre habitué
 
Homme Ludovic
Étudiant
Inscription : janvier 2011
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Ludovic
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 124
Points : 140
Points : 140
En fessant les calculs dans les templates, tu ne respecte pas le modèle MVC. Tu dois essayer de bien discerner l'affichage, le contrôle et le modèle.
Ton calcul doit être fait dans le modèle puis récupérer dans le contrôleur pour l'afficher dans le template.
Essai de faire une méthode qui calcule le montant total des règlements dans le fichier Facture.class.php.
Code :
1
2
3
4
5
6
7
8
public function getTotalReglement()
{
    $total = 0;
    foreach ($this->getRegl() as $reglement)
    {
        $total = $reglement;
    }
}
Et dans le template tu fait appel à cette méthode.
Sinon à mon avis ton problème vient de la variable $reglement donc die($reglement); juste à l'entrée du foreach pour savoir à quoi elle ressemble.
PeytaWodka est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/06/2011, 13h35   #3
Invité de passage
 
MEISSA MBAYE
Inscription : mai 2010
Messages : 17
Détails du profil
Informations personnelles :
Nom : MEISSA MBAYE

Informations forums :
Inscription : mai 2010
Messages : 17
Points : 1
Points : 1
Ok je vais essayer avec ça. En fait j'y avais pensé mais je savais pas dans quel fichier créer ma méthode. merci je vais voir si ça marche. Sinon si par la suite je veux calculer le solde = montant facturé - montant réglement je fais comment? Merci.
sipap est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 13h47   #4
Membre actif
 
Homme Fabrice Agnello
Développeur informatique
Inscription : octobre 2010
Messages : 76
Détails du profil
Informations personnelles :
Nom : Homme Fabrice Agnello
Âge : 39
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2010
Messages : 76
Points : 161
Points : 161
Bonjour,

pour votre solde, procédez de la même façon que vous l'a indiqué PeytaWodka en ajoutant une méthode getSolde() à votre objet Facture qui sera à peu de chose près :

Code :
1
2
3
public function getSolde(){
  return $this->getMontantFre() - $this->getTotalReglement();
}
HTH.
Agnello Fabrice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 13h48   #5
Invité de passage
 
MEISSA MBAYE
Inscription : mai 2010
Messages : 17
Détails du profil
Informations personnelles :
Nom : MEISSA MBAYE

Informations forums :
Inscription : mai 2010
Messages : 17
Points : 1
Points : 1
J'ai essayé de créer la méthode suggérée mais le probléme c'est que pour une facture on a plusieurs reglements donc il faut arriver à faire la somme des réglements d'une facture donc la méthode n'est pas juste. $this->regl(); je dois la remplacer par quoi précisément tout en sachant qu'entre la classe facture et reglement j'ai que getReglements() qui est une array donc faudrait que dans la methode que je puisse comparer le numero de facture et si c le même que je fasse la somme ainsi de suite en parcourant toute la liste. Je sais pas si je me fais bien comprendre.Merci.
sipap est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 13h48   #6
Membre actif
 
Homme Fabrice Agnello
Développeur informatique
Inscription : octobre 2010
Messages : 76
Détails du profil
Informations personnelles :
Nom : Homme Fabrice Agnello
Âge : 39
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2010
Messages : 76
Points : 161
Points : 161
Citation:
Envoyé par PeytaWodka Voir le message
Code :
1
2
3
4
5
6
7
8
public function getTotalReglement()
{
    $total = 0;
    foreach ($this->getRegl() as $reglement)
    {
        $total = $reglement;
    }
}
n'oubliez pas de retourner votre total
Agnello Fabrice est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 17/06/2011, 13h54   #7
Membre actif
 
Homme Fabrice Agnello
Développeur informatique
Inscription : octobre 2010
Messages : 76
Détails du profil
Informations personnelles :
Nom : Homme Fabrice Agnello
Âge : 39
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2010
Messages : 76
Points : 161
Points : 161
Citation:
Envoyé par sipap Voir le message
J'ai essayé de créer la méthode suggérée mais le probléme c'est que pour une facture on a plusieurs reglements donc il faut arriver à faire la somme des réglements d'une facture donc la méthode n'est pas juste. $this->regl(); je dois la remplacer par quoi précisément tout en sachant qu'entre la classe facture et reglement j'ai que getReglements() qui est une array donc faudrait que dans la methode que je puisse comparer le numero de facture et si c le même que je fasse la somme ainsi de suite en parcourant toute la liste. Je sais pas si je me fais bien comprendre.Merci.
normalement, à votre facture vous ne devriez associer que les règlements la concernant (donc pas de verification de numéro ou quoi que ce soit dans ce traitement de somme).
Du coup, votre getReglements() vous renvoit un array de Reglement qu'il vous reste à parcourir et à en sommer les valeurs.

Code :
1
2
3
4
5
6
7
public function getTotalReglements(){
  $total = 0;
  foreach ($this->getReglements() as $reglement){
    $total += $reglement->getMontantReglement();
  }
  return $total;
}
Agnello Fabrice est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/06/2011, 13h58   #8
Invité de passage
 
MEISSA MBAYE
Inscription : mai 2010
Messages : 17
Détails du profil
Informations personnelles :
Nom : MEISSA MBAYE

Informations forums :
Inscription : mai 2010
Messages : 17
Points : 1
Points : 1
OK Fabrice je comprend mieux et j'appelle comment ces methodes dans le action.class.php. Voilà une partie de ce fichier.
Code :
1
2
3
4
5
public function executeIndex(sfWebRequest $request)
  {
    $this->factures =Doctrine::getTable('facture')->getFacture();   
 
  }
sipap est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 14h01   #9
Membre habitué
 
Homme Ludovic
Étudiant
Inscription : janvier 2011
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Ludovic
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 124
Points : 140
Points : 140
Vu que tu as des objets facture dans ton template, tu fait juste appel à la méthode getTotalReglement() sur l'objet facture dans ton template donc ton action ne change pas par contre dans ton template tu fait :
Code :
echo $facture->getTotalReglement();
PeytaWodka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 14h07   #10
Invité de passage
 
MEISSA MBAYE
Inscription : mai 2010
Messages : 17
Détails du profil
Informations personnelles :
Nom : MEISSA MBAYE

Informations forums :
Inscription : mai 2010
Messages : 17
Points : 1
Points : 1
Merci Fabrice ça marche en fait j'appel directement les méthodes dans la vue et j'ai la somme des réglements et le solde. Mais l'autre souci que j'ai c'est que j'aimerai à présent faire la même chose mais pour un client donné avoir la mm liste. Le souci c'est que il faut que l'utilisateur entre le nom du client et que j'arrive à récupérer l'information mais juste avec un petit formulaire ou une zone de saisie. Merci encore une fois.
sipap est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 15h16   #11
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Citation:
Envoyé par PeytaWodka Voir le message
En fessant les calculs dans ...
C'est sur, après il n'oseront plus bouger

__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 17/06/2011, 17h24   #12
Membre habitué
 
Homme Ludovic
Étudiant
Inscription : janvier 2011
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Ludovic
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 124
Points : 140
Points : 140
Citation:
Envoyé par Michel Rotta Voir le message
C'est sur, après il n'oseront plus bouger

C'est le correcteur orthographique qui a fait ça

Citation:
Envoyé par sipap
Merci Fabrice ça marche en fait j'appel directement les méthodes dans la vue et j'ai la somme des réglements et le solde. Mais l'autre souci que j'ai c'est que j'aimerai à présent faire la même chose mais pour un client donné avoir la mm liste. Le souci c'est que il faut que l'utilisateur entre le nom du client et que j'arrive à récupérer l'information mais juste avec un petit formulaire ou une zone de saisie. Merci encore une fois.
Tu veux faire une sorte de filtre en fait ?
PeytaWodka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 21h53   #13
Invité de passage
 
MEISSA MBAYE
Inscription : mai 2010
Messages : 17
Détails du profil
Informations personnelles :
Nom : MEISSA MBAYE

Informations forums :
Inscription : mai 2010
Messages : 17
Points : 1
Points : 1
Bsr j'ai posté un autre message sur la question. Mais je répond quand même en fait je veux avoir la liste de toutes les factures d'un client et pour ça il faut que l'utilisateur spécifie de quel client il s'agit et donc qu'il entre le nom du client. Une fois obtenu le nom du client je peux faire le reste. A noter qu'en principe la $request -> getParameter('nom') devrait me permettre d'obtenir le nom du client seulement ça ne marche pas. Merci
sipap est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2011, 14h01   #14
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
@PeytaWodka, sacré correcteur... Il m'a fait exactement la même correction il y a trois mois

Pas évident que ceci te retourne le nom de quoi que cela soit.

Regarde en mode débug dans la barre de débug, tu vas trouver la liste des données retournée par la requête et le nom exacte utilisé.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h30.


 
 
 
 
Partenaires

Hébergement Web