<?php
/**
* Created by PhpStorm.
* User: carlosmb
* Date: 14/11/2018
* Time: 10:12
*/
namespace App\Controller;
use App\Entity\Historico;
use App\Form\HistoricoType;
use App\Repository\ComponenteRepository;
use App\Service\ColorService;
use App\Service\ComponenteService;
use App\Service\FormulaService;
use App\Service\UsuarioService;
use FOS\RestBundle\Controller\AbstractFOSRestController;
use FOS\RestBundle\Controller\Annotations as Rest;
use JMS\Serializer\SerializationContext;
use App\Service\HistoricoService;
use phpDocumentor\Reflection\DocBlock\Serializer;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use JMS\Serializer\SerializerBuilder;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
class HistoricoController extends AbstractFOSRestController
{
private $serviceHistorico;
private $serviceFomula;
private $serviceComponent;
private $serviceColor;
private $serviceUsuario;
public function __construct(HistoricoService $service,
FormulaService $serviceFormula,
ComponenteService $serviceComponent,
ColorService $serviceColor,
UsuarioService $serviceUsuario
)
{
$this->serviceHistorico = $service;
$this->serviceFomula = $serviceFormula;
$this->serviceComponent = $serviceComponent;
$this->serviceColor = $serviceColor;
$this-> serviceUsuario = $serviceUsuario;
}
/**
* Devuelve los datos del histórico de las pesadas.
* @Rest\Post("api/obtenerHistorico", name="obtener_historico" )
* @return $response;
*/
public function obtenerHistorico(Request $request)
{
$serializer = SerializerBuilder::create()->setPropertyNamingStrategy(
new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
)
)->build();
foreach ($request->request->keys() as $key)
$request->request->filter($key);
if(sizeof($request->request->keys()) == 0)
$data = $this->serviceHistorico->obtenerHistorico();
else
$data = $this->serviceHistorico->obtenerHistoricoFiltrado($request->request);
$serializacion = SerializationContext::create()->setGroups(['listado']);
$response = new Response( $serializer->serialize($data,'json',$serializacion),Response::HTTP_OK);
return $response;
}
/**
* Devuelve un objeto con todos los datos de una pesada almacenados en la tabla histórico
* @Rest\Get("api/obtenerDetalleHistorico", name="obtener_deetalle_historico" )
* @param id [int] id unico de la lína del histórico a mostrar
* @return Historico [obj] objeto de los datos del historico
*/
public function obtenerDetalleHistorico(Request $request)
{
$serializer = SerializerBuilder::create()->setPropertyNamingStrategy(
new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
)
)->build();
$serializacion = SerializationContext::create()->setGroups(['detalle','formula_group']);
$id = $request->get('id');
if($id != null)
$data = $this->serviceHistorico->obtenerDetalleHistorico($id);
else
$data = null;
//dd($data);
$response = new Response( $serializer->serialize($data,'json',$serializacion),Response::HTTP_OK);
return $response;
}
/**
* @Rest\Post("api/guardarHistorico", name = "guardar_historico")
* Recibe los datos de una pesada y los almacena en el histórico,
* Siempre y cuando los datos estén correctos.
*/
public function guardarHistorico(Request $request)
{
$usr = $this->get('security.token_storage')->getToken()->getUser();
$serializer = SerializerBuilder::create()->setPropertyNamingStrategy(
new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
)
)->build();
$id= null;
if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) {
$objectos = json_decode($request->getContent(), true);
$objectos['userId']=$usr ->getId();
$id= $this->serviceHistorico->guardarHistorico($objectos);
}
$response = new Response($serializer->serialize($id ->getId(), 'json'),Response::HTTP_OK);
$response->headers->set('Content-Type', 'json');
$response->prepare($request);
return $response;
}
/**
* @Rest\Post("api/actualizarHistorico", name = "actualizar_historico")
* Actualiza SOLO dos parámetros del histórico; el proyecto al que está vinculado la pesada
* y el número de orden de la misnma
*/
public function actualizarHistorico(Request $request): Response
{
$usr = $this->get('security.token_storage')->getToken()->getUser();
$id= null;
if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) {
$objectos = json_decode($request->getContent(), true);
//dd($objectos);
if( $this->serviceHistorico->actualizaHistorico($objectos, $usr)){
$response = new Response(Response::HTTP_OK);
$response->headers->set('Content-Type', 'json');
$response->prepare($request);
}else{
$response = new Response(Response::HTTP_BAD_REQUEST);
$response->headers->set('Content-Type', 'json');
$response->prepare($request);
}
return $response;
}
//return new Response("actuaclización correcta", Response::HTTP_OK);
}
/**
* @Rest\Post("api/historico/gestionOrden", name = "gestiona_orden")
* Siempre y cuando los datos estén correctos.
*/
public function actualizaOrden(Request $request){
try{
if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) {
$cuenta = $this->get('security.token_storage')->getToken()->getUser();
$objectos = json_decode($request->getContent(), true);
$data = $this->serviceHistorico->actualizaOrden($objectos,$cuenta);
if($data==0){
//existe una orden con el mismo nombre
return new Response(0, Response::HTTP_CONFLICT);
}
//Devuelve
//Context visitingStack not working well
$response = new Response($data,Response::HTTP_OK);
return $response;
}else{
return new Response('KO', Response::HTTP_BAD_REQUEST);
}
}catch (\Exception $e){
return new Response($e->getMessage(), Response::HTTP_BAD_REQUEST);
}
return new Response('KO-Finall', Response::HTTP_BAD_REQUEST);
}
/**
* @Rest\Get("api/historico/numeroOrden", name="obtener_numero_orden")
*
*/
public function getNumeroOrden()
{
try{
$cuenta = $this->get('security.token_storage')->getToken()->getUser();
return new Response($this->serviceHistorico->getNumeroOrden($cuenta), Response::HTTP_OK);
}catch (\Exception $e){
$this->log->error($e->getMessage());
return new Response('KO', Response::HTTP_BAD_REQUEST);
}
}
/**
* @Rest\Get("api/orden", name = "buscarOrden")
* Buca las ordenes y los proyectos asignados a una cuenta
*/
public function buscaOrden(Request $request): Response
{
$usr = $this->get('security.token_storage')->getToken()->getUser();
$sOrden = $request ->query ->get('orden');
$id= null;
$response = new Response(Response::HTTP_BAD_REQUEST);
$response->headers->set('Content-Type', 'json');
$serializer = SerializerBuilder::create()->setPropertyNamingStrategy(
new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
)
)->build();
//dd($sOrden);
if(isset($sOrden) && $sOrden !=""){
$data = $this->serviceHistorico->findOrden($sOrden, $usr);
//dd($data);
$serializacion = SerializationContext::create()->setGroups(['listado']);
$response = new Response($serializer->serialize($data,'json',$serializacion),Response::HTTP_OK);
$response->headers->set('Content-Type', 'json');
$response->prepare($request);
}
return $response;
}
/**
* @Rest\Get("api/cliente", name = "buscarCliente")
* Buca las cliente y los proyectos asignados a una cuenta
*/
public function buscaCliente(Request $request): Response
{
$serializer = SerializerBuilder::create()->setPropertyNamingStrategy(
new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
)
)->build();
$usr = $this->get('security.token_storage')->getToken()->getUser();
$sCliente="";
if($request ->query ->get('cliente')) {
$sCliente = $request ->query ->get('cliente');
}
$response = new Response(Response::HTTP_BAD_REQUEST);
$response->headers->set('Content-Type', 'json');
$data = $this->serviceHistorico->findCliente($sCliente, $usr);
if(sizeof($data)>0){
$serializacion = SerializationContext::create()->setGroups(array('listado'));
$response = new Response($serializer->serialize(
$data,'json', $serializacion),Response::HTTP_OK);
$response->headers->set('Content-Type', 'json');
$response->prepare($request);
}else{
$response = new Response($serializer->serialize([],'json'),Response::HTTP_OK);
$response->headers->set('Content-Type', 'json');
$response->prepare($request);
}
return $response;
}
/*
* PETICIONES DE ESTADISTICAS
*/
/**
* @Rest\Get("api/obtenerEstadisticas", name="obtener_estadisticas_Cliente" )
* @return Historico [obj] objeto de los datos del historico
*/
public function obtenerEstadisticasHistoricosCliente(Request $request){
$serializer = SerializerBuilder::create()->setPropertyNamingStrategy(
new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
)
)->build();
$usr = $this->get('security.token_storage')->getToken()->getUser();
$fecha1 = new \DateTime('2019-01-01');
$fecha2 = new \DateTime();
if($request ->query ->get('fechaIni')!=null && $request ->query ->get('fechaIni')!=""){
$fecha1 = new \DateTime($request ->query ->get('fechaIni'));
}
if($request ->query ->get('fechaFin')!=null && $request ->query ->get('fechaFin')!=""){
$fecha2 = new \DateTime($request ->query ->get('fechaFin'));
}
//dd($usr->getCuenta());
try{
$data=$this->serviceHistorico->findEstadisticas($usr->getId(),$fecha1, $fecha2);
}catch (\Exception $e){
dd($e);
}
//dd($data);
if($data) {
$response = new Response($serializer->serialize($data,'json'), Response::HTTP_OK);
}else{
$response = new Response("KO",Response::HTTP_NO_CONTENT);
}
$response->headers->set('Content-Type', 'json');
return $response;
}
/**
* @Rest\Get("api/admin/obtenerEstadisticas", name="obtener_estadisticas" )
* @Rest\Get("extra/admin/obtenerEstadisticas", name="obtener_estadisticas1" )
* @return Historico [obj] objeto de los datos del historico
*/
public function obtenerEstadisticasHistoricos(Request $request){
$serializer = SerializerBuilder::create()->setPropertyNamingStrategy(
new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
)
)->build(); $id=1;
if($request ->query ->get('idCuenta')!=null && $request ->query ->get('idCuenta')!="" && $request ->query ->get('idCuenta')!="null"){
$id = $request ->query ->get('idCuenta');
}
$cuenta = $this->serviceUsuario->findCuentabyId($id);
$fecha1 = new \DateTime('2018-12-10');
$fecha2 = new \DateTime('2018-12-31');
if($request ->query ->get('tipo')!=null && $request ->query ->get('tipo')!="" ){
$tipo = $request ->query ->get('tipo');
$fecha2 = new \DateTime();
switch ($tipo){
case "1":
//$fecha1 = new \DateTime(date('Y-m-d', strtotime(date_format(new \DateTime(), 'Y-m-d H:i:s')) - 86400));
$fecha1 = new \DateTime(date('Y-m-d', strtotime("-2 day")));
break;
case "2":
//$fecha1 = new \DateTime(date('Y-m-d', strtotime(date_format(new \DateTime(), 'Y-m-d H:i:s')) - (7*86400)));
$fecha1 = new \DateTime(date('Y-m-d', strtotime("-7 day")));
break;
case "3":
//$fecha1 = new \DateTime(date('Y-m-d', strtotime(date_format(new \DateTime(), 'Y-m-d H:i:s')) - (30*86400)));
$fecha1 = new \DateTime(date('Y-m-d', strtotime("-30 day")));
break;
case "4":
if( (new \DateTime(date('Y-m-d', strtotime("-1 year")))) > $cuenta->getFechaCreacion()){
$fecha1 = new \DateTime(date('Y-m-d', strtotime("-1 year")));
}else{
$fecha1 = $cuenta->getFechaCreacion();
}
break;
default:
$fecha1 = new \DateTime(date('Y-m-d', strtotime("-1 year")));
break;
}
}
//$data=$this->serviceHistorico->findEstadisticas($id,$tipo)->getEstadistica();
//dd($id);
$data=$this->serviceHistorico->findEstadisticas($id,$fecha1, $fecha2);
//dd($data);
if($data) {
//dd($data);
$response = new Response($serializer->serialize($data,'json'), Response::HTTP_OK);
}else{
$response = new Response("",Response::HTTP_NO_CONTENT);
}
$response->headers->set('Content-Type', 'json');
return $response;
}
/**
* @Rest\Get("extra/generarEstadistcas", name="genera_estadisticas" )
* @return void
*/
public function generaEstadisticaEstadisticasHistoricos(Request $request){
$serializer = $this->serializer;
$fechaLog="estadistica".date_format(new \DateTime(), 'Ymd_His');;
$log = new Logger($fechaLog);
$log->pushHandler(new StreamHandler($fechaLog, Logger::WARNING));
if($request ->query ->get('key')!=null && $request ->query ->get('key')!=""){
if($request ->query ->get('key')
== 'yBBTbaHO17cvhle98GCEXIsideCLNIAcGY7LwmQcHBzseLWKiEj88je2a0Sr0iC0dapZRBk3i4pqaYc931RZUApntdJK1v1fn4umOXws1iEAH5IhTSnEmu1Ua950eyXY3LC2Ue5u8NtqLF159QonJkwovpT5e8wNdABXEQZBLpJ10c6q89RUgODBs5LsKHhwhbcR8kmFC0PblbC8kpKQrSq154mnHFqHtKrsKMO1TeUpGfZI4FdRElwTIR3ZO6h5'
){
$elemento= $this->serviceHistorico->generarEstadisticas();
$log->warning(json_encode($elemento));
$response = new Response(Response::HTTP_OK);
return $response;
}else{
$response = new Response(Response::HTTP_BAD_REQUEST);
return $response;
}
}else{
$response = new Response(Response::HTTP_BAD_REQUEST);
return $response;
}
}
}