<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
namespace App\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Knp\Component\Pager\PaginatorInterface;
use App\Entity\Clientes;
use App\Form\ClientesType;
/**
* Description of ClientesController
*
* @author joseangelparra
*/
class ClientesController extends AbstractController{
private $params;
public function __construct(ParameterBagInterface $params){
$this->session = new Session();
$this->params = $params;
}
public function index(Request $request, PaginatorInterface $paginator){
if (!$this->getUser() || !is_object($this->getUser())) {
return $this->redirectToRoute('logout');
}
$em = $this->getDoctrine()->getManager();
$s = ($request->get("s") )? $request->get("s") : "";
if($s){
$s_str = " AND c.name LIKE '%".$s."%' OR c.surname LIKE '%".$s."%'";
}else{
$s_str = "";
}
$orden = ($request->get("orden")) ? $request->get("orden") : 'DESC';
$filter = ($request->get("filter")) ? $request->get("filter") : 'id';
$client = new Clientes();
$form = $this->createForm(ClientesType::class,$client,[
'save_lbl'=>'Guardar'
]);
$form->handleRequest($request);
if($form->isSubmitted()){
$client->setDatecreated(new \DateTime());
$client->setIdWp(null);
$client->setStatus(1);
$em->persist($client);
$f = $em->flush();
if($f == null){
$type = 1;
$status = "Cliente añadido correctamente";
}else{
$type = 0;
$status = "Error al añadir el cliente";
}
$this->session->getFlashBag()->add('type', $type);
$this->session->getFlashBag()->add('status', $status);
return $this->redirectToRoute('clientes');
}
$clientes = $em->createQueryBuilder()->select("c")
->from("App\Entity\Clientes","c")
->where("c.id <> '' AND c.status=1 ".$s_str)
->orderBy("c.".$filter,$orden)
->getQuery()->getResult();
$clis = $paginator->paginate(
$clientes, $request->query->getInt('page', 1), 20);
return $this->render('clients/list.html.twig',array(
'clients'=>$clis,
's'=>$s,
"orden"=>$orden,
"form"=>$form->createView()
));
}
public function delete(Request $request){
$em = $this->getDoctrine()->getManager();
$id= $request->get("id");
if($id){
$client = $em->getRepository(Clientes::class)->find($id);
if($client){
$client->setStatus(0);
$client->setEmail('');
$client->setNif('');
$client->setAddress('');
$client->setCp('');
$client->setCity('');
$client->setCountry('');
$client->setPhone('');
$client->setState('');
$em->persist($client);
$f = $em->flush();
if($f == null){
$type = 1;
$status = "Cliente eliminado correctamente";
}else{
$type = 0;
$status = "Error al eliminar el cliente";
}
$this->session->getFlashBag()->add('type', $type);
$this->session->getFlashBag()->add('status', $status);
return $this->redirectToRoute('clientes');
}else{
$type = 0;
$status = "Cliente no existente";
$this->session->getFlashBag()->add('type', $type);
$this->session->getFlashBag()->add('status', $status);
return $this->redirectToRoute('clientes');
}
}else{
$type = 0;
$status = "Error en la petición";
$this->session->getFlashBag()->add('type', $type);
$this->session->getFlashBag()->add('status', $status);
return $this->redirectToRoute('clientes');
}
}
public function detailClient(Request $request, PaginatorInterface $paginator){
$em = $this->getDoctrine()->getManager();
$id = $request->get("id");
$cliente = $em->getRepository(Clientes::class)->find($id);
$ventas = $em->createQueryBuilder()->select("v")
->from("App\Entity\Ventas","v")
->where("v.clientId = :id")
->setParameter("id",$id)
->orderBy("v.date", "DESC")
->getQuery()
->getResult();
$v = $paginator->paginate(
$ventas, $request->query->getInt('page', 1), 10);
$prods_cant = 0;
$prods_res = 0;
foreach($ventas as $vent){
$prods_in = $em->getRepository(\App\Entity\VentaProducts::class)->findBy(array("ventaId"=>$vent->getId()));
foreach($prods_in as $p){
if($vent->getStatus()<3){
$prods_cant = $prods_cant + $p->getQty();
}else{
$prods_res = $prods_res + $p->getQty();
}
}
}
$last_buy = $em->createQueryBuilder()->select('b')
->from('App\Entity\Ventas','b')
->where("b.clientId = :id ")
->setParameter("id",$id)
->orderBy("b.date", "DESC")
->setMaxResults(1)
->getQuery()
->getResult();
return $this->render('clients/detail.html.twig',array(
'client'=>$cliente,
'ventas'=>$v,
'prods_cant'=>$prods_cant,
'prods_res'=>$prods_res,
'last_buy'=>(count($last_buy)>0) ? $last_buy[0] : []
));
}
public function modifyClientData(Request $request){
$em = $this->getDoctrine()->getManager();
$id = $request->get("id");
$datos = $request->request->all();
$client = $em->getRepository(Clientes::class)->find($id);
if($datos && $client){
$client->setName($datos["name"]);
$client->setSurname($datos["surname"]);
$client->setEmail($datos["email"]);
$client->setNif($datos["nif"]);
$client->setAddress($datos["address"]);
$client->setCp($datos["cp"]);
$client->setCity($datos["city"]);
$client->setState($datos["state"]);
$client->setCountry($datos["country"]);
$client->setPhone($datos["phone"]);
$em->persist($client);
$f = $em->flush();
if($f == null){
$type = 1;
$status = "Cliente editado correctamente";
}else{
$type = 0;
$status = "Error al editar el cliente";
}
}else{
$type = 0;
$status = "Datos incorrectos o no se encontro cliente";
}
$this->session->getFlashBag()->add('type', $type);
$this->session->getFlashBag()->add('status', $status);
return $this->redirectToRoute('detail_client',array("id"=>$id));
}
}