<?php
namespace App\Controller;
use App\Entity\Producto;
use App\Form\ProductoType;
use App\Repository\ProductoRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Security;
use Knp\Component\Pager\PaginatorInterface;
use App\Entity\MovimientosProductos;
use App\Service\MidasApiService;
use App\Repository\EmpresaRepository;
use App\Repository\EspecialidadRepository;
use App\Repository\ProductoMidasRepository;
/**
* @Route("/producto")
*/
class ProductoController extends AbstractController
{
/**
* @var Security
*/
private $security;
public function __construct(Security $security)
{
date_default_timezone_set("America/Guayaquil");
$this->security = $security;
}
/**
* @Route("/", name="producto_index", methods={"GET"})
*/
public function index(ProductoRepository $productoRepository, PaginatorInterface $paginator, Request $request): Response
{
$query = $productoRepository->QryBuscarTodos();
$paginacion = $paginator->paginate(
$query,
$request->query->getInt('page',1),
20
);
return $this->render('producto/index.html.twig', [
'pagination' => $paginacion,
]);
/*
return $this->render('producto/index.html.twig', [
'productos' => $productoRepository->findAll(),
]);*/
}
/**
* @Route("/new", name="producto_new", methods={"GET","POST"})
*/
public function new(Request $request): Response
{
$ip = $request->getClientIp();
$user = $this->security->getUser();
$producto = new Producto();
$form = $this->createForm(ProductoType::class, $producto);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$producto->setEstado('1');
$producto->setIpCrea($ip);
$producto->setIpModifica($ip);
$producto->setUserCrea($user->getId());
$producto->setUserModifica($user->getId());
$entityManager->persist($producto);
$entityManager->flush();
return $this->redirectToRoute('producto_index');
}
return $this->render('producto/new.html.twig', [
'producto' => $producto,
'form' => $form->createView(),
]);
}
/**
* @Route("/{id}", name="producto_show", methods={"GET"})
*/
public function show(Producto $producto): Response
{
return $this->render('producto/show.html.twig', [
'producto' => $producto,
]);
}
/**
* @Route("/{id}/edit", name="producto_edit", methods={"GET","POST"})
*/
public function edit(Request $request, Producto $producto): Response
{
$form = $this->createForm(ProductoType::class, $producto);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('producto_index');
}
return $this->render('producto/edit.html.twig', [
'producto' => $producto,
'form' => $form->createView(),
]);
}
/**
* @Route("/{id}", name="producto_delete", methods={"DELETE"})
*/
public function delete(Request $request, Producto $producto): Response
{
if ($this->isCsrfTokenValid('delete'.$producto->getId(), $request->request->get('_token'))) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($producto);
$entityManager->flush();
}
return $this->redirectToRoute('producto_index');
}
/**
* @Route("/buscar/producto/descripcion", name="producto_buscar_descripcion", methods={"GET"})
*/
public function buscar_producto_descripcion(Request $request, ProductoRepository $productoRepository): Response
{
$query = $request->query->get('query');
$unidad = $request->query->get('unidad');
//dd($request->query);
$productos = $productoRepository->findByNombre($query);//dd($productos);
//$arr = $productoRepository->findByNombre_ok($query, $unidad);
$arr = [];$i=0;
foreach ($productos as $value) {
$arr[$i]=[ "value"=> $value->getNombre(), "data"=> $value->getCodigo(), "id" => $value->getId(), "cantidad" => $value->getCantidad(), "iva" => $value->getIva(), "precio" => $value->getPrecio() ];
$i++;
}
//dd($arr,$x);
return $this->json([
// Query is not required as of version 1.2.5
"query"=> "Unit",
"suggestions"=> $arr,
]);
}
/**
* @Route("/movimiento_producto/agregar/{id}/{cantidad}", name="producto_movimiento_producto_agregar", methods={"GET"})
*/
public function movimiento_producto_agregar(Request $request, Producto $producto, $cantidad, ProductoRepository $productoRepository): Response
{
$ip = $request->getClientIp();
$user = $this->security->getUser();
$movimientosProducto = new MovimientosProductos();
$movimientosProducto->setCantidad($cantidad);
$movimientosProducto->setIpCrea($ip);
$movimientosProducto->setIpModifica($ip);
$movimientosProducto->setUserCrea($user->getId());
$movimientosProducto->setUserModifica($user->getId());
$movimientosProducto->setProducto($producto);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($movimientosProducto);
$entityManager->flush();
$producto = $productoRepository->find($producto->getId());
$total = $producto->getTotalSum();
return $this->json([
'result' => $total,
]);
}
/**
* @Route("/movimiento_producto/quitar/{id}/{cantidad}", name="producto_movimiento_producto_quitar", methods={"GET"})
*/
public function movimiento_producto_quitar(Request $request, Producto $producto, $cantidad, ProductoRepository $productoRepository): Response
{
$ip = $request->getClientIp();
$user = $this->security->getUser();
$movimientosProducto = new MovimientosProductos();
$movimientosProducto->setCantidad(- $cantidad);
$movimientosProducto->setIpCrea($ip);
$movimientosProducto->setIpModifica($ip);
$movimientosProducto->setUserCrea($user->getId());
$movimientosProducto->setUserModifica($user->getId());
$movimientosProducto->setProducto($producto);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($movimientosProducto);
$entityManager->flush();
$producto = $productoRepository->find($producto->getId());
$total = $producto->getTotalSum();
return $this->json([
'result' => $total,
]);
}
/**
* @Route("/midas/actualizar", name="producto_midas_actualizar", methods={"GET"})
*/
public function midas_actualizar(Request $request, ProductoRepository $productoRepository, EmpresaRepository $empresaRepository, MidasApiService $midasApiService, EspecialidadRepository $especialidadRepository, ProductoMidasRepository $productoMidasRepository): Response
{
$e = $empresaRepository->findOneBy(['id_api' => "95"]);
$token = $e->getToken();
$data = [
"company_id" => 95
];
$result = $midasApiService->solicitarProductos( $token, $productoRepository, $data, "95", $especialidadRepository, $e->getNombreCorto(), $productoMidasRepository );
$e = $empresaRepository->findOneBy(['id_api' => "96"]);
$token = $e->getToken();
$data = [
"company_id" => 96
];
$result = $midasApiService->solicitarProductos( $token, $productoRepository, $data, "96", $especialidadRepository, $e->getNombreCorto(), $productoMidasRepository );
return $this->json([
'result' => "ok",
]);
}
/**
* @Route("/midas/existencias/{codigo}", name="producto_midas_existencias", methods={"GET"})
*/
public function midas_existencias(Request $request, ProductoRepository $productoRepository, EmpresaRepository $empresaRepository, MidasApiService $midasApiService, $codigo): Response
{
$e = $empresaRepository->findOneBy(['id_api' => "95"]);
$token = $e->getToken();
$data = [
"company_id" => 95
];
$result = $midasApiService->solicitarExistencia( $token, $productoRepository, $data, $codigo );
return $this->json([
'result' => $result,
]);
}
}