%PDF- %PDF-
Direktori : /home/emtnaeewxm/www/src/EEM/PieceBundle/Controller/ |
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(); } }