%PDF- %PDF-
Mini Shell

Mini Shell

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

<?php

namespace EEM\MaintenanceBundle\Controller;

use EEM\MaintenanceBundle\Entity\Maintenance;
use EEM\MaintenanceBundle\Entity\MaintenancePiece;
use EEM\MaintenanceBundle\Entity\PieceRechange;
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;
use Picqer\Barcode\BarcodeGeneratorHTML;
use EEM\FonctionnaliteBundle\Service\HistoriqueService;

/**
 * Maintenance controller.
 *
 * @Route("/admin/maintenance")
 */
class MaintenanceController extends Controller
{
    /**
     * Lists all maintenance entities.
     *
     * @Route("/", name="maintenance_index")
     * @Method("GET")
     * @Security("has_role('ROLE_USER')")
     */
    public function indexAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $form = $this->createForm('EEM\MaintenanceBundle\Form\MaintenanceSearchType');
        $form->handleRequest($request);
        if ($form->isSubmitted()) {
            $url = $this->buildSearchUrl($request->request->all());

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

        $maintenances = $paginator->paginate(
            $em->getRepository('EEMMaintenanceBundle:Maintenance')->MyFindAll($request->query->all()), /* query NOT result */
            $request->query->getInt('page', 1)/* page number */, 10/* limit per page */
        );
        return $this->render('@EEMMaintenance/maintenance/index.html.twig', array(
            'maintenances' => $maintenances,
            'form' => $form->createView(),
        ));
    }

    /**
     * Lists all maintenance entities.
     *
     * @Route("/suivi", name="maintenance_suivi")
     * @Method("GET")
     * @Security("has_role('ROLE_USER')")
     */
    public function suiviAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $maintenances = $em->getRepository('EEMMaintenanceBundle:Maintenance')->findAll();
        $ventes = $em->getRepository('EEMVenteBundle:Vente')->findAll();
        $tab_suivi = [];
        foreach ($maintenances as $maintenance) {
            $date = strtotime($maintenance->getDateReception()->format('Y-m-d'));
            foreach ($maintenance->getMaintenancePieces() as $maintenance_piece) {
                if ($maintenance_piece->getArticle()) {
                    $name = $maintenance_piece->getArticle()->getArticleComplet();
                } else {
                    $name = $maintenance_piece->getService();
                }
                $tab_suivi[$date][] = [
                    'name' => $name,
                    'prixAchat' => $maintenance_piece->getPrixAchat(),
                    'prixVente' => $maintenance_piece->getPrixVente(),
                ];
            }
        }
        foreach ($ventes as $vente) {
            $date = strtotime($vente->getDateVente()->format('Y-m-d'));
            foreach ($vente->getLigneVentes() as $ligneVente) {
                if ($ligneVente->getArticle()->getFamille()->getPieceRechange() == true) {
                    $tab_suivi[$date][] = [
                        'name' => $ligneVente->getArticle()->getArticleComplet(),
                        'qte' => $ligneVente->getQte(),
                        'prixAchat' => $ligneVente->getPrixAchat(),
                        'prixVente' => $ligneVente->getPrixVente(),
                    ];
                }
            }
        }
        krsort($tab_suivi);
        return $this->render('@EEMMaintenance/maintenance/suivi.html.twig', array(
            'maintenances' => $maintenances,
            'tab_suivi' => $tab_suivi,
        ));
    }

    /**
     * Creates a new maintenance entity.
     *
     * @Route("/new", name="maintenance_new")
     * @Method({"GET", "POST"})
     * @Security("has_role('ROLE_USER')")
     */
    public function newAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $maintenance = new Maintenance();
        $form = $this->createForm('EEM\MaintenanceBundle\Form\MaintenanceType', $maintenance);
        $form->handleRequest($request);
        $data = $request->request->all();
        $tab_piece = [];
        $nb_err = 0;
        //echo "<pre>".print_r($data,1)."</pre>";
        if (isset($data['index']) && !empty($data['index'])) {
            for ($i = 0; $i < $data['index']; $i++) {
                if (isset($data['nom_piece_' . $i])) {
                    $tab_piece[$i]['id_maintenance_piece'] = '';
                    $tab_piece[$i]['id'] = $data['id_piece_' . $i];
                    $tab_piece[$i]['nom']['val'] = $data['nom_piece_' . $i];
                    $tab_piece[$i]['prix_vente']['val'] = $data['prix_vente_' . $i];
                    $tab_piece[$i]['prix_achat']['val'] = $data['prix_achat_' . $i];
                    if (empty($data['nom_piece_' . $i])) {
                        $tab_piece[$i]['nom']['err'] = 1;
                        $nb_err++;
                    }
                    if (empty($data['prix_vente_' . $i]) || in_array($data['prix_vente_' . $i], ['0.000', '0'])) {
                        $tab_piece[$i]['prix_vente']['err'] = 1;
                        $nb_err++;
                    }
                }
            }
        }

        if ($form->isSubmitted() && $form->isValid() && $nb_err == 0) {
            $maintenance->setBarCode($this->genererBarCode());
            $em->persist($maintenance);
            $em->flush();
            $ligne_benefice = 0;
            $historiqueService=new HistoriqueService($em);
            foreach ($tab_piece as $ligne_piece) {
                if ($ligne_piece['nom']['val'] != '' && $ligne_piece['prix_vente']['val'] != '') {
                    $maintenance_piece = new MaintenancePiece();
                    if ($ligne_piece['id'] != '') {
                        $article = $em->getRepository('EEMArticleBundle:Article')->find($ligne_piece['id']);
                        $maintenance_piece->setArticle($article);
                        $maintenance_piece->setService(null);
                        $article->setQte($article->getQte() - 1);

                    } else {
                        $maintenance_piece->setArticle(null);
                        $maintenance_piece->setService($ligne_piece['nom']['val']);
                    }
                    $maintenance_piece->setPrixVente($ligne_piece['prix_vente']['val']);
                    $maintenance_piece->setPrixAchat($ligne_piece['prix_achat']['val']);
                    $ligne_benefice += floatval($ligne_piece['prix_vente']['val']) - floatval($ligne_piece['prix_achat']['val']);
                    $maintenance_piece->setMaintenance($maintenance);
                    $em->persist($maintenance_piece);
                    $em->flush();
                    if($maintenance_piece->getArticle()){
                        $historiqueService->HistoriqueMaintenance($article,$maintenance_piece->getId(),'Pièce de rechange utilisé',1);
                    }
                }
            }

            $reste_payer = floatval($maintenance->getPrixVente()) - floatval($maintenance->getAvance());
            $maintenance->setRestePayer($reste_payer);
            $maintenance->setBenefice($ligne_benefice);
            $em->flush();

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

        return $this->render('@EEMMaintenance/maintenance/new.html.twig', array(
            'maintenance' => $maintenance,
            'tab_piece' => $tab_piece,
            'articles' => $em->getRepository('EEMArticleBundle:Article')->recherchePieceRechange(),
            'form' => $form->createView(),
        ));
    }

    /**
     * Finds and displays a maintenance entity.
     *
     * @Route("/add_ligne_piece", name="add_ligne_piece")
     * @Method("GET")
     * @Security("has_role('ROLE_USER')")
     */
    public function addLignePieceAction()
    {

        return $this->render('@EEMMaintenance/maintenance/add_ligne_piece_rechange.html.twig', array());
    }

    /**
     * Creates a new article entity.
     *
     * @Route("/recup_maintenance_barcode", name="recup_maintenance_barcode")
     * @Method({"GET", "POST"})
     */
    public function recupMaintenanceBarcodeAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $code_barre = $request->request->get('code_barre');
        $maintenance = $em->getRepository('EEMMaintenanceBundle:Maintenance')->findOneBy(['barCode' => $code_barre]);
        if ($maintenance) {
            if ($maintenance->getDateSortie()) {
                $tab_json = [
                    'reponse' => 'sortie',
                    'date_sortie' => $maintenance->getDateSortie()->format('d-m-Y'),
                ];
            } else {
                $maintenance->setDateSortie(new \DateTime());
                $em->flush();
                $article = $maintenance->getMarque() . ' ' . $maintenance->getModele();
                if ($maintenance->getNumSerie() != '') {
                    $article .= ' <small>[' . $maintenance->getNumSerie() . ']</small>';
                }
                $tab_json = [
                    'reponse' => 'oui',
                    'reste_payer' => $maintenance->getRestePayer(),
                    'client' => $maintenance->getNomClient(),
                    'article' => $article,
                ];
            }
        } else {
            $tab_json = [
                'reponse' => 'non',
            ];
        }
        return new Response(json_encode($tab_json));
    }

    /**
     * Lists all locataire entities.
     *
     * @Route("/imprimer-recu/{id}", name="maintenance_print_recu")
     * @Method("GET")
     * @Security("has_role('ROLE_USER')")
     */
    public function uploadPdfAction(Maintenance $maintenance)
    {
        //header("Content-type: application/force-download");
        //header('Content-Disposition: attachment; filename=' . rand(1000, 9999) . '.pdf');
        $generator = new BarcodeGeneratorHTML();

        $barcode = $generator->getBarcode($maintenance->getBarCode(), $generator::TYPE_CODE_128);

        $html = $this->renderView('@EEMMaintenance/maintenance/generer_recu.html.twig', [
            'maintenance' => $maintenance,
            'liste_panne' => $maintenance->liste_panne(),
            'barcode' => $barcode,
            'server' => 'http://' . $_SERVER['HTTP_HOST'],
        ]);
        $html2pdf = new Html2Pdf('P', 'A4', 'fr');

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


        //readfile($this->getParameter('pdf_locataires') . '/fiche_' . $traite->getId() . '.pdf');

    }

    /**
     * Finds and displays a maintenance entity.
     *
     * @Route("/{id}", name="maintenance_show")
     * @Method("GET")
     * @Security("has_role('ROLE_USER')")
     */
    public function showAction(Maintenance $maintenance)
    {
        $deleteForm = $this->createDeleteForm($maintenance);
        $generator = new BarcodeGeneratorHTML();

        $barcode = $generator->getBarcode($maintenance->getBarCode(), $generator::TYPE_CODE_128);

        return $this->render('@EEMMaintenance/maintenance/show.html.twig', array(
            'maintenance' => $maintenance,
            'liste_panne' => $maintenance->liste_panne(),
            'barcode' => $barcode,
            'delete_form' => $deleteForm->createView(),
        ));
    }

    /**
     * Finds and displays a maintenance entity.
     *
     * @Route("/{id}/emis", name="maintenance_emis")
     * @Method("GET")
     * @Security("has_role('ROLE_USER')")
     */
    public function emettreMaintenanceAction(Maintenance $maintenance)
    {
        $em = $this->getDoctrine()->getManager();
        $maintenance->setDateSortie(new \DateTime());
        $em->flush();
        return $this->redirectToRoute('maintenance_index');
    }

    /**
     * Displays a form to edit an existing maintenance entity.
     *
     * @Route("/{id}/edit", name="maintenance_edit")
     * @Method({"GET", "POST"})
     * @Security("has_role('ROLE_USER')")
     */
    public function editAction(Request $request, Maintenance $maintenance)
    {
        if ($maintenance->getDateSortie()) {
            return $this->redirectToRoute('maintenance_show', array('id' => $maintenance->getId()));
        }
        $em = $this->getDoctrine()->getManager();

        $historiqueService=new HistoriqueService($em);
        $deleteForm = $this->createDeleteForm($maintenance);
        $editForm = $this->createForm('EEM\MaintenanceBundle\Form\MaintenanceType', $maintenance);
        $editForm->handleRequest($request);
        $data = $request->request->all();
        $tab_maintenance_piece_id = [];
        foreach ($maintenance->getMaintenancePieces() as $ligne_piece) {
            $tab_maintenance_piece_id[$ligne_piece->getId()] = $ligne_piece->getId();
        }

        $tab_piece = [];
        $nb_err = 0;
        if (isset($data['index']) && !empty($data['index'])) {
            for ($i = 0; $i < $data['index']; $i++) {
                if (isset($data['nom_piece_' . $i])) {
                    $tab_piece[$i]['id'] = $data['id_piece_' . $i];
                    $tab_piece[$i]['id_maintenance_piece'] = $data['id_maintenance_piece_' . $i];
                    $tab_piece[$i]['nom']['val'] = $data['nom_piece_' . $i];
                    $tab_piece[$i]['prix_vente']['val'] = $data['prix_vente_' . $i];
                    $tab_piece[$i]['prix_achat']['val'] = $data['prix_achat_' . $i];
                    if (empty($data['nom_piece_' . $i])) {
                        $tab_piece[$i]['nom']['err'] = 1;
                        $nb_err++;
                    }
                    if (empty($data['prix_vente_' . $i]) || $data['prix_vente_' . $i] == '0.000' || $data['prix_vente_' . $i] == '0') {
                        $tab_piece[$i]['prix_vente']['err'] = 1;
                        $nb_err++;
                    }
                }
            }
        } else {
            $i = 0;
            foreach ($maintenance->getMaintenancePieces() as $ligne_piece) {
                if ($ligne_piece->getArticle()) {
                    $article = $ligne_piece->getArticle();
                    $tab_piece[$i]['id'] = $article->getId();
                    $tab_piece[$i]['nom']['val'] = $article->getArticleComplet();
                } else {
                    $tab_piece[$i]['id'] = '';
                    $tab_piece[$i]['nom']['val'] = $ligne_piece->getService();
                }
                $tab_piece[$i]['prix_vente']['val'] = $ligne_piece->getPrixVente();
                $tab_piece[$i]['prix_achat']['val'] = $ligne_piece->getPrixAchat();
                $tab_piece[$i]['id_maintenance_piece'] = $ligne_piece->getId();
                $i++;
            }
        }
        if ($editForm->isSubmitted() && $editForm->isValid() && $nb_err == 0) {
            foreach ($tab_piece as $ligne_piece) {
                if (in_array($ligne_piece['id_maintenance_piece'], $tab_maintenance_piece_id)) {
                    unset($tab_maintenance_piece_id[$ligne_piece['id_maintenance_piece']]);
                }
            }

            foreach ($tab_piece as $ligne_piece) {
                if ($ligne_piece['nom']['val'] != '' && $ligne_piece['prix_vente']['val'] != '') {
                    if ($ligne_piece['id_maintenance_piece'] != '') {
                        $maintenance_piece = $em->getRepository('EEMMaintenanceBundle:MaintenancePiece')->find($ligne_piece['id_maintenance_piece']);
                        $old_qte = 1;
                    } else {
                        $maintenance_piece = new MaintenancePiece();
                        $old_qte = 0;
                    }
                    if ($ligne_piece['id'] != '') {
                        $article = $em->getRepository('EEMArticleBundle:Article')->find($ligne_piece['id']);
                        $maintenance_piece->setArticle($article);
                        $maintenance_piece->setService(null);
                        $article->setQte($article->getQte() + $old_qte - 1);
                        if($old_qte==0){
                            $historiqueService->HistoriqueMaintenance($article,$maintenance_piece->getId(),'Pièce de rechange utilisé',1);
                        }
                    } else {
                        $maintenance_piece->setArticle(null);
                        $maintenance_piece->setService($ligne_piece['nom']['val']);
                    }
                    $maintenance_piece->setPrixVente($ligne_piece['prix_vente']['val']);
                    $maintenance_piece->setPrixAchat($ligne_piece['prix_achat']['val']);
                    $maintenance_piece->setMaintenance($maintenance);

                    $em->persist($maintenance_piece);
                    $em->flush();
                }
            }
            foreach ($tab_maintenance_piece_id as $maintenance_piece_id) {
                $maintenance_piece = $em->getRepository('EEMMaintenanceBundle:MaintenancePiece')->find($maintenance_piece_id);
                if ($maintenance_piece->getArticle()) {
                    $piece_rechange = $maintenance_piece->getArticle();
                    $piece_rechange->setQte($piece_rechange->getQte() + 1);
                     $historiqueService->HistoriqueMaintenance($piece_rechange,$maintenance_piece->getId(),'Retour pièce de rechange',1);
                }
                $em->remove($maintenance_piece);
           }
            $em->flush();

            $benefice = 0;
            foreach ($maintenance->getMaintenancePieces() as $maintenancePiece) {
                $benefice += floatval($maintenancePiece->getPrixVente()) - floatval($maintenancePiece->getPrixAchat());
            }
            $reste_payer = floatval($maintenance->getPrixVente()) - floatval($maintenance->getAvance());
            $maintenance->setBenefice($benefice);
            $maintenance->setRestePayer($reste_payer);
            $em->persist($maintenance);
            $em->flush();
            return $this->redirectToRoute('maintenance_show', array('id' => $maintenance->getId()));
        }

        return $this->render('@EEMMaintenance/maintenance/edit.html.twig', array(
            'maintenance' => $maintenance,
            'tab_piece' => $tab_piece,
            'articles' => $em->getRepository('EEMArticleBundle:Article')->recherchePieceRechange(),
            'form' => $editForm->createView(),
            'delete_form' => $deleteForm->createView(),
        ));
    }

    /**
     * Deletes a maintenance entity.
     *
     * @Route("/{id}/delete", name="maintenance_delete")
     * @Method("DELETE")
     * @Security("has_role('ROLE_USER')")
     */
    public function deleteAction(Request $request, Maintenance $maintenance)
    {
        $form = $this->createDeleteForm($maintenance);
        $form->handleRequest($request);
        $em = $this->getDoctrine()->getManager();
        $historiqueService=new HistoriqueService($em);
        if ($form->isSubmitted() && $form->isValid()) {
            foreach ($maintenance->getMaintenancePieces() as $maintenance_piece) {
                if ($maintenance_piece->getArticle()) {
                    $article = $maintenance_piece->getArticle();
                    $article->setQte($article->getQte() + 1);
                    $historiqueService->HistoriqueMaintenance($article,$maintenance_piece->getId(),'Retour pièce de rechange',1);
                }
                $em->flush();
            }
            $em->remove($maintenance);
            $em->flush();
        }

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

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

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

    private function buildSearchUrl($data)
    {
        $url = [];
        foreach ($data as $k => $v) {
            if (isset($data['seach_maintenance']['client']) && !empty($data['seach_maintenance']['client'])) {
                $url['client'] = $data['seach_maintenance']['client'];
            }
        }
        return $url;
    }
}

Zerion Mini Shell 1.0