je fait le code du commande de vente en ligne mais je trouve un problème au cours de voir la fichier du facture

le problème est

le code du controller du commande est :

    <?php

    namespace ventenligneBundle\Controller;

    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\HttpFoundation\Response;
    use ventenligneBundle\Entity\UtilisateursAdresses;
    use ventenligneBundle\Entity\Commandes;
    use ventenligneBundle\Entity\Produit;

    class CommandesController extends Controller
    {
        public function facture()
        {
            $em = $this->getDoctrine()->getManager();
            $generator = $this->container->get('security.secure_random');
            $session = $this->getRequest()->getSession();
            $adresse = $session->get('adresse');
            $panier = $session->get('panier');
            $commande = array();
            $totalHT = 0;
            $totalTVA = 0;

            $facturation = $em->getRepository('ventenligneBundle:UtilisateursAdresses')->find($adresse['facturation']);
            $livraison = $em->getRepository('ventenligneBundle:UtilisateursAdresses')->find($adresse['livraison']);
            $produits = $em->getRepository('ventenligneBundle:Produit')->findArray(array_keys($session->get('panier')));

            foreach($produits as $produit)
            {
                $prixHT = ($produit->getPrix() * $panier[$produit->getId()]);
                $prixTTC = ($produit->getPrix() * $panier[$produit->getId()] / $produit->getTva()->getMultiplicate());
                $totalHT += $prixHT;

                if (!isset($commande['tva']['%'.$produit->getTva()->getValeur()])) 
                    $commande['tva']['%'.$produit->getTva()->getValeur()] = round($prixTTC - $prixHT,2);

                else 
                    $commande['tva']['%'.$produit->getTva()->getValeur()] += round($prixTTC - $prixHT,2);

                $totalTVA += round($prixTTC - $prixHT,2);

                $commande['produit'][$produit->getId()] = array('reference' => $produit->getNom(),
                                                                'quantite' => $panier[$produit->getId()],
                                                                'prixHT' => round($produit->getPrix(),2),
                                                                'prixTTC' => round($produit->getPrix() / $produit->getTva()->getMultiplicate(),2));
            }  

            $commande['livraison'] = array('prenom' => $livraison->getPrenom(),
                                        'nom' => $livraison->getNom(),
                                        'telephone' => $livraison->getTelephone(),
                                        'adresse' => $livraison->getAdresse(),
                                        'cp' => $livraison->getCp(),
                                        'ville' => $livraison->getVille(),
                                        'pays' => $livraison->getPays(),
                                        'complement' => $livraison->getComplement());
            $commande['facturation'] = array('prenom' => $facturation->getPrenom(),
                                        'nom' => $facturation->getNom(),
                                        'telephone' => $facturation->getTelephone(),
                                        'adresse' => $facturation->getAdresse(),
                                        'cp' => $facturation->getCp(),
                                        'ville' => $facturation->getVille(),
                                        'pays' => $facturation->getPays(),
                                        'complement' => $facturation->getComplement());
            $commande['prixHT'] = round($totalHT,2);
            $commande['prixTTC'] = round($totalHT + $totalTVA,2);
            $commande['token'] = bin2hex($generator->nextBytes(20));
            return $commande;
        }

        public function prepareCommandeAction()
        {
            $session = $this->getRequest()->getSession();
            $em = $this->getDoctrine()->getManager();

            if (!$session->has('commande'))
                $commande = new Commandes();
            else
                $commande = $em->getRepository('ventenligneBundle:Commandes')->find($session->get('commande'));

            $commande->setDate(new \DateTime());
            $commande->setUtilisateur($this->container->get('security.context')->getToken()->getUser());
            $commande->setValider(0);
            $commande->setReference(0);
            $commande->setCommande($this->facture());

            if (!$session->has('commande')) {
                $em->persist($commande);
                $session->set('commande',$commande);
            }

            $em->flush();

            return new Response($commande->getId());
        }

        /*
         * Cette methode remplace l'api banque.
         */
        public function validationCommandeAction($id)
        {
            $em = $this->getDoctrine()->getManager();
            $commande = $em->getRepository('ventenligneBundle:Commandes')->find($id);

            if (!$commande || $commande->getValider() == 1)
                throw $this->createNotFoundException('La commande n\'existe pas');

            $commande->setValider(1);
            $commande->setReference($this->container->get('setNewReference')->reference()); //Service
            $em->flush();   

            $session = $this->getRequest()->getSession();
            $session->remove('adresse');
            $session->remove('panier');
            $session->remove('commande');

            $this->get('session')->getFlashBag()->add('success','Votre commande est validé avec succès');
            return $this->redirect($this->generateUrl('factures'));
        }
    }

le code du UtilisateursController

        <?php

        namespace UserBundle\Controller;

        use Symfony\Bundle\FrameworkBundle\Controller\Controller;

        class UtilisateursController extends Controller
        {
            public function factureAction()
            {
                $em = $this->getDoctrine()->getManager();
                $factures = $em->getRepository('ventenligneBundle:Commandes')->byFacture($this->getUser());

                return $this->render('UserBundle:Default:layout/facture.html.twig', array('factures' => $factures));
            }

            public function facturesPDFAction($id)
            {
                $em = $this->getDoctrine()->getManager();
                $facture = $em->getRepository('ventenligneBundle:Commandes')->findOneBy(array('utilisateur' => $this->getUser(),
                                                                                             'valider' => 1,
                                                                                             'id' => $id));

                if (!$facture) {
                    $this->get('session')->getFlashBag()->add('error', 'Une erreur est survenue');
                    return $this->redirect($this->generateUrl('facutres'));
                }
                 $this->container->get('setNewFacture')->facture($facture);
            }
        }

le code du fichier twig du facture :

    <link rel="stylesheet" href="{{ asset ('bundles/crud/css/bootstrap.css') }}" />
    <link rel="stylesheet" href="{{ asset ('bundles/crud/css/bootstrap-responsive.css') }}" />
    <link rel="stylesheet" href="{{ asset ('bundles/crud/css/style.css') }}" />
    <link rel="stylesheet" href=" {{ asset ('bundles/crud/css/font-awesome.css') }}" />

    <div class="container">
        <div class="row">

            <div class="span3">
                {% include '::modulesUsed/navigation.html.twig' %}
                {% render (controller('ventenligneBundle:Panier:menu')) %}
            </div>

            <div class="span9">

                    {% for flashMessage in app.session.flashbag.get('success') %}
                        <div class="alert alert-success">
                            {{ flashMessage }}
                        </div>
                    {% endfor %}
                    {% for flashMessage in app.session.flashbag.get('error') %}
                        <div class="alert alert-errors">
                            {{ flashMessage }}
                        </div>
                    {% endfor %}      

                <h2>Factures</h2>
                <form>
                    <table class="table table-striped table-hover">
                        <thead>
                            <tr>
                                <th>Références</th>
                                <th>Date</th>
                                <th>Prix TTC</th>
                                <th></th>
                            </tr>
                        </thead>
                        <tbody>
                            {% if factures|length == 0 %}
                                <tr>
                                    <td colspna="4" class="text-center">Aucune facture actuellement</td>
                                </tr>   
                            {% endif %}

                            {% for facture in factures %}
                            <tr>
                                <td>ref : {{ facture.reference }}</td>
                                <td>{{ facture.date|date('d/m/Y') }}</td>
                                   <td>{{ facture.commande.prixTTC}} €</td>  
                                <td><a href="{{ path('facturesPDF', { 'id' : facture.id }) }}"><i class="icon-refresh"></i></a></td>
                            </tr>
                            {% endfor %}

                        </tbody>
                    </table>
                </form>

            </div>

        </div>
    </div>

    <script src="{{ asset ('bundles/crud/js/bootstrap.js') }}"></script>
    <script src="{{ asset ('bundles/crud/js/jquery.min.js') }}"></script>    

la résultat du var_dump est

quelle est la solution et merci d'avance

1 réponse


Ce qui est appelé "commande" c'est en fait les produits de la commande (foot coding !!!)
commande[0] pour le premier produit, commande[1] pour le deuxième ...
pour afficher le total TTC de la facture /commande, il faut faire la somme des totalTTC de chaque produit