<?php
namespace App\Controller\ajax\privado\Produccion;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
use Doctrine\Common\Annotations\AnnotationReader;
use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
use Symfony\Component\Serializer\NameConverter\MetadataAwareNameConverter;
use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
use App\Repository\Produccion\ProcesoRepository;
use App\Form\Filter\Produccion\ProcesoFilterType;
use App\Utils\CustomFilterAdv;
/**
* @Route("/proceso", name="proceso_")
*
*/
class AjaxProcesoController extends AbstractController
{
private $trans;
private $serializer;
private $repo;
public function __construct(ProcesoRepository $repo)
{
$this->repo = $repo;
$classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
$metadataAwareNameConverter = new MetadataAwareNameConverter($classMetadataFactory);
$this->serializer = new Serializer(
[
new DateTimeNormalizer(array('datetime_format' => 'd-m-Y H:i')),
new ObjectNormalizer($classMetadataFactory, $metadataAwareNameConverter)
],
[new JsonEncoder()]
);
}
/**
* @Route("/lista", name="lista", methods={"GET", "POST"})
*/
public function listaAll(Request $request)
{
$semafor = false;
$mensaje = $html = '';
$object = [];
if($request !== null){
$datatables = $request->request;
$draw = intval($request->request->get('draw'));
$start = $request->request->get('start');
$length = $request->request->get('length');
$search = $request->request->get('search');
$orders = $request->request->get('order')[0]['dir'];
$columns = $request->request->get('columns');
$default_values = [ 'sort' => 'proceso.id' , 'order' => 'DESC' , 'page' => 1, 'limit' => 12 ];
$filtro = new CustomFilterAdv($request, $default_values, 'proceso_filtro');
$data_Sesio = $filtro->checkFiltroForm();
$form_filtro = $this->createForm(ProcesoFilterType::class, $data_Sesio);
$data = $form_filtro->handleRequest($request)->getData();
$data = $datatables->get('search');
switch($request->get('order')[0]['column']){
case 0: $order = 'proceso.id'; break;
case 1: $order = 'proceso.ProCodigo'; break;
case 2: $order = 'proceso.ProCountFases'; break;
case 3: $order = 'proceso.ProTipo'; break;
case 4: $order = 'proceso.ProCountFases'; break;
case 5: $order = 'proceso.ProEnabled'; break;
}
$limit = ($datatables->get('length') == '-1' ? 9999999999 : $datatables->get('length') );
$page = ($datatables->get('start') / $limit + 1);
$results = $this->repo->getList($search, $page, $limit, $order, $orders);
if($results){
$semafor = true;
$data = $this->serializer->normalize($results['results'], null, ['groups' => 'lista']);
}
$object = array(
"draw" => $datatables->get('draw'),
"recordsTotal" => $results['count'],
"recordsFiltered" => $results['count'],
'data' => $data,
'valid' => $semafor
);
}
return new Response($this->serializer->serialize($object, "json"), ($semafor ? Response::HTTP_OK : Response::HTTP_BAD_REQUEST));
}
}