IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Problème pour calculer la somme des données d'un champs d'une table


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 9
    Points
    9
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 124
    Points : 150
    Points
    150
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    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.

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 : 80
    Points : 169
    Points
    169
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function getSolde(){
      return $this->getMontantFre() - $this->getTotalReglement();
    }
    HTH.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    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.

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 : 80
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par PeytaWodka Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 : 80
    Points : 169
    Points
    169
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function getTotalReglements(){
      $total = 0;
      foreach ($this->getReglements() as $reglement){
        $total += $reglement->getMontantReglement();
      }
      return $total;
    }

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    OK Fabrice je comprend mieux et j'appelle comment ces methodes dans le action.class.php. Voilà une partie de ce fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public function executeIndex(sfWebRequest $request)
      {
        $this->factures =Doctrine::getTable('facture')->getFacture();   
     
      }

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 124
    Points : 150
    Points
    150
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $facture->getTotalReglement();

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    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.

  11. #11
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    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 !

  12. #12
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 124
    Points : 150
    Points
    150
    Par défaut
    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 ?

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    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

  14. #14
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    @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 !

Discussions similaires

  1. Charger une JComboBox ou une JList des données d'un champ d'une table dans une BDD.
    Par MasterMbg dans le forum Codes sources à télécharger
    Réponses: 2
    Dernier message: 27/09/2013, 12h16
  2. Problème pour trouver et copier des données dans un autre workbooks
    Par bilou_12 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/04/2012, 10h23
  3. Problème pour changer le format des données
    Par Lize50 dans le forum SAS Base
    Réponses: 10
    Dernier message: 20/05/2008, 14h51
  4. [8.5]Problème pour calculer le nombre des personnes d'une liste
    Par Gotch59 dans le forum SAP Crystal Reports
    Réponses: 9
    Dernier message: 21/06/2007, 09h47
  5. Réponses: 3
    Dernier message: 24/08/2006, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo