<?php
namespace App\Controller\administrador;
use App\Entity\estudiante\planTrabajoEntity;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use App\Service\cryptService;
use Doctrine\Persistence\ManagerRegistry;
use App\Resource\Util\Util;
use App\Resource\Dbal\Error;
use App\Resource\Error\errorDisplay;
use App\Resource\Util\fotoGeneral;
use App\Entity\estudiante\presentacionAprobacionEntity;
use App\Entity\estudiante\registroInicialEntity;
use App\Resource\Util\modelSftp;
/**
* @Route("/api/planTrabajo",name="API-planTrabajo-")
*/
class planTrabajoController extends AbstractController {
use Util;
use Error;
/**
* @Route("/getPlanTrabajo", name="getPlanTrabajo")
* @param Request $request
* @return Response
*/
public function getPlanTrabajo(Request $request ,cryptService $respon, ManagerRegistry $doctrine, ValidatorInterface $validator) {
$error = new ErrorDisplay($request->query->all(), $validator);
/** @var \App\Entity\estudiante\planTrabajoEntity */
$entity = $error->paramValidate(["codigo","serial"], planTrabajoEntity::class);
if (method_exists($entity, "getstatusCode")) {
/** @var JsonResponse $entity */
return $entity;
}
/** @var \App\Repository\estudiante\planTrabajoRepository */
$repository = $doctrine->getRepository(planTrabajoEntity::class, 'default');
return new JsonResponse($respon->setResponse(
[
'data' => $repository->conexionBD($this->getUser())->getPlanTrabajo($entity->getSerial())
]
));
}
/**
* @Route("/postGuardarPlan", name="postGuardarPlan")
* @param Request $request
* @return Response
*/
public function postGuardarPlan(Request $request ,cryptService $respon, ManagerRegistry $doctrine, ValidatorInterface $validator) {
try{
$error = new ErrorDisplay($request->request->all(), $validator);
/** @var \App\Entity\estudiante\planTrabajoEntity */
$entity = $error->paramValidate(["idAprobacion","fechaInicio","tipoVinculacion",
"fechaAfiliacion","fechaFinalizacion","semestre", "anyo", "titulo", "urlVinculacion",
"observacion", "tipo", "idPlan","idCarta", "idInicial"], planTrabajoEntity::class);
if (method_exists($entity, "getstatusCode")) {
/** @var JsonResponse $entity */
return $entity;
}
$data = new modelSftp();
$file = $request->files->get("file");
if($file !== null){
$data->validateFile($file,["pdf","PDF"], 20000000);
$nombre = '/contrato_'.$entity->getIdAprobacion(). '.'. $file->getClientOriginalExtension();
$data->setFile(file_get_contents($file), '/data/contrato',$nombre);
}else{
$nombre = '/contrato_'.$entity->getIdAprobacion(). '.pdf';
}
/** @var \App\Repository\estudiante\planTrabajoRepository */
$repository = $doctrine->getRepository(planTrabajoEntity::class, 'default');
$repository->conexionBD($this->getUser());
if($entity->getTipo() === 'U'){
$result= $repository->putPlan($entity->getIdPlan(), $entity->getIdInicial(),$entity->getIdCarta(),
$entity->getIdAprobacion(), $entity->getTipoVinculacion(), $entity->getFechaInicio(), $entity->getFechaAfiliacion() , $entity->getObservacion(),
$entity->getFechaFinalizacion(), $entity->getAnyo(), $entity->getSemestre(), $entity->getTitulo(),
$this->getUser()->getUsername(),$nombre );
}else{
$result = $repository->postPlanTrabajo($entity->getIdAprobacion(), $entity->getTipoVinculacion(),
$entity->getFechaInicio(), $entity->getFechaAfiliacion(), $entity->getObservacion(),
$entity->getFechaFinalizacion(), $entity->getAnyo(), $entity->getSemestre(), $entity->getTitulo(),
$this->getUser()->getUsername(),$nombre);
}
return new JsonResponse($respon->setResponse(
[
'success' => $result,
'data' => ($result) ? 'Inserción Correcta' : 'se ha presentado un problema'
]
));
}catch(\Exception $e){
return new JsonResponse($respon->setResponse(['success' => false,'data' => $e->getMessage()]));
}
}
/**
* @Route("/putExcepcion", name="putExcepcion", methods={"POST"})
* @param Request $request
* @param ValidatorInterface $validator
* @return JsonResponse
*/
public function putExcepcion(Request $request ,cryptService $respon, ManagerRegistry $doctrine, ValidatorInterface $validator) {
try {
$error = new ErrorDisplay($request->request->all(), $validator);
/** @var \App\Entity\estudiante\planTrabajoEntity */
$entity = $error->paramValidate(["idAprobacion","motivo","semestre", "anyo", "fechaFinalizacion"], planTrabajoEntity::class, 'post');
if (method_exists($entity, "getstatusCode")) {
/** @var JsonResponse $entity */
return $entity;
}
/** @var \App\Repository\estudiante\planTrabajoRepository */
$repository = $doctrine()->getRepository(estudiante::class, 'default');
$data = $repository->conexionBD($this->getUser())->putExcepcion($entity->getIdAprobacion(), $entity->getMotivo(), $entity->getAnyo(), $entity->getFechaFinalizacion(), $entity->getSemestre());
return new JsonResponse($respon->setResponse([
'success' => ($data) ? true : false,
'data' => ($data) ? 'Excepción agregado' : 'No se pudo agregar la excepción'
]));
} catch (\Exception $e){
return new JsonResponse($respon->setResponse(['success' => false,'data' => $e->getMessage()]));
}
}
/**
* @Route("/getFileVinculacion", name="getFileVinculacion", methods={"GET"})
* @param Request $request
* @param ValidatorInterface $validator
* @return JsonResponse
*/
public function getFileVinculacion(Request $request ,cryptService $respon, ManagerRegistry $doctrine, ValidatorInterface $validator) {
try {
$error = new ErrorDisplay($request->query->all(), $validator);
/** @var \App\Entity\estudiante\planTrabajoEntity */
$entity = $error->paramValidate(["idAprobacion" ], planTrabajoEntity::class, 'post');
if (method_exists($entity, "getstatusCode")) {
/** @var JsonResponse $entity */
return $entity;
}
$data = new modelSftp();
$nombre = 'contrato_'.$entity->getIdAprobacion().'.pdf';
$archivo = $data->getFile('/data/contrato/',$nombre);
return new Response(base64_decode($archivo), 200,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="'.$nombre.'"',
]);
} catch (\Exception $e){
return new JsonResponse($respon->setResponse(['success' => false,'data' => $e->getMessage()]));
}
}
}