Salut a tous,

Je suis en galere sur un projet, et je ne sais comment regler ce probleme:
J'ai une base de donnée dont je recupere les données en pagination.
Le resultat est dans un tableau Client.
Dans ce tableau je me retrouve avec les données suivantes:

  • total
  • datefacture (format datetime)
  • type_reglement
  • tva
    etc...

Jusque la aucun soucis.

Mon cas se complique légèrement pour la vue:

Je dois afficher les résultats trier par date_facture mais sous la forme:

| TOTAL | type_reglement | tva |
--------------------------------
| 13 Juin 2014 |
--------------------------------
| 100 | CB | 20 |
--------------------------------
| 30 | ESPECE | 20 |
--------------------------------
| TOTAL JOUR: 130 € |
--------------------------------
| 12 Juin 2014 |
--------------------------------
| 50 | CB | 20 |
--------------------------------
| 80 | CHEQUE | 20 |
--------------------------------
| TOTAL JOUR: 130 € |
--------------------------------
| 10 Juin 2014 |
--------------------------------
| 70 | CHEQUE | 20 |
--------------------------------
| 10 | ESPECE | 20 |
--------------------------------
| TOTAL JOUR: 80 € |
--------------------------------

Explication:

Je dois afficher date par date en fonction de date_facture qui est un datetime chaque paiement des clients et terminer chaque jour pour la somme de la recette de la journée.

A l heure actuelle la seule solution trouvé, c est faire un find en recuperant simplement date_facture sous le format DATE(date_fcture) (qui permet avoir simplement la date du datetime) de la table client, puis de faire un foreach du find avec en condition un LIKE sur datefacure et de reinfecter les resultat dans un tableau indexé par la date. Mais je reste bloquer pour la somme jour par jour.

HORS cette méthode est tres lourde en performance, car le foreach creer a chaque fois un find et donc on se retrouve avec autant de requete que de date.....

Je penses qu'avec un group by date_facture, SELECT les clients en fonctions de ce group by MAIS je ne sais pas comment realiser cette requete sous cakephp. Mais je reste tout de meme bloquer aussi pour la somme jour par jour

Donc celui qui aurait LA solution a ce probleme pour limite la casse je lui serait reconnaissant.

Merci d avance.

1 réponse


Mikachu
Auteur
Réponse acceptée

Bon apres un week end de reflexion j ai trouvé ma solution:

Explication pour celui qui cherche cela un jour:

Dans le controller:

public function index() {
        $this->Vente->recursive = 0;
        $this->paginate =array(
            'fields' => array('id', 'date(Vente.date_facture) AS df', 'total', 'type_reglement', 'tva', 'categorie', 'promotion', 'remise', 'rattrapage_caisse', 'created', 'updated'),
            'order' => array('date_facture' => 'DESC')
        );
        $datas = $this->Paginator->paginate();
        foreach ($datas as $k => $v) {
            $ventes$v[0]'df']]] = $v; // On crée un tableau avec en clé df qui est la date du jour recuperer en requte. le foreach se chargera de classer le tout 
        }
        $this->set(compact('ventes'));
    }

Finalement, j'ai simplement retrier le tableau en fonction de df qui me sert de date jour dans la requete.
Ensuite dans la vue un double foreach: Un pour la date et l'autre a l interieur pour liset les ventes de la date en cours

Dans ma vue:

<?php foreach ($ventes as $d => $v): ?>
                    <?php $total_day = 0; ?>
                    <tr style="background-color:#FFCC66; border-top: 2px solid #FF9966">
                        <th></th><th colspan="8"><?php echo $d; ?></th>
                    </tr>

                    <?php foreach ($v as $vente): ?>
                        <tr>
                            <td><?php echo $vente'Vente']'total']; ?></td>
                            <td><?php echo $vente'Vente']'type_reglement']; ?></td>
                            <td><?php echo $vente'Vente']'tva']; ?></td>
                            <td><?php echo $vente'Vente']'categorie']; ?></td>
                            <td><?php echo $vente'Vente']'promotion']; ?></td>
                            <td><?php echo $vente'Vente']'remise']; ?></td>
                            <td><?php echo $vente'Vente']'rattrapage_caisse']; ?></td>
                            <td><?php echo $vente'Vente']'created']; ?></td>
                        </tr>
                        <?php $total_day += $vente'Vente']'total']; ?>
                    <?php endforeach; ?>
                    <tr style="background-color:#CCFFFF; border-top: 1px solid #CCCCFF">
                        <th></th><th colspan="8">TOTAL DE LA JOURNEE: <?php echo $total_day; ?> €</th>
                    </tr>
                <?php endforeach ?>