%PDF- %PDF-
Mini Shell

Mini Shell

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

<?php

namespace EEM\AchatBundle\Controller;

use EEM\AchatBundle\Entity\Achat;
use EEM\AchatBundle\Entity\LigneAchat;
use EEM\AchatBundle\Entity\Reglement;
use EEM\FonctionnaliteBundle\Service\HistoriqueService;
use EEM\FonctionnaliteBundle\Service\TresorieService;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;

/**
 * Achat controller.
 *
 * @Route("/admin/achat")
 * @Security("has_role('ROLE_ADMIN')")
 */
class AchatController extends Controller
{
    /**
     * Creates a new vente entity.
     *
     * @Route("/save_achat_ajax", name="save_achat_ajax")
     * @Method({"GET", "POST"})
     */
    public function saveAchatAjaxAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        //print_r($request->request->all());
        //exit();
        $data = $request->request->all()['add_ligne'];
        $article = $em->getRepository('EEMArticleBundle:Article')->find($data['article']);
        $achat = $em->getRepository('EEMAchatBundle:Achat')->find($data['achat']);
        $ligne_achat = new LigneAchat();
        $ligne_achat->setArticle($article);
        $ligne_achat->setAchat($achat);

        if ($data['quantite'] != '') $quantite = $data['quantite']; else $quantite = 1;
        if ($data['prixAchat'] != '') $prix_achat = $data['prixAchat']; else $prix_achat = '0.000';
        if ($data['prixFinal'] != '') $prix_final = $data['prixFinal']; else $prix_final = '0.000';
        $ligne_achat->setPrixFinal($prix_final);
        $ligne_achat->setPrixAchat($prix_achat);

        $historiqueService=new HistoriqueService($em);
        if ($achat->getType() == 'detail') {
            $ligne_achat->setPrixFinalOld($article->getPrixFinal());
            $ligne_achat->setPrixAchatOld($article->getPrixAchat());
            $article->setPrixFinal($ligne_achat->getPrixFinal());
            $article->setPrixAchat($ligne_achat->getPrixAchat());
            $article->setQte($article->getQte() + $quantite);
            $historiqueService->HistoriqueAchat($article,$achat->getId(),$achat->getType(),'Nouveau achat',$quantite);


            $tresorieService = new TresorieService($em);
            $tresorieService->controleExisteTresorie();
            $tresorieService->mettreAJourTresorie(-($ligne_achat->getPrixAchat()*$quantite));

        }
        if ($achat->getType() == 'gros') {
            $ligne_achat->setPrixVenteGrosOld($article->getPrixVenteGros());
            $ligne_achat->setPrixAchatGrosOld($article->getPrixAchatGros());
            $article->setPrixVenteGros($ligne_achat->getPrixFinal());
            $article->setPrixAchatGros($ligne_achat->getPrixAchat());
            $article->setQteGros($article->getQteGros() + $quantite);
            $historiqueService->HistoriqueAchat($article,$achat->getId(),$achat->getType(),'Nouveau achat',$quantite);
            $tresorieService = new TresorieService($em);
            $tresorieService->controleExisteTresorie();
            $tresorieService->mettreAJourTresorie(-($ligne_achat->getPrixAchat()*$quantite));
        }
        if ($achat->getType() == 'transfert') {
            $ligne_achat->setPrixFinalOld($article->getPrixFinal());
            $ligne_achat->setPrixAchatOld($article->getPrixAchat());
            $article->setPrixFinal($ligne_achat->getPrixFinal());
            $article->setPrixAchat($ligne_achat->getPrixAchat());
            $article->setQte($article->getQte() + $quantite);
            $article->setQteGros($article->getQteGros() - $quantite);
            $historiqueService->HistoriqueTransfert($article,$achat->getId(),'Transfert article',$quantite);
        }



        $ligne_achat->setQte($quantite);
        $em->persist($ligne_achat);

        $em->flush();

        $this->calculChiffreVente();
        $tab['id_ligne_achat'] = $ligne_achat->getId();
        $tab['code_barre'] = $article->getCodeABarre();
        $tab['article'] = $article->getArticleComplet();
        $tab['prixAchat'] = $prix_achat;
        $tab['prixFinal'] = $prix_final;
        $tab['qte'] = $ligne_achat->getQte();

        return new Response(json_encode($tab));
    }
    /**
     * Creates a new vente entity.
     *
     * @Route("/edit_ligne_achat", name="edit_ligne_achat")
     * @Method({"GET", "POST"})
     */
    public function editLigneAchatAction(Request $request)
    {
        $id_ligne_achat = $request->request->get('id_ligne_achat');
        $em = $this->getDoctrine()->getManager();

        $ligne_Achat = $em->getRepository('EEMAchatBundle:LigneAchat')->find($id_ligne_achat);
        $form = $this->createForm('EEM\AchatBundle\Form\AddLigneAchatType');
        return $this->render('@EEMAchat/achat/edit_ajax.html.twig', array(
            'ligne_achat' => $ligne_Achat,
            'form' => $form->createView(),
        ));
    }

    /**
     * Creates a new vente entity.
     *
     * @Route("/delete_ligne_achat", name="delete_ligne_achat")
     * @Method({"GET", "POST"})
     */
    public function deleteLigneAchatAction(Request $request)
    {
        $id_ligne_achat = $request->request->get('id_ligne_achat');
        $em = $this->getDoctrine()->getManager();
        $ligne_achat = $em->getRepository('EEMAchatBundle:LigneAchat')->find($id_ligne_achat);

        $historiqueService=new HistoriqueService($em);
        $article = $ligne_achat->getArticle();
        $achat = $ligne_achat->getAchat();
        if ($achat->getType() == 'detail') {
            $article->setPrixFinal($ligne_achat->getPrixFinalOld());
            $article->setPrixAchat($ligne_achat->getPrixAchatOld());
            $article->setQte($article->getQte() - $ligne_achat->getQte());
            $historiqueService->HistoriqueAchat($article,$achat->getId(),$achat->getType(),'Achat annulé',$ligne_achat->getQte());

            $tresorieService = new TresorieService($em);
            $tresorieService->controleExisteTresorie();
            $tresorieService->mettreAJourTresorie($ligne_achat->getQte()*$ligne_achat->getPrixAchat());
        }
        if ($achat->getType() == 'gros') {
            $article->setPrixVenteGros($ligne_achat->getPrixVenteGrosOld());
            $article->setPrixAchatGros($ligne_achat->getPrixAchatGrosOld());
            $article->setQteGros($article->getQteGros() - $ligne_achat->getQte());
            $historiqueService->HistoriqueAchat($article,$achat->getId(),$achat->getType(),'Achat annulé',$ligne_achat->getQte());
            $tresorieService = new TresorieService($em);
            $tresorieService->controleExisteTresorie();
            $tresorieService->mettreAJourTresorie($ligne_achat->getQte()*$ligne_achat->getPrixAchat());
        }
        if ($achat->getType() == 'transfert') {
            $article->setPrixFinal($ligne_achat->getPrixFinalOld());
            $article->setPrixAchat($ligne_achat->getPrixAchatOld());
            $article->setQte($article->getQte() - $ligne_achat->getQte());
            $article->setQteGros($article->getQteGros() + $ligne_achat->getQte());
            $historiqueService->HistoriqueTransfert($article,$achat->getId(),'Transfert annulé',$ligne_achat->getQte());
        }

        $em->remove($ligne_achat);
        $em->flush();

        $this->calculChiffreVente();
        return new Response('ok');
    }
    /**
     * Creates a new vente entity.
     *
     * @Route("/save_edit_achat_ajax", name="save_edit_achat_ajax")
     * @Method({"GET", "POST"})
     */
    public function saveEditAchatAjaxAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();

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

        $old_article = $request->request->all()['old_article'];
        $old_qte = $request->request->all()['old_qte'];
        $article = $em->getRepository('EEMArticleBundle:Article')->find($data['article']);

        $historiqueService=new HistoriqueService($em);
        $ligne_achat = $em->getRepository('EEMAchatBundle:LigneAchat')->find($data['ligneAchat']);
        $achat=$ligne_achat->getAchat();
        if($ligne_achat->getAchat()->getType()=='detail') {

            if ($data['article'] == $old_article) {
                $article->setQte($article->getQte() - $old_qte);
            } elseif ($data['article'] != $old_article) {
                $old_article = $em->getRepository('EEMArticleBundle:Article')->find($old_article);
                $old_article->setQte($old_article->getQte() - $old_qte);
                $old_article->setPrixAchat($ligne_achat->getPrixAchatOld());
                $old_article->setPrixFinal($ligne_achat->getPrixFinalOld());

                $ligne_achat->setPrixAchatOld($article->getPrixAchat());
                $ligne_achat->setPrixFinalOld($article->getPrixFinal());

            }

            $tresorieService = new TresorieService($em);
            $tresorieService->controleExisteTresorie();
            $tresorieService->mettreAJourTresorie(-($data['quantite']*$data['prixAchat'])+($ligne_achat->getQte()*$ligne_achat->getPrixAchat()));

            $ligne_achat->setArticle($article);
            $ligne_achat->setPrixAchat($data['prixAchat']);
            $ligne_achat->setPrixFinal($data['prixFinal']);
            $ligne_achat->setQte($data['quantite']);

            $article->setQte($article->getQte() + $data['quantite']);
            $article->setPrixAchat($data['prixAchat']);
            $article->setPrixFinal($data['prixFinal']);
            $em->persist($ligne_achat);

            $em->flush();
            $historiqueService->HistoriqueAchat($article,$achat->getId(),$achat->getType(),'Achat modifié',$data['quantite']);
        }

        if($ligne_achat->getAchat()->getType()=='gros') {
            if ($data['article'] == $old_article) {
                $article->setQteGros($article->getQteGros() - $old_qte);
            } elseif ($data['article'] != $old_article) {
                $old_article = $em->getRepository('EEMArticleBundle:Article')->find($old_article);
                $old_article->setQteGros($old_article->getQteGros() - $old_qte);
                $old_article->setPrixAchatGros($ligne_achat->getPrixAchatGrosOld());
                $old_article->setPrixVenteGros($ligne_achat->getPrixVenteGrosOld());

                $ligne_achat->setPrixAchatGrosOld($article->getPrixAchatGros());
                $ligne_achat->setPrixVenteGrosOld($article->getPrixVenteGros());
            }

            $tresorieService = new TresorieService($em);
            $tresorieService->controleExisteTresorie();
            $tresorieService->mettreAJourTresorie(-($data['quantite']*$data['prixAchat'])+($ligne_achat->getQte()*$ligne_achat->getPrixAchat()));


            $ligne_achat->setArticle($article);
            $ligne_achat->setPrixAchat($data['prixAchat']);
            $ligne_achat->setPrixFinal($data['prixFinal']);
            $ligne_achat->setQte($data['quantite']);

            $article->setQteGros($article->getQteGros() + $data['quantite']);
            $article->setPrixAchatGros($data['prixAchat']);
            $article->setPrixVenteGros($data['prixFinal']);
            $em->persist($ligne_achat);

            $em->flush();
            $historiqueService->HistoriqueAchat($article,$achat->getId(),$achat->getType(),'Achat modifié',$data['quantite']);
        }
        if($ligne_achat->getAchat()->getType()=='transfert') {
            if ($data['article'] == $old_article) {
                $article->setQteGros($article->getQteGros() + $old_qte);
                $article->setQte($article->getQte() - $old_qte);
            } elseif ($data['article'] != $old_article) {
                $old_article = $em->getRepository('EEMArticleBundle:Article')->find($old_article);
                $old_article->setQteGros($article->getQteGros() + $old_qte);
                $old_article->setQte($article->getQte() - $old_qte);
                $old_article->setPrixAchat($ligne_achat->getPrixAchatOld());
                $old_article->setPrixFinal($ligne_achat->getPrixFinalOld());

                $ligne_achat->setPrixAchatOld($article->getPrixAchat());
                $ligne_achat->setPrixFinalOld($article->getPrixFinal());
            }

            $ligne_achat->setArticle($article);
            $ligne_achat->setPrixAchat($data['prixAchat']);
            $ligne_achat->setPrixFinal($data['prixFinal']);
            $ligne_achat->setQte($data['quantite']);

            $article->setQte($article->getQte() + $data['quantite']);
            $article->setQteGros($article->getQteGros() - $data['quantite']);
            $article->setPrixAchat($data['prixAchat']);
            $article->setPrixFinal($data['prixFinal']);
            $em->persist($ligne_achat);

            $em->flush();
            $historiqueService->HistoriqueTransfert($article,$achat->getId(),'Transfert modifié',$data['quantite']);
        }

        $this->calculChiffreVente();

        $tab['id_ligne_achat'] = $ligne_achat->getId();
        $tab['code_barre'] = $article->getCodeABarre();
        $tab['article'] = $article->getArticleComplet();
        $tab['prixAchat'] = $data['prixAchat'];
        $tab['prixFinal'] = $data['prixFinal'];
        $tab['qte'] = $ligne_achat->getQte();
        return new Response(json_encode($tab));
    }
    /**
     * Lists all achat entities.
     *
     * @Route("/{type}", name="achat_index")
     * @Method("GET")
     */
    public function indexAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $paginator = $this->get('knp_paginator');

        $data_query = $request->attributes->all();

        if (empty($data_query['type']) || !isset($data_query['type']) || !in_array($data_query['type'], ['detail', 'gros', 'transfert'])) {
            return $this->redirectToRoute('accueil');
        }

        $type = $data_query['type'];

        $achats = $paginator->paginate(
            $em->getRepository('EEMAchatBundle:Achat')->findBy(['type' => $type], ['dateAchat' => 'DESC']), /* query NOT result */
            $request->query->getInt('page', 1)/* page number */, 10/* limit per page */
        );

        return $this->render('@EEMAchat/achat/index.html.twig', array(
            'achats' => $achats,
        ));
    }


    /**
     * Creates a new vente entity.
     *
     * @Route("/{type}/{date}", name="achat_new")
     * @Method({"GET", "POST"})
     */
    public function newDetailAction(Request $request)
    {

        $data_attributes = $request->attributes->all();

        $date_achat = $data_attributes['date'];
        if (empty($data_attributes['type']) || !isset($data_attributes['type']) || !in_array($data_attributes['type'], ['detail', 'gros', 'transfert'])) {
            return $this->redirectToRoute('accueil');
        }
        $em = $this->getDoctrine()->getManager();
        $achats = $em->getRepository('EEMAchatBundle:Achat')->rechercheDate($date_achat,$data_attributes['type'] );
        if (count($achats) == 1) {
            $achat = $achats[0];
        } else {
            $achat = new Achat();
            $achat->setDateAchat(new \DateTime($date_achat));
            $achat->setType($data_attributes['type']);
            $em->persist($achat);
            $em->flush();
        }

        $this->calculChiffreVente();
        if ($data_attributes['type'] == 'detail') {
            return $this->redirectToRoute('achat_detail_show', ['id' => $achat->getId(), 'date' => $date_achat]);
        }
        if ($data_attributes['type'] == 'gros') {
            return $this->redirectToRoute('achat_gros_show', ['id' => $achat->getId(), 'date' => $date_achat]);
        }
        if ($data_attributes['type'] == 'transfert') {
            return $this->redirectToRoute('achat_transfert_show', ['id' => $achat->getId(), 'date' => $date_achat]);
        }
    }

    /**
     * Creates a new vente entity.
     *
     * @Route("/detail/{id}/{date}", name="achat_detail_show")
     * @Route("/gros/{id}/{date}", name="achat_gros_show")
     * @Route("/transfert/{id}/{date}", name="achat_transfert_show")
     * @Method({"GET", "POST"})
     * @Security("has_role('ROLE_USER')")
     */
    public function achatDetailAction(Achat $achat, Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $form = $this->createForm('EEM\AchatBundle\Form\AddLigneAchatType', null, ['type' => $achat->getType()]);
        $ligne_achats = $em->getRepository('EEMAchatBundle:LigneAchat')->findBy(['achat' => $achat->getId()], ['createdAt' => 'desc']);
        $deleteForm = $this->createDeleteForm($achat);

        return $this->render('@EEMAchat/achat/show.html.twig', array(
            'achat' => $achat,
            'ligne_achats' => $ligne_achats,
            'form' => $form->createView(),
            'date_jour' => date('d/m/Y'),
            'delete_form' => $deleteForm->createView(),
        ));
    }




    /**
     * Deletes a achat entity.
     *
     * @Route("/{id}/delete", name="achat_delete")
     * @Method("DELETE")
     */
    public function deleteAction(Request $request, Achat $achat)
    {
        $em = $this->getDoctrine()->getManager();

        $form = $this->createDeleteForm($achat);
        $form->handleRequest($request);
        $historiqueService=new HistoriqueService();
        if ($form->isSubmitted() && $form->isValid()) {
            if ($achat->getType() == 'detail') {
                foreach ($achat->getLigneAchats() as $ligneAchat) {
                    $article = $ligneAchat->getArticle();
                    $article->setQte($article->getQte() - $ligneAchat->getQte());
                    $article->setPrixAchat($ligneAchat->getPrixAchatOld());
                    $article->setPrixFinal($ligneAchat->getPrixFinalOld());

                    $em->flush($article);
                    $historiqueService->HistoriqueAchat($article,$achat->getId(),$achat->getType(),'Transfert annulé',$ligneAchat->getQte());
                }
            }
            if ($achat->getType() == 'gros') {
                foreach ($achat->getLigneAchats() as $ligneAchat) {
                    $article = $ligneAchat->getArticle();
                    $article->setQteGros($article->getQteGros() - $ligneAchat->getQte());
                    $article->setPrixAchatGros($ligneAchat->getPrixAchatGrosOld());
                    $article->setPrixVenteGros($ligneAchat->getPrixVenteGrosOld());

                    $em->flush($article);
                    $historiqueService->HistoriqueAchat($article,$achat->getId(),$achat->getType(),'Transfert annulé', $ligneAchat->getQte());
                 }
            }
            if ($achat->getType() == 'transfert') {
                foreach ($achat->getLigneAchats() as $ligneAchat) {
                    $article = $ligneAchat->getArticle();
                    $article->setQteGros($article->getQteGros() + $ligneAchat->getQte());
                    $article->setQte($article->getQte() - $ligneAchat->getQte());
                    $article->setPrixAchat($ligneAchat->getPrixAchatOld());
                    $article->setPrixFinal($ligneAchat->getPrixFinalOld());

                    $em->flush($article);

                    $historiqueService->HistoriqueTransfert($article,$achat->getId(),'Transfert annulé', $ligneAchat->getQte());
                }
            }
            $em->remove($achat);
            $em->flush();
            $this->calculChiffreVente();
        }

        $this->addFlash('success', 'Achat supprimé avec succès.');
        return $this->redirectToRoute('achat_index', ['type' => $achat->getType()]);
    }

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




    /********************************************************************/
    /**
     * Finds and displays a achat entity.
     *
     * @Route("/{id}", name="achat_show")
     * @Method("GET")
     */
    public function showAction(Achat $achat)
    {
        $deleteForm = $this->createDeleteForm($achat);
        $em = $this->getDoctrine()->getManager();


        $last_achat = $em->getRepository('EEMAchatBundle:Achat')->findOneBy([], ['dateAchat' => 'DESC']);

        $form = $this->createForm('EEM\AchatBundle\Form\AddLigneAchatType');
        $ligne_achats = $em->getRepository('EEMAchatBundle:LigneAchat')->findBy(['achat' => $achat->getId()], ['id' => 'DESC']);

        return $this->render('@EEMAchat/achat/show.html.twig', array(
            'achat' => $achat,
            'form' => $form->createView(),
            'ligne_achats' => $ligne_achats,
            'last_achat' => $last_achat,
            'delete_form' => $deleteForm->createView(),
        ));
    }


    public
    function calculChiffreVente()
    {
        $em = $this->getDoctrine()->getManager();
        $ventes = $em->getRepository('EEMVenteBundle:Vente')->rechercheDate(date('Y-m-d'), 'detail');

        if (count($ventes) == 1) {
            $vente = $ventes[0];

            $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();
            }
            $vente->setChiffreRestant($stock_detail);
            $vente->setChiffreRestantGros($stock_gros);
            $vente->setChiffreRestantMagasin($stock_magasin);
            $em->flush();
        }
    }
}

Zerion Mini Shell 1.0