%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/emtnaeewxm/www/src/EEM/ArticleBundle/Controller/
Upload File :
Create Path :
Current File : /home/emtnaeewxm/www/src/EEM/ArticleBundle/Controller/ArticleController.php

<?php

namespace EEM\ArticleBundle\Controller;

use EEM\ArticleBundle\Entity\Article;
use Picqer\Barcode\BarcodeGeneratorPNG;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Spipu\Html2Pdf\Html2Pdf;

/**
 * Article controller.
 *
 * @Route("/admin/article")
 */
class ArticleController extends Controller
{
    /**
     * Lists all article entities.
     *
     * @Route("/", name="article_index")
     * @Method("GET")
     * @Security("has_role('ROLE_USER')")
     */
    public function indexAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $marques = $em->getRepository('EEMArticleBundle:Marque')->findAll();
        if (isset($request->query->all()['famille']) && !empty($request->query->all()['famille'])) {
            $marques = $em->getRepository('EEMArticleBundle:Marque')->findMarques($request->query->all()['famille']);
        }
        $modeles = $em->getRepository('EEMArticleBundle:Modele')->findModele(null);
        if (isset($request->query->all()['marque']) && !empty($request->query->all()['marque'])) {
            $modeles = $em->getRepository('EEMArticleBundle:Modele')->findModele($request->query->all()['marque']);
        }
        if (isset($request->request->all()['btn_search'])) {
            $url = $this->buildSearchUrl($request->request->all(), 'detail');

            if (!empty($url)) {
                return $this->redirectToRoute('article_index', $url);
            }
        }
        $paginator = $this->get('knp_paginator');

        $articles = $paginator->paginate(
            $em->getRepository('EEMArticleBundle:Article')->MyFindAll($request->query->all()), /* query NOT result */
            $request->query->getInt('page', 1)/* page number */, 20/* limit per page */
        );
        $valeur_article = 0;
        $article_stocks = $em->getRepository('EEMArticleBundle:Article')->chiffreArticle($request->query->all());
        foreach ($article_stocks as $article_stock) {
            $valeur_article += $article_stock->getQte() * $article_stock->getPrixAchat();
        }
        $parametre = $em->getRepository('EEMParametreBundle:Parametre')->find(1);

        $recharge_stocks = $em->getRepository('EEMRechargeBundle:ArticleRecharge')->findAll();
        foreach ($recharge_stocks as $recharge_stock) {
            if ($recharge_stock->getCategory() == 'light') {
                $valeur_article += $recharge_stock->getQte() * ($parametre->getVenteLight() - $parametre->getAchatLight());
            }
            if ($recharge_stock->getCategory() == 'ticket1') {
                $valeur_article += $recharge_stock->getQte() * ($parametre->getVenteTicket1() - $parametre->getAchatTicket1());
            }
            if ($recharge_stock->getCategory() == 'ticket5') {
                $valeur_article += $recharge_stock->getQte() * ($parametre->getVenteTicket5() - $parametre->getAchatTicket5());
            }
            if ($recharge_stock->getCategory() == 'data') {
                $valeur_article += $recharge_stock->getQte() * ($parametre->getVenteData() - $parametre->getAchatData());
            }
        }

        return $this->render('@EEMArticle/article/index.html.twig', array(
            'articles' => $articles,
            'modeles' => $modeles,
            'valeur_article' => $valeur_article,
            'familles' => $em->getRepository('EEMArticleBundle:Famille')->findAll(),
            'marques' => $marques,
        ));
    }

    /**
     * Lists all article entities.
     *
     * @Route("/verif_article_archiver", name="verif_article_archiver")
     * @Method("GET")
     * @Security("has_role('ROLE_USER')")
     */
    public function verifArticleArchiverAction(Request $request)
    {

        $data = $request->request->all()['article_type'];

        $em = $this->getDoctrine()->getManager();
        $articles = [];
        if ($data['famille'] != '' && $data['marque'] != '' && $data['modele'] != '' && $data['color'] != '') {

            $data_request['famille'] = $data['famille'];
            $data_request['marque'] = $data['marque'];
            $data_request['modele'] = $data['modele'];
            $data_request['color'] = $data['color'];
            if ($data['codeABarre'] != '') {
                $data_request['codeABarre'] = $data['codeABarre'];
            }
            $articles = $em->getRepository('EEMArticleBundle:Article')->findBy($data_request);
        }
        return $this->render('@EEMArticle/article/verif_article_archiver.html.twig', array(
            'articles' => $articles,
        ));
    }

    /**
     * Lists all article entities.
     *
     * @Route("/archiver", name="article_index_archiver")
     * @Method("GET")
     * @Security("has_role('ROLE_USER')")
     */
    public function indexArchiverAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $marques = $em->getRepository('EEMArticleBundle:Marque')->findAll();
        if (isset($request->query->all()['famille']) && !empty($request->query->all()['famille'])) {
            $marques = $em->getRepository('EEMArticleBundle:Marque')->findMarques($request->query->all()['famille']);
        }
        $modeles = $em->getRepository('EEMArticleBundle:Modele')->findModele(null);
        if (isset($request->query->all()['marque']) && !empty($request->query->all()['marque'])) {
            $modeles = $em->getRepository('EEMArticleBundle:Modele')->findModele($request->query->all()['marque']);
        }
        if (isset($request->request->all()['btn_search'])) {
            $url = $this->buildSearchUrl($request->request->all(), 'detail');

            if (!empty($url)) {
                return $this->redirectToRoute('article_index_archiver', $url);
            }
        }
        $paginator = $this->get('knp_paginator');

        $articles = $paginator->paginate(
            $em->getRepository('EEMArticleBundle:Article')->MyFindAllArchive($request->query->all()), /* query NOT result */
            $request->query->getInt('page', 1)/* page number */, 20/* limit per page */
        );
        $valeur_article = 0;
        $article_stocks = $em->getRepository('EEMArticleBundle:Article')->chiffreArticleArchive($request->query->all());
        foreach ($article_stocks as $article_stock) {
            $valeur_article += $article_stock->getQte() * $article_stock->getPrixAchat();
            $valeur_article += $article_stock->getQteGros() * $article_stock->getPrixAchatGros();
        }


        return $this->render('@EEMArticle/article/index_archive.html.twig', array(
            'articles' => $articles,
            'modeles' => $modeles,
            'valeur_article' => $valeur_article,
            'familles' => $em->getRepository('EEMArticleBundle:Famille')->findAll(),
            'marques' => $marques,
        ));
    }

    /**
     * Lists all article entities.
     *
     * @Route("/gros", name="article_gros_index")
     * @Method("GET")
     * @Security("has_role('ROLE_USER')")
     */
    public function indexGrosAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $marques = $em->getRepository('EEMArticleBundle:Marque')->findAll();
        if (isset($request->query->all()['famille']) && !empty($request->query->all()['famille'])) {
            $marques = $em->getRepository('EEMArticleBundle:Marque')->findMarques($request->query->all()['famille']);
        }
        $modeles = $em->getRepository('EEMArticleBundle:Modele')->findModele(null);
        if (isset($request->query->all()['marque']) && !empty($request->query->all()['marque'])) {
            $modeles = $em->getRepository('EEMArticleBundle:Modele')->findModele($request->query->all()['marque']);
        }
        if (isset($request->request->all()['btn_search'])) {
            $url = $this->buildSearchUrl($request->request->all(), 'gros');

            if (!empty($url)) {
                return $this->redirectToRoute('article_gros_index', $url);
            }
        }
        $array_article_gros = [];
        $achat_gros = $em->getRepository('EEMAchatBundle:Achat')->findAll();
        foreach ($achat_gros as $achatGros) {
            if ($achatGros->getType() == 'gros') {
                foreach ($achatGros->getLigneAchats() as $ligneAchat) {
                    $array_article_gros[] = $ligneAchat->getArticle()->getId();
                }
            }
        }
        $array_article_gros = array_unique($array_article_gros);
        $paginator = $this->get('knp_paginator');

        $articles = $paginator->paginate(
            $em->getRepository('EEMArticleBundle:Article')->chiffreArticleGros($request->query->all(), $array_article_gros), /* query NOT result */
            $request->query->getInt('page', 1)/* page number */, 20/* limit per page */
        );

        $valeur_article = 0;
        $article_stocks = $em->getRepository('EEMArticleBundle:Article')->chiffreArticleGros($request->query->all(), $array_article_gros);
        foreach ($article_stocks as $article_stock) {
            $valeur_article += $article_stock->getQteGros() * $article_stock->getPrixAchatGros();
        }

        return $this->render('@EEMArticle/article/index_gros.html.twig', array(
            'articles' => $articles,
            'modeles' => $modeles,
            'valeur_article' => $valeur_article,
            'familles' => $em->getRepository('EEMArticleBundle:Famille')->findAll(),
            'marques' => $marques,
        ));
    }


    /**
     * Lists all marque entities.
     *
     * @Route("/url_list_modele_ajax", name="url_list_modele_ajax")
     * @Method({"GET", "POST"})
     * @Security("has_role('ROLE_USER')")
     */
    public function listModeleAjaxAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $marque = $request->request->all()['marque'];

        $modeles = $em->getRepository('EEMArticleBundle:Modele')->findModele($marque);

        return $this->render('@EEMArticle/article/list_modele_ajax.html.twig', array(
            'modeles' => $modeles,
        ));
    }

    /**
     * Creates a new article entity.
     *
     * @Route("/article_ligne_vente", name="article_ligne_vente")
     * @Method({"GET", "POST"})
     */
    public function articleLigneVenteAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $id = $request->request->get('article');
        $type = $request->request->get('type');
        $article = $em->getRepository('EEMArticleBundle:Article')->find($id);

        if ($type == 'gros') {
            $tab_json['prix_final'] = $article->getPrixVenteGros();
            $tab_json['prix_achat'] = $article->getPrixAchatGros();
            $tab_json['qteDispo'] = $article->getQteGros()==''? 0 : $article->getQteGros();
        }
        if ($type == 'transfert') {
            $tab_json['prix_final'] = $article->getPrixFinal();
            $tab_json['prix_achat'] = $article->getPrixVenteGros();
            $tab_json['qteDispo'] = $article->getQteGros();
        }
        if ($type == 'detail') {
            $tab_json['prix_final'] = $article->getPrixFinal();
            $tab_json['prix_achat'] = $article->getPrixAchat();
            $tab_json['qteDispo'] = $article->getQte();
        }
        if ($type == 'achatmagasin') {
            $tab_json['prix_final'] = $article->getPrixAchatGros();
            $tab_json['prix_achat'] = $article->getPrixVenteGros();
            $tab_json['qteDispo'] = $article->getQteGros();
        }
        if ($type == 'ventemagasin') {
            $tab_json['prix_final'] = $article->getPrixAchatMagasin();
            $tab_json['prix_achat'] = $article->getPrixAchatMagasin();
            $tab_json['qteDispo'] = $article->getQteMagasin();
        }
        $tab_json['nom'] = $article->getArticleComplet();
        $tab_json['article_id'] = $article->getId();
        return new Response(json_encode($tab_json));
    }

    /**
     * Creates a new article entity.
     *
     * @Route("/article_ligne_piece", name="article_ligne_piece")
     * @Method({"GET", "POST"})
     */
    public function articleLignePieceAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $id = $request->request->get('article');
        $article = $em->getRepository('EEMArticleBundle:Article')->find($id);

        $tab_json['prix_vente'] = $article->getPrixFinal();
        $tab_json['prix_achat'] = $article->getPrixAchat();
        $tab_json['qteDispo'] = $article->getQte();
        $tab_json['code_bare'] = $article->getCodeABarre();
        $tab_json['nom_article'] = $article->getArticleComplet();

        return new Response(json_encode($tab_json));
    }

    /**
     * Creates a new article entity.
     *
     * @Route("/article_ligne_piece_code_bare", name="article_ligne_piece_code_bare")
     * @Method({"GET", "POST"})
     */
    public function articleLignePieceCodeBareAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $code_bare = $request->request->get('code_bare');
        $article = $em->getRepository('EEMArticleBundle:Article')->findOneBy(['codeABarre' => $code_bare]);

        if ($article) {
            $tab_json['code_bare'] = $article->getCodeABarre();
            $tab_json['prix_vente'] = $article->getPrixFinal();
            $tab_json['prix_achat'] = $article->getPrixAchat();
            $tab_json['qteDispo'] = $article->getQte();
            $tab_json['article'] = $article->getId();
            $tab_json['nom_article'] = $article->getArticleComplet();
        } else {
            $tab_json = [];
        }

        return new Response(json_encode($tab_json));
    }

    /**
     * Creates a new article entity.
     *
     * @Route("/recup_article_ajax", name="recup_article_ajax")
     * @Method({"GET", "POST"})
     */
    public function recupArticleAjaxAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $code_barre = $request->request->get('code_barre');
        $type = $request->request->get('type');
        $article = $em->getRepository('EEMArticleBundle:Article')->findOneBy(['codeABarre' => $code_barre]);
        if ($article) {
            if ($type == 'transfert') {
                $tab_json['prix_final'] = $article->getPrixFinal();
                $tab_json['prix_achat'] = $article->getPrixVenteGros();
                $tab_json['qteDispo'] = $article->getQteGros();
            }
            if ($type == 'gros') {
                $tab_json['prix_final'] = $article->getPrixVenteGros();
                $tab_json['prix_achat'] = $article->getPrixAchatGros();
                $tab_json['qteDispo'] = $article->getQteGros();
            }
            if ($type == 'detail') {
                $tab_json['prix_final'] = $article->getPrixFinal();
                $tab_json['prix_achat'] = $article->getPrixAchat();
                $tab_json['qteDispo'] = $article->getQte();
            }
            if ($type == 'achatmagasin') {
                $tab_json['prix_final'] = $article->getPrixAchatGros();
                $tab_json['prix_achat'] = $article->getPrixVenteGros();
                $tab_json['qteDispo'] = $article->getQteGros();
            }
            if ($type == 'ventemagasin') {
                $tab_json['prix_final'] = $article->getPrixAchatMagasin();
                $tab_json['prix_achat'] = $article->getPrixAchatMagasin();
                $tab_json['qteDispo'] = $article->getQteMagasin();
            }
            $tab_json['reponse'] = 'oui';
            $tab_json['nom'] = $article->getArticleComplet();
            $tab_json['article_id'] = $article->getId();
        } else {
            $tab_json = [
                'reponse' => 'non',
            ];
        }
        return new Response(json_encode($tab_json));
    }

    /**
     * Creates a new article entity.
     *
     * @Route("/recup_type_article", name="recup_type_article")
     * @Method({"GET", "POST"})
     */
    public function recupTypeArticleAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        //print_r( $request->request->all());
        $famille_id = $request->request->get('famille_id');
        //echo $famille_id."--";
        $famille = $em->getRepository('EEMArticleBundle:Famille')->find($famille_id);
        if ($famille->getPieceRechange()) {
            $tab_json = [
                'reponse' => 'oui'
            ];
        } else {
            $tab_json = [
                'reponse' => 'non'
            ];
        }
        return new Response(json_encode($tab_json));
    }

    /**
     * Creates a new article entity.
     *
     * @Route("/new", name="article_new")
     * @Method({"GET", "POST"})
     * @Security("has_role('ROLE_ADMIN')")
     */
    public function newAction(Request $request)
    {
        $article = new Article();
        $form = $this->createForm('EEM\ArticleBundle\Form\ArticleType', $article, ['type_form' => 'add']);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            if ($request->request->all()['article_type']['codeABarre'] == '') {
                $article->setCodeABarre($this->genererBarCode());
            }
            $em->persist($article);
            $em->flush();
            $bar_code = $article->getCodeABarre();
            $generator = new BarcodeGeneratorPNG();
            file_put_contents($this->getParameter('bar_code') . '/' . $bar_code . '.png', $generator->getBarcode($bar_code, $generator::TYPE_CODE_93, 3, 50, [0, 0, 0]));

            $this->addFlash('success', 'Article ajouté avec succès.');

            return $this->redirectToRoute('article_show', array('id' => $article->getId()));
        }

        return $this->render('@EEMArticle/article/new.html.twig', array(
            'article' => $article,
            'form' => $form->createView(),
        ));
    }

    /**
     * Afficher la page 1.
     *
     * @Route("/{id}/imprimer-bar-code", name="imprimer_bar_code")
     * @Method({"GET", "POST"})
     */
    public function imprimerBarCodeAction(Article $article, Request $request)
    {
        $data = $request->query->all();
        $nb_ligne = 1;
        if (isset($data['nb_ligne']) && !empty($data['nb_ligne'])) {
            $nb_ligne = $data['nb_ligne'];
        }
        $nb_colonne = 1;
        if (isset($data['nb_colonne']) && !empty($data['nb_colonne'])) {
            $nb_colonne = $data['nb_colonne'];
        }
        $nb_code = 80;
        if (isset($data['nb_code']) && !empty($data['nb_code'])) {
            $nb_code = $data['nb_code'];
        }
        $html = $this->renderView('@EEMArticle/article/imprimer_barCode.html.twig', [
            'article' => $article,
            'nb_code' => $nb_code,
            'nb_ligne' => $nb_ligne,
            'nb_colonne' => $nb_colonne,
            'server' => 'http://' . $_SERVER['HTTP_HOST'],
        ]);
        $html2pdf = new \Spipu\Html2Pdf\Html2Pdf('P', 'A4', 'fr', true, 'UTF-8', array(10, 10, 10, 10));
        $html2pdf->pdf->SetDisplayMode('fullpage');
        $html2pdf->writeHTML($html);
        $html2pdf->output('barCode.pdf');
    }

    /**
     * Finds and displays a article entity.
     *
     * @Route("/{id}", name="article_show")
     * @Method("GET")
     * @Security("has_role('ROLE_USER')")
     */
    public function showAction(Article $article)
    {
        $deleteForm = $this->createDeleteForm($article);

        return $this->render('@EEMArticle/article/show.html.twig', array(
            'article' => $article,
            'delete_form' => $deleteForm->createView(),
        ));
    }

    /**
     * Finds and displays a article entity.
     *
     * @Route("/{id}/archiver", name="article_archiver")
     * @Method("GET")
     * @Security("has_role('ROLE_ADMIN')")
     */
    public function archiverAction(Article $article)
    {
        $deleteForm = $this->createDeleteForm($article);

        return $this->render('@EEMArticle/article/archiver.html.twig', array(
            'article' => $article,
            'delete_form' => $deleteForm->createView(),
        ));
    }

    /**
     * Finds and displays a article entity.
     *
     * @Route("/{id}/article_valid_archiver", name="article_valid_archiver")
     * @Method("GET")
     * @Security("has_role('ROLE_ADMIN')")
     */
    public function validerArchiverAction(Article $article)
    {
        $article->setArchiver(true);
        $this->getDoctrine()->getManager()->flush();
        $this->addFlash('success', 'Article archivé avec succès.');
        return $this->redirectToRoute('article_show', array('id' => $article->getId()));
    }

    /**
     * Finds and displays a article entity.
     *
     * @Route("/{id}/article_restaurer", name="article_restaurer")
     * @Method("GET")
     * @Security("has_role('ROLE_ADMIN')")
     */
    public function restaurerArticleAction(Article $article)
    {
        $article->setArchiver(false);
        $this->getDoctrine()->getManager()->flush();
        $this->addFlash('success', 'Article restauré avec succès.');
        return $this->redirectToRoute('article_show', array('id' => $article->getId()));
    }

    /**
     * Displays a form to edit an existing article entity.
     *
     * @Route("/{id}/edit", name="article_edit")
     * @Method({"GET", "POST"})
     * @Security("has_role('ROLE_ADMIN')")
     */
    public function editAction(Request $request, Article $article)
    {
        $deleteForm = $this->createDeleteForm($article);
        $editForm = $this->createForm('EEM\ArticleBundle\Form\ArticleType', $article, ['type_form' => 'edit']);
        $editForm->handleRequest($request);

        if ($editForm->isSubmitted() && $editForm->isValid()) {
            if ($request->request->all()['article_type']['codeABarre'] == '') {
                $article->setCodeABarre($this->genererBarCode());
            }
            $this->getDoctrine()->getManager()->flush();
            $bar_code = $article->getCodeABarre();
            $generator = new BarcodeGeneratorPNG();
            file_put_contents($this->getParameter('bar_code') . '/' . $bar_code . '.png', $generator->getBarcode($bar_code, $generator::TYPE_CODE_93, 3, 50, [0, 0, 0]));

            $this->addFlash('success', 'Article modifié avec succès.');
            return $this->redirectToRoute('article_show', array('id' => $article->getId()));
        }
        return $this->render('@EEMArticle/article/edit.html.twig', array(
            'article' => $article,
            'edit_form' => $editForm->createView(),
            'delete_form' => $deleteForm->createView(),
        ));
    }

    /**
     * Deletes a article entity.
     *
     * @Route("/{id}/delete", name="article_delete")
     * @Method("DELETE")
     * @Security("has_role('ROLE_ADMIN')")
     */
    public function deleteAction(Request $request, Article $article)
    {
        $form = $this->createDeleteForm($article);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->remove($article);
            $em->flush();
            $this->addFlash('success', 'Famille article supprimée avec succès.');
        }

        return $this->redirectToRoute('article_index');
    }

    /**
     * Creates a form to delete a article entity.
     *
     * @param Article $article The article entity
     *
     * @return \Symfony\Component\Form\Form The form
     */
    private function createDeleteForm(Article $article)
    {
        return $this->createFormBuilder()
            ->setAction($this->generateUrl('article_delete', array('id' => $article->getId())))
            ->setMethod('DELETE')
            ->getForm();
    }

    private function buildSearchUrl($data, $type)
    {
        $url['type'] = $type;
        foreach ($data as $k => $v) {
            if (isset($data['famille']) && !empty($data['famille'])) {
                $url['famille'] = $data['famille'];
            }
            if (isset($data['marque']) && !empty($data['marque'])) {
                $url['marque'] = $data['marque'];
            }
            if (isset($data['modele']) && !empty($data['modele'])) {
                $url['modele'] = $data['modele'];
            }
            if (isset($data['stock']) && !empty($data['stock'])) {
                $url['stock'] = $data['stock'];
            }
            if (isset($data['barcode']) && !empty($data['barcode'])) {
                $url['barcode'] = $data['barcode'];
            }
        }
        return $url;
    }

    function genererBarCode()
    {
        //$caracteres = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $caracteres = '0123456789';
        $longueurMax = strlen($caracteres);
        $chaineAleatoire = '';
        for ($i = 0; $i < 13; $i++) {
            $chaineAleatoire .= $caracteres[rand(0, $longueurMax - 1)];
        }
        return $chaineAleatoire;
    }
}

Zerion Mini Shell 1.0