From 7008073000d87453a6bf22bd9916e03dee372000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sena?= <jsena@campus.unam.edu.ar> Date: Thu, 17 Sep 2020 15:36:01 -0300 Subject: [PATCH 01/20] Issue #46 - Se agrega post de Visita --- .../Http/Controllers/VisitasController.php | 14 ++++++++-- .../app/Repositorios/GuzzleHttpRequest.php | 5 ++-- visitas/app/Repositorios/TupaApi.php | 26 ++++++++++++------- visitas/routes/web.php | 2 +- 4 files changed, 33 insertions(+), 14 deletions(-) diff --git a/visitas/app/Http/Controllers/VisitasController.php b/visitas/app/Http/Controllers/VisitasController.php index fe20c9fb..4e89b3be 100644 --- a/visitas/app/Http/Controllers/VisitasController.php +++ b/visitas/app/Http/Controllers/VisitasController.php @@ -35,19 +35,29 @@ class VisitasController extends Controller //TODO: Cambiar con los datos que retorna la api $codigoQrEjemplo = $this->generar_qr("www.unam.edu.ar/visitas", "124", "tosv2"); $codigoqr = $codigoQrEjemplo; - + //$codigoqr = $datos->codigoqr; $nombre =$datos->nombre; $apellido =$datos->apellido; $dni=$datos->dni; - return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni')); + $TyC = $this->visitas->getToS(); + $TyC=$TyC[0]['contenido']; + return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni','TyC')); } private function generar_qr(string $link = null, string $idVisitante = null, string $idTOS) { + if (isset($link) && isset($idVisitante) && isset($idTOS)) { $url = $link . "/" . $idVisitante . "/" . $idTOS; return \QrCode::size(300)->generate($url); } } + + /*Este metodo devolveria Ruta al archivo pdf*/ + function getTyCVigentePDF(){ + $TyC = $this->visitas->getPdfTyC(); + $TyC=$TyC[0]['contenido']; + return $TyC; + } } diff --git a/visitas/app/Repositorios/GuzzleHttpRequest.php b/visitas/app/Repositorios/GuzzleHttpRequest.php index d9c44a19..d767746b 100644 --- a/visitas/app/Repositorios/GuzzleHttpRequest.php +++ b/visitas/app/Repositorios/GuzzleHttpRequest.php @@ -16,11 +16,12 @@ class GuzzleHttpRequest public function get($url,$auth) { $response = $this->client->request('GET', $url,$auth); - return json_decode($response->getBody()->getContents()); + return json_decode($response->getBody(),true); } public function post($url,$datos) { - $this->client->request('POST', $url,$datos); + $response = $this->client->request('POST', $url,$datos); + return json_decode($response->getBody(),true); } } diff --git a/visitas/app/Repositorios/TupaApi.php b/visitas/app/Repositorios/TupaApi.php index 03045f9a..655b3391 100644 --- a/visitas/app/Repositorios/TupaApi.php +++ b/visitas/app/Repositorios/TupaApi.php @@ -59,29 +59,30 @@ class TupaApi extends GuzzleHttpRequest } - public function getCredenciales(){ + public function getCredAPI(){ $this->credenciales = json_decode(env('CREDENCIALES_API_BASIC_TUPA')); $this->setUser($this->credenciales[0][0]); $this->setPass($this->credenciales[0][1]); $this->setUrlApi($this->credenciales[0][2]); } - public function getVisitantes() + public function getToS() { - - $url = $this->getUrlApi() . '/vistantes'; + $this->getCredApi(); + $url = $this->getUrlApi() . '/terminos-condiciones'; $auth = ['auth' => [$this->getUser(), $this->getPass()]]; return $this->get($url, $auth); } - public function getVisitante($id) + public function getPdfPase($id) { return $this->get("visitantes/{$id}"); } + public function postVisitante($visita=array()) { - $this->getCredenciales(); + $this->getCredApi(); $url = $this->getUrlApi() . '/visitantes'; $datos = array ( @@ -133,9 +134,16 @@ class TupaApi extends GuzzleHttpRequest ); $datos = ['body' => json_encode($datos), 'auth' => [$this->getUser(), $this->getPass()]]; - $this->post($url,$datos); - + $visita = $this->post($url,$datos); + $this->postVisita($visita['respuesta']); + return $visita; } - + function postVisita($id){ + $this->getCredApi(); + $tos = $this->getToS(); + $url = $this->getUrlApi() . 'visitas/'.$id; + $datos = ['body' => json_encode(['terminos_condiciones'=>$tos[0]['codigo'],'sede'=>'1','tipo_visitante'=>'EXTERNO']), 'auth' => [$this->getUser(), $this->getPass()]]; + $this->post($url,$datos); + } } diff --git a/visitas/routes/web.php b/visitas/routes/web.php index 9f4effc4..3394704e 100644 --- a/visitas/routes/web.php +++ b/visitas/routes/web.php @@ -22,7 +22,7 @@ Route::match(['get', 'post'],'/solicitudPase', 'VisitasController@solicitudPase' Route::post('/visitas','VisitasController@altaVisita')->name('visita_crear'); -Route::get('/acreditacionCOVID19', 'VisitasController@acreditar')->name('acreditacion'); +Route::get('/pdf-tyc', 'VisitasController@getTyCVigentePDF')->name('pdf-tyc'); //Route::resource('visitas', 'VisitasController'); -- GitLab From 076a93d54a713dca42ff3adfac9b4924d4db5ffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sena?= <jsena@campus.unam.edu.ar> Date: Fri, 18 Sep 2020 10:50:19 -0300 Subject: [PATCH 02/20] Issue #46 - avances conexion con api --- .../Http/Controllers/VisitasController.php | 31 +++++++++---------- visitas/app/Providers/AppServiceProvider.php | 3 +- .../app/Repositorios/GuzzleHttpRequest.php | 14 +++++++++ visitas/app/Repositorios/TupaApi.php | 29 ++++++++--------- visitas/routes/web.php | 3 +- 5 files changed, 47 insertions(+), 33 deletions(-) diff --git a/visitas/app/Http/Controllers/VisitasController.php b/visitas/app/Http/Controllers/VisitasController.php index 4e89b3be..e769e5b4 100644 --- a/visitas/app/Http/Controllers/VisitasController.php +++ b/visitas/app/Http/Controllers/VisitasController.php @@ -26,23 +26,25 @@ class VisitasController extends Controller public function altaVisita(Request $request) { - $this->visitas->postVisitante($request); - return $this->acreditar($request); + $visita = $this->visitas->postVisitante($request); + return $this->acreditar($visita); } - public function acreditar($datos=null) + public function acreditar($id) { - //TODO: Cambiar con los datos que retorna la api $codigoQrEjemplo = $this->generar_qr("www.unam.edu.ar/visitas", "124", "tosv2"); $codigoqr = $codigoQrEjemplo; + $dv = $this->visitas->getVisitante($id['respuesta']); + $nombre = $dv['datos_personales']['nombre']; + $apellido = $dv['datos_personales']['apellido']; + $dni = $dv['datos_personales']['documentos'][0]['numero']; + return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni')); + } - //$codigoqr = $datos->codigoqr; - $nombre =$datos->nombre; - $apellido =$datos->apellido; - $dni=$datos->dni; - $TyC = $this->visitas->getToS(); - $TyC=$TyC[0]['contenido']; - return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni','TyC')); + public function getPDFTyCVigente() + { + $id = $this->visitas->getToS(); + return $this->visitas->getPDFToS($id[0]["codigo"]); } private function generar_qr(string $link = null, string $idVisitante = null, string $idTOS) @@ -54,10 +56,5 @@ class VisitasController extends Controller } } - /*Este metodo devolveria Ruta al archivo pdf*/ - function getTyCVigentePDF(){ - $TyC = $this->visitas->getPdfTyC(); - $TyC=$TyC[0]['contenido']; - return $TyC; - } + } diff --git a/visitas/app/Providers/AppServiceProvider.php b/visitas/app/Providers/AppServiceProvider.php index 9222ee9d..42d3da74 100644 --- a/visitas/app/Providers/AppServiceProvider.php +++ b/visitas/app/Providers/AppServiceProvider.php @@ -15,8 +15,9 @@ class AppServiceProvider extends ServiceProvider public function register() { $this->app->singleton('GuzzleHttp\Client',function(){ + $credenciales = json_decode(env('CREDENCIALES_API_BASIC_TUPA')); return new Client([ - 'base_uri' => 'http://localhost:9002/api/v1/', + 'base_uri' => $credenciales[0][0], ]); }); } diff --git a/visitas/app/Repositorios/GuzzleHttpRequest.php b/visitas/app/Repositorios/GuzzleHttpRequest.php index d767746b..d0f74eb4 100644 --- a/visitas/app/Repositorios/GuzzleHttpRequest.php +++ b/visitas/app/Repositorios/GuzzleHttpRequest.php @@ -15,6 +15,7 @@ class GuzzleHttpRequest } public function get($url,$auth) { + $response = $this->client->request('GET', $url,$auth); return json_decode($response->getBody(),true); } @@ -24,4 +25,17 @@ class GuzzleHttpRequest $response = $this->client->request('POST', $url,$datos); return json_decode($response->getBody(),true); } + public function getFile($url,$auth) { + $resource = fopen('tycCovid19.pdf', 'w'); + /*return $this->client->request('GET', $url, [ + 'headers' => [ + 'Authorization'=> 'Basic ' . $auth, + 'Content-Type' => 'application/pdf' + ], + 'sink' => $resource, + ]);*/ + return $this->client->request('GET', $url,$auth); + } + } + diff --git a/visitas/app/Repositorios/TupaApi.php b/visitas/app/Repositorios/TupaApi.php index 655b3391..bcc69db8 100644 --- a/visitas/app/Repositorios/TupaApi.php +++ b/visitas/app/Repositorios/TupaApi.php @@ -58,7 +58,6 @@ class TupaApi extends GuzzleHttpRequest $this->urlApi = $urlApi; } - public function getCredAPI(){ $this->credenciales = json_decode(env('CREDENCIALES_API_BASIC_TUPA')); $this->setUser($this->credenciales[0][0]); @@ -66,6 +65,14 @@ class TupaApi extends GuzzleHttpRequest $this->setUrlApi($this->credenciales[0][2]); } + public function getVisitante($id){ + $url = $this->getUrlApi() . '/visitantes/'.$id; + $auth = ['auth' => [$this->getUser(), $this->getPass()]]; + return $this->get($url, $auth); + } + /* + * + * */ public function getToS() { $this->getCredApi(); @@ -74,12 +81,16 @@ class TupaApi extends GuzzleHttpRequest return $this->get($url, $auth); } - public function getPdfPase($id) + public function getPDFToS($id) { - return $this->get("visitantes/{$id}"); + $this->getCredApi(); + $url = $this->getUrlApi() . "terminos-condiciones/{$id}/archivo"; + //$auth = base64_encode("{$this->getUser()}:{$this->getPass()}"); + $auth = ['auth' => [$this->getUser(), $this->getPass()]]; + dd($this->getFile($url, $auth)); + //return $this->getFile($url, $auth); } - public function postVisitante($visita=array()) { $this->getCredApi(); @@ -132,18 +143,8 @@ class TupaApi extends GuzzleHttpRequest ), ), ); - $datos = ['body' => json_encode($datos), 'auth' => [$this->getUser(), $this->getPass()]]; $visita = $this->post($url,$datos); - $this->postVisita($visita['respuesta']); return $visita; } - - function postVisita($id){ - $this->getCredApi(); - $tos = $this->getToS(); - $url = $this->getUrlApi() . 'visitas/'.$id; - $datos = ['body' => json_encode(['terminos_condiciones'=>$tos[0]['codigo'],'sede'=>'1','tipo_visitante'=>'EXTERNO']), 'auth' => [$this->getUser(), $this->getPass()]]; - $this->post($url,$datos); - } } diff --git a/visitas/routes/web.php b/visitas/routes/web.php index 3394704e..acd1b8e9 100644 --- a/visitas/routes/web.php +++ b/visitas/routes/web.php @@ -22,7 +22,8 @@ Route::match(['get', 'post'],'/solicitudPase', 'VisitasController@solicitudPase' Route::post('/visitas','VisitasController@altaVisita')->name('visita_crear'); -Route::get('/pdf-tyc', 'VisitasController@getTyCVigentePDF')->name('pdf-tyc'); +Route::get('/pdf-tyc', 'VisitasController@getPDFTyCVigente')->name('pdf-tyc'); + //Route::resource('visitas', 'VisitasController'); -- GitLab From 11933946eb4f0984af61ba1e0e55c0804f52325d Mon Sep 17 00:00:00 2001 From: Fernando Alvez <fernando.alvez@campus.unam.edu.ar> Date: Wed, 16 Sep 2020 11:35:25 -0300 Subject: [PATCH 03/20] Related #53 #50 Recurso aceptar terminos y condiciones, Recurso Pase PUT para aceptacion del termino y condicion Generacion de QR Generacion de PDF del pase GET para obtener el QR del pase GET para obtener el PDF del pase --- api-backend/composer.json | 4 +- api-backend/composer.lock | 568 +++++++++++++++--- .../Backend/API/Endpoints/v1/pases/pases.php | 66 ++ .../terminos_condiciones.php | 72 ++- .../1.0/20200908120213_visitante.php | 1 + .../UNAM/Tupa/Core/Errors/PaseNotFound.php | 12 + .../Manager/ManagerTerminosCondiciones.php | 122 ++++ .../Tupa/Core/Negocio/TerminosCondiciones.php | 55 ++ 8 files changed, 803 insertions(+), 97 deletions(-) create mode 100644 api-backend/src/UNAM/Tupa/Backend/API/Endpoints/v1/pases/pases.php create mode 100644 core/src/UNAM/Tupa/Core/Errors/PaseNotFound.php diff --git a/api-backend/composer.json b/api-backend/composer.json index 9ac2a11c..2215fe81 100644 --- a/api-backend/composer.json +++ b/api-backend/composer.json @@ -28,7 +28,9 @@ "symfony/cache": "~4.3.5", "symfony/config": "~4.3.5", "siu/queue": "^1.0.1", - "enqueue/redis": "^0.9" + "enqueue/redis": "^0.9", + "simplesoftwareio/simple-qrcode": "^3.0.0", + "Dompdf/Dompdf": "^0.8" }, "autoload": { diff --git a/api-backend/composer.lock b/api-backend/composer.lock index 1161681b..6051008b 100644 --- a/api-backend/composer.lock +++ b/api-backend/composer.lock @@ -4,20 +4,112 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "75f61bfef04ce5e19896083e59865a37", + "content-hash": "f6a53286744442fa2f136d0b108a5794", "packages": [ + { + "name": "bacon/bacon-qr-code", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/Bacon/BaconQrCode.git", + "reference": "eaac909da3ccc32b748a65b127acd8918f58d9b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/eaac909da3ccc32b748a65b127acd8918f58d9b0", + "reference": "eaac909da3ccc32b748a65b127acd8918f58d9b0", + "shasum": "" + }, + "require": { + "dasprid/enum": "^1.0", + "ext-iconv": "*", + "php": "^7.1" + }, + "require-dev": { + "phly/keep-a-changelog": "^1.4", + "phpunit/phpunit": "^6.4", + "squizlabs/php_codesniffer": "^3.1" + }, + "suggest": { + "ext-imagick": "to generate QR code images" + }, + "type": "library", + "autoload": { + "psr-4": { + "BaconQrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "http://www.dasprids.de", + "role": "Developer" + } + ], + "description": "BaconQrCode is a QR code generator for PHP.", + "homepage": "https://github.com/Bacon/BaconQrCode", + "time": "2018-04-25T17:53:56+00:00" + }, + { + "name": "dasprid/enum", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/DASPRiD/Enum.git", + "reference": "6ccc0d7141a7f149e3c56cb0ce5f05d9152cfd07" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/6ccc0d7141a7f149e3c56cb0ce5f05d9152cfd07", + "reference": "6ccc0d7141a7f149e3c56cb0ce5f05d9152cfd07", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "^7 | ^8 | ^9", + "squizlabs/php_codesniffer": "^3.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "DASPRiD\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "PHP 7.1 enum implementation", + "keywords": [ + "enum", + "map" + ], + "time": "2020-07-30T16:37:13+00:00" + }, { "name": "doctrine/cache", - "version": "1.10.1", + "version": "1.10.2", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3" + "reference": "13e3381b25847283a91948d04640543941309727" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3", - "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3", + "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727", + "reference": "13e3381b25847283a91948d04640543941309727", "shasum": "" }, "require": { @@ -100,7 +192,75 @@ "type": "tidelift" } ], - "time": "2020-05-27T16:24:54+00:00" + "time": "2020-07-07T18:54:01+00:00" + }, + { + "name": "dompdf/dompdf", + "version": "v0.8.6", + "source": { + "type": "git", + "url": "https://github.com/dompdf/dompdf.git", + "reference": "db91d81866c69a42dad1d2926f61515a1e3f42c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/db91d81866c69a42dad1d2926f61515a1e3f42c5", + "reference": "db91d81866c69a42dad1d2926f61515a1e3f42c5", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "phenx/php-font-lib": "^0.5.2", + "phenx/php-svg-lib": "^0.3.3", + "php": "^7.1" + }, + "require-dev": { + "mockery/mockery": "^1.3", + "phpunit/phpunit": "^7.5", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-gd": "Needed to process images", + "ext-gmagick": "Improves image processing performance", + "ext-imagick": "Improves image processing performance", + "ext-zlib": "Needed for pdf stream compression" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "0.7-dev" + } + }, + "autoload": { + "psr-4": { + "Dompdf\\": "src/" + }, + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + }, + { + "name": "Brian Sweeney", + "email": "eclecticgeek@gmail.com" + }, + { + "name": "Gabriel Bull", + "email": "me@gabrielbull.com" + } + ], + "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", + "homepage": "https://github.com/dompdf/dompdf", + "time": "2020-08-30T22:54:22+00:00" }, { "name": "enqueue/dsn", @@ -449,16 +609,16 @@ }, { "name": "monolog/monolog", - "version": "1.25.4", + "version": "1.25.5", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "3022efff205e2448b560c833c6fbbf91c3139168" + "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/3022efff205e2448b560c833c6fbbf91c3139168", - "reference": "3022efff205e2448b560c833c6fbbf91c3139168", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1817faadd1846cd08be9a49e905dc68823bc38c0", + "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0", "shasum": "" }, "require": { @@ -532,7 +692,7 @@ "type": "tidelift" } ], - "time": "2020-05-22T07:31:27+00:00" + "time": "2020-07-23T08:35:51+00:00" }, { "name": "paragonie/constant_time_encoding", @@ -641,26 +801,103 @@ ], "time": "2018-07-02T15:55:56+00:00" }, + { + "name": "phenx/php-font-lib", + "version": "0.5.2", + "source": { + "type": "git", + "url": "https://github.com/PhenX/php-font-lib.git", + "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/ca6ad461f032145fff5971b5985e5af9e7fa88d8", + "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5 || ^6 || ^7" + }, + "type": "library", + "autoload": { + "psr-4": { + "FontLib\\": "src/FontLib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/PhenX/php-font-lib", + "time": "2020-03-08T15:31:32+00:00" + }, + { + "name": "phenx/php-svg-lib", + "version": "v0.3.3", + "source": { + "type": "git", + "url": "https://github.com/PhenX/php-svg-lib.git", + "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", + "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", + "shasum": "" + }, + "require": { + "sabberworm/php-css-parser": "^8.3" + }, + "require-dev": { + "phpunit/phpunit": "^5.5|^6.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Svg\\": "src/Svg" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/PhenX/php-svg-lib", + "time": "2019-09-11T20:02:13+00:00" + }, { "name": "phpoption/phpoption", - "version": "1.7.4", + "version": "1.7.5", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "b2ada2ad5d8a32b89088b8adc31ecd2e3a13baf3" + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/b2ada2ad5d8a32b89088b8adc31ecd2e3a13baf3", - "reference": "b2ada2ad5d8a32b89088b8adc31ecd2e3a13baf3", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", "shasum": "" }, "require": { "php": "^5.5.9 || ^7.0 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.3", - "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0" + "bamarni/composer-bin-plugin": "^1.4.1", + "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { @@ -704,7 +941,7 @@ "type": "tidelift" } ], - "time": "2020-06-07T10:40:07+00:00" + "time": "2020-07-20T17:29:33+00:00" }, { "name": "pimple/pimple", @@ -1070,6 +1307,115 @@ ], "time": "2020-02-21T04:36:14+00:00" }, + { + "name": "sabberworm/php-css-parser", + "version": "8.3.1", + "source": { + "type": "git", + "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", + "reference": "d217848e1396ef962fb1997cf3e2421acba7f796" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/d217848e1396ef962fb1997cf3e2421acba7f796", + "reference": "d217848e1396ef962fb1997cf3e2421acba7f796", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "codacy/coverage": "^1.4", + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-0": { + "Sabberworm\\CSS": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], + "time": "2020-06-01T09:10:00+00:00" + }, + { + "name": "simplesoftwareio/simple-qrcode", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/SimpleSoftwareIO/simple-qrcode.git", + "reference": "151dd397426d9a6c0507c96e61ddd2ca1290ce1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SimpleSoftwareIO/simple-qrcode/zipball/151dd397426d9a6c0507c96e61ddd2ca1290ce1e", + "reference": "151dd397426d9a6c0507c96e61ddd2ca1290ce1e", + "shasum": "" + }, + "require": { + "bacon/bacon-qr-code": "2.0.0", + "ext-gd": "*", + "php": ">=7.2" + }, + "require-dev": { + "mockery/mockery": "~1", + "phpunit/phpunit": "~9" + }, + "suggest": { + "ext-imagick": "Allows the generation of PNG QrCodes.", + "illuminate/support": "Allows for use within Laravel." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "SimpleSoftwareIO\\QrCode\\ServiceProvider" + ], + "aliases": { + "QrCode": "SimpleSoftwareIO\\QrCode\\Facade" + } + } + }, + "autoload": { + "psr-4": { + "SimpleSoftwareIO\\QrCode\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Simple Software LLC", + "email": "support@simplesoftware.io" + } + ], + "description": "Simple QrCode is a QR code generator made for Laravel.", + "homepage": "http://www.simplesoftware.io", + "keywords": [ + "Simple", + "generator", + "laravel", + "qrcode", + "wrapper" + ], + "time": "2020-06-02T20:41:21+00:00" + }, { "name": "siu-toba/jwt-util", "version": "v1.0.3", @@ -1438,20 +1784,20 @@ }, { "name": "symfony/cache-contracts", - "version": "v1.1.7", + "version": "v1.1.10", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "af50d14ada9e4e82cfabfabdc502d144f89be0a1" + "reference": "8d5489c10ef90aa7413e4921fc3c0520e24cbed7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/af50d14ada9e4e82cfabfabdc502d144f89be0a1", - "reference": "af50d14ada9e4e82cfabfabdc502d144f89be0a1", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/8d5489c10ef90aa7413e4921fc3c0520e24cbed7", + "reference": "8d5489c10ef90aa7413e4921fc3c0520e24cbed7", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": ">=7.1.3", "psr/cache": "^1.0" }, "suggest": { @@ -1461,6 +1807,10 @@ "extra": { "branch-alias": { "dev-master": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -1492,7 +1842,21 @@ "interoperability", "standards" ], - "time": "2019-10-04T21:43:27+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-02T16:08:58+00:00" }, { "name": "symfony/config", @@ -1560,16 +1924,16 @@ }, { "name": "symfony/console", - "version": "v4.4.10", + "version": "v4.4.13", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "326b064d804043005526f5a0494cfb49edb59bb0" + "reference": "b39fd99b9297b67fb7633b7d8083957a97e1e727" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/326b064d804043005526f5a0494cfb49edb59bb0", - "reference": "326b064d804043005526f5a0494cfb49edb59bb0", + "url": "https://api.github.com/repos/symfony/console/zipball/b39fd99b9297b67fb7633b7d8083957a97e1e727", + "reference": "b39fd99b9297b67fb7633b7d8083957a97e1e727", "shasum": "" }, "require": { @@ -1647,20 +2011,20 @@ "type": "tidelift" } ], - "time": "2020-05-30T20:06:45+00:00" + "time": "2020-09-02T07:07:21+00:00" }, { "name": "symfony/filesystem", - "version": "v4.4.10", + "version": "v4.4.13", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b27f491309db5757816db672b256ea2e03677d30" + "reference": "27575bcbc68db1f6d06218891296572c9b845704" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b27f491309db5757816db672b256ea2e03677d30", - "reference": "b27f491309db5757816db672b256ea2e03677d30", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/27575bcbc68db1f6d06218891296572c9b845704", + "reference": "27575bcbc68db1f6d06218891296572c9b845704", "shasum": "" }, "require": { @@ -1711,24 +2075,24 @@ "type": "tidelift" } ], - "time": "2020-05-30T18:50:54+00:00" + "time": "2020-08-21T17:19:37+00:00" }, { "name": "symfony/finder", - "version": "v4.4.10", + "version": "v4.4.13", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "5729f943f9854c5781984ed4907bbb817735776b" + "reference": "2a78590b2c7e3de5c429628457c47541c58db9c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/5729f943f9854c5781984ed4907bbb817735776b", - "reference": "5729f943f9854c5781984ed4907bbb817735776b", + "url": "https://api.github.com/repos/symfony/finder/zipball/2a78590b2c7e3de5c429628457c47541c58db9c7", + "reference": "2a78590b2c7e3de5c429628457c47541c58db9c7", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.1.3" }, "type": "library", "extra": { @@ -1774,20 +2138,20 @@ "type": "tidelift" } ], - "time": "2020-03-27T16:54:36+00:00" + "time": "2020-08-17T09:56:45+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.17.1", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d" + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d", - "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", "shasum": "" }, "require": { @@ -1799,7 +2163,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1850,20 +2214,20 @@ "type": "tidelift" } ], - "time": "2020-06-06T08:46:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.17.1", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7110338d81ce1cbc3e273136e4574663627037a7" + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7110338d81ce1cbc3e273136e4574663627037a7", - "reference": "7110338d81ce1cbc3e273136e4574663627037a7", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a", + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a", "shasum": "" }, "require": { @@ -1875,7 +2239,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1927,20 +2291,20 @@ "type": "tidelift" } ], - "time": "2020-06-06T08:46:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.17.1", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fa0837fe02d617d31fbb25f990655861bb27bd1a" + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fa0837fe02d617d31fbb25f990655861bb27bd1a", - "reference": "fa0837fe02d617d31fbb25f990655861bb27bd1a", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca", + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca", "shasum": "" }, "require": { @@ -1949,7 +2313,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2003,20 +2367,20 @@ "type": "tidelift" } ], - "time": "2020-06-06T08:46:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.17.1", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "4a5b6bba3259902e386eb80dd1956181ee90b5b2" + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4a5b6bba3259902e386eb80dd1956181ee90b5b2", - "reference": "4a5b6bba3259902e386eb80dd1956181ee90b5b2", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981", "shasum": "" }, "require": { @@ -2025,7 +2389,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2083,24 +2447,24 @@ "type": "tidelift" } ], - "time": "2020-06-06T08:46:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/process", - "version": "v4.4.10", + "version": "v4.4.13", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "c714958428a85c86ab97e3a0c96db4c4f381b7f5" + "reference": "65e70bab62f3da7089a8d4591fb23fbacacb3479" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c714958428a85c86ab97e3a0c96db4c4f381b7f5", - "reference": "c714958428a85c86ab97e3a0c96db4c4f381b7f5", + "url": "https://api.github.com/repos/symfony/process/zipball/65e70bab62f3da7089a8d4591fb23fbacacb3479", + "reference": "65e70bab62f3da7089a8d4591fb23fbacacb3479", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.1.3" }, "type": "library", "extra": { @@ -2146,24 +2510,24 @@ "type": "tidelift" } ], - "time": "2020-05-30T20:06:45+00:00" + "time": "2020-07-23T08:31:43+00:00" }, { "name": "symfony/service-contracts", - "version": "v1.1.8", + "version": "v1.1.9", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf" + "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/ffc7f5692092df31515df2a5ecf3b7302b3ddacf", - "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b776d18b303a39f56c63747bcb977ad4b27aca26", + "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": ">=7.1.3", "psr/container": "^1.0" }, "suggest": { @@ -2173,6 +2537,10 @@ "extra": { "branch-alias": { "dev-master": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2204,24 +2572,38 @@ "interoperability", "standards" ], - "time": "2019-10-14T12:27:06+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-06T13:19:58+00:00" }, { "name": "symfony/var-exporter", - "version": "v4.4.10", + "version": "v4.4.13", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "f311af6e44fefedbd4f1e23e97607ef0f917bfcc" + "reference": "09f0aec4b8bfc25c1dd306e6203cf055c9886560" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/f311af6e44fefedbd4f1e23e97607ef0f917bfcc", - "reference": "f311af6e44fefedbd4f1e23e97607ef0f917bfcc", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/09f0aec4b8bfc25c1dd306e6203cf055c9886560", + "reference": "09f0aec4b8bfc25c1dd306e6203cf055c9886560", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.1.3" }, "require-dev": { "symfony/var-dumper": "^4.4.9|^5.0.9" @@ -2278,20 +2660,20 @@ "type": "tidelift" } ], - "time": "2020-06-01T01:10:09+00:00" + "time": "2020-07-05T09:39:30+00:00" }, { "name": "symfony/yaml", - "version": "v4.4.10", + "version": "v4.4.13", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "c2d2cc66e892322cfcc03f8f12f8340dbd7a3f8a" + "reference": "e2a69525b11a33be51cb00b8d6d13a9258a296b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/c2d2cc66e892322cfcc03f8f12f8340dbd7a3f8a", - "reference": "c2d2cc66e892322cfcc03f8f12f8340dbd7a3f8a", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e2a69525b11a33be51cb00b8d6d13a9258a296b1", + "reference": "e2a69525b11a33be51cb00b8d6d13a9258a296b1", "shasum": "" }, "require": { @@ -2351,7 +2733,7 @@ "type": "tidelift" } ], - "time": "2020-05-20T08:37:50+00:00" + "time": "2020-08-26T08:30:46+00:00" }, { "name": "unam-ar/tupa-core", @@ -2388,22 +2770,22 @@ }, { "name": "vlucas/phpdotenv", - "version": "v3.6.6", + "version": "v3.6.7", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "4669484ccbc38fe7c4e0c50456778f2010566aad" + "reference": "2065beda6cbe75e2603686907b2e45f6f3a5ad82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/4669484ccbc38fe7c4e0c50456778f2010566aad", - "reference": "4669484ccbc38fe7c4e0c50456778f2010566aad", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2065beda6cbe75e2603686907b2e45f6f3a5ad82", + "reference": "2065beda6cbe75e2603686907b2e45f6f3a5ad82", "shasum": "" }, "require": { "php": "^5.4 || ^7.0 || ^8.0", "phpoption/phpoption": "^1.5.2", - "symfony/polyfill-ctype": "^1.16" + "symfony/polyfill-ctype": "^1.17" }, "require-dev": { "ext-filter": "*", @@ -2457,7 +2839,7 @@ "type": "tidelift" } ], - "time": "2020-06-02T14:08:54+00:00" + "time": "2020-07-14T19:04:52+00:00" } ], "packages-dev": [], diff --git a/api-backend/src/UNAM/Tupa/Backend/API/Endpoints/v1/pases/pases.php b/api-backend/src/UNAM/Tupa/Backend/API/Endpoints/v1/pases/pases.php new file mode 100644 index 00000000..cd13ccc5 --- /dev/null +++ b/api-backend/src/UNAM/Tupa/Backend/API/Endpoints/v1/pases/pases.php @@ -0,0 +1,66 @@ +<?php + +use SIUToba\rest\rest; +use UNAM\Tupa\Backend\API\Factory; +use UNAM\Tupa\Core\Errors\PaseNotFound; + +class pases +{ + /** + * Se consume en GET /pases/{id}/pdf. + * + * @summary Retorna el PDF del pase + * @responses 200 {"string"} PDF del pase + * @responses 404 No existe el recurso + * @responses 500 Error interno del servidor + */ + public function get_pdf_list($id_visitante) + { + try { + $managerTC = Factory::getManagerTerminosCondiciones(); + $managerVisitante = Factory::getManagerVisitante(); + $visitante = $managerVisitante->getVisitante($id_visitante); + + if (!isset($visitante)) { + rest::response()->not_found(); + } + + $url = Factory::getConfiguracion()->getUrlPortalInstitucion() . "/visitas/" . $id_visitante; + $managerTC->generarPDF($url, $visitante); + } catch (PaseNotFound $e) { + Factory::getMainLogger()->error($e->getMessage()); + rest::response()->not_found(); + } catch (Exception $e) { + Factory::getMainLogger()->error($e->getMessage()); + rest::response()->error_negocio('Error interno del servidor', 500); + } + } + + /** + * Se consume en GET /pases/{id}/qr. + * + * @summary Retorna el QR del pase + * @responses 200 {"string"} QR del pase + * @responses 404 No existe el recurso + * @responses 500 Error interno del servidor + * @param $id_visitante + * @throws \SIUToba\rest\lib\rest_error + */ + public function get_qr_list($id_visitante) + { + try { + $manager = Factory::getManagerTerminosCondiciones(); + + $pase = $manager->getPaseQr($id_visitante); + + if (!empty($pase)) { + rest::response()->get([base64_encode($pase[0])]); + } else { + rest::response()->not_found(); + } + } catch (Exception $e) { + Factory::getMainLogger()->error($e->getMessage()); + rest::response()->error_negocio('Error interno del servidor', 500); + } + } +} diff --git a/api-backend/src/UNAM/Tupa/Backend/API/Endpoints/v1/terminos_condiciones/terminos_condiciones.php b/api-backend/src/UNAM/Tupa/Backend/API/Endpoints/v1/terminos_condiciones/terminos_condiciones.php index d67f4122..e034f569 100644 --- a/api-backend/src/UNAM/Tupa/Backend/API/Endpoints/v1/terminos_condiciones/terminos_condiciones.php +++ b/api-backend/src/UNAM/Tupa/Backend/API/Endpoints/v1/terminos_condiciones/terminos_condiciones.php @@ -7,6 +7,7 @@ use SIUToba\rest\rest; use UNAM\Tupa\Backend\API\Factory; use UNAM\Tupa\Core\Errors\TerminosCondicionesNotFound; use UNAM\Tupa\Core\Filtros\Filtro; +use UNAM\Tupa\Core\Negocio\Externos\Visita; class terminos_condiciones implements SIUToba\rest\lib\modelable { @@ -49,9 +50,30 @@ class terminos_condiciones implements SIUToba\rest\lib\modelable 'archivo' => array('type' => 'string',), ]; + $terminos_condiciones_aceptar = [ + 'tipo_visitante' => array( + 'type' => 'string', + 'required' => true, + 'enum' => Visita::tipos(), + '_validar' => array( + rest_validador::OBLIGATORIO, + rest_validador::TIPO_ENUM => Visita::tipos(), + ), + ), + 'visitante' => array( + 'type' => 'string', + '_validar' => array( + rest_validador::OBLIGATORIO, + ) + ) + ]; + + return ['TerminosCondiciones' => $terminos_condiciones, 'TerminosCondicionesEdit' => $terminos_condiciones_edit, - 'TerminosCondicionesArchivo' => $terminos_condiciones_archivo]; + 'TerminosCondicionesArchivo' => $terminos_condiciones_archivo, + 'TerminosCondicionesAceptar'=> $terminos_condiciones_aceptar + ]; } protected function get_spec_usuario($tipo = 'TerminosCondiciones') @@ -176,7 +198,6 @@ class terminos_condiciones implements SIUToba\rest\lib\modelable header('Content-Type: application/octet-stream'); header("Content-type: application/pdf"); header('Content-Disposition: attachment; filename=download.pdf'); - //header('Content-Disposition: inline'); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); @@ -266,7 +287,7 @@ class terminos_condiciones implements SIUToba\rest\lib\modelable * * @summary Actualiza el archivo de un termino y condición * @param_body $archivo string [required] archivo de un termino y condición - * @responses 200 {"$ref": "UsuarioMostrar"} Usuario modificado + * @responses 200 {"$ref": "TerminosCondicionesArchivo"} Terminos Condiciones Archivo * @responses 404 No se pudo encontrar el termino y condición * @responses 400 Error en los datos ingresados para el termino y condición. * @responses 500 Error el sistema no tiene permisos para modificar el archivo en el sistema de archivos @@ -303,6 +324,51 @@ class terminos_condiciones implements SIUToba\rest\lib\modelable } } + /** + * Se consume en PUT /terminos-condiciones/{codigo}/aceptar. + * + * @summary Actualiza la aceptación de un termino y condición para un visitante + * @param_body $visitante TerminosCondicionesAceptar [required] id del visitante + * @responses 200 {"$ref": "TerminosCondicionesAceptar"} Terminos Condiciones Aceptar + * @responses 404 No se pudo encontrar el termino y condición + * @responses 400 Error en los datos ingresados para el termino y condición. + */ + public function put_aceptar_list($codigo) + { + $visitante = $this->procesar_input_edicion('TerminosCondicionesAceptar'); + + if (isset($codigo)) { + try { + $manager = Factory::getManagerTerminosCondiciones(); + $terminoCondicion = $manager->getTerminoCondicion($codigo); + $terminoCondicion->setIdVisitante($visitante['visitante']); + $terminoCondicion->setTipoVisitante($visitante['tipo_visitante']); + + $url = Factory::getConfiguracion()->getUrlPortalInstitucion() . "/visitas/" . $visitante['visitante']; + + $qr = $manager->generarQR($url); + + $terminoCondicion->setPase($qr); + + rest::response()->put([ "respuesta" => true ]); + + if (!isset($terminoCondicion)) { + rest::response()->not_found(); + } + + $codigo = $manager->aceptarTerminosCondiciones($terminoCondicion); + + if (!isset($codigo)) { + rest::response()->not_found(); + } + } catch (Error $e) { + rest::response()->error_negocio(array($e->getMessage()), $e->getCode()); + } + } else { + rest::response()->not_found(); + } + } + private function get_filtro_get_list() { $filtro = new Filtro(); diff --git a/backend/db/migrations/1.0/20200908120213_visitante.php b/backend/db/migrations/1.0/20200908120213_visitante.php index f71ef2c2..a4bfa723 100644 --- a/backend/db/migrations/1.0/20200908120213_visitante.php +++ b/backend/db/migrations/1.0/20200908120213_visitante.php @@ -47,6 +47,7 @@ class Visitante extends AbstractMigration ->addColumn('id_visitante', 'char', ['limit' => 36]) ->addColumn('tipo_visitante', 'string', ['limit' => 10]) ->addColumn('fecha', 'timestamp', ['default' => 'CURRENT_TIMESTAMP']) + ->addColumn('pase', 'text', ['null' => true]) ->addForeignKey('id_visitante', 'visitante', 'identificador') ->create(); } diff --git a/core/src/UNAM/Tupa/Core/Errors/PaseNotFound.php b/core/src/UNAM/Tupa/Core/Errors/PaseNotFound.php new file mode 100644 index 00000000..7b10bca2 --- /dev/null +++ b/core/src/UNAM/Tupa/Core/Errors/PaseNotFound.php @@ -0,0 +1,12 @@ +<?php declare(strict_types=1); + +namespace UNAM\Tupa\Core\Errors; + +/** + * Términos y Condiciones no encontrado + * + * @codeCoverageIgnore + */ +class PaseNotFound extends ErrorTupa +{ +} \ No newline at end of file diff --git a/core/src/UNAM/Tupa/Core/Manager/ManagerTerminosCondiciones.php b/core/src/UNAM/Tupa/Core/Manager/ManagerTerminosCondiciones.php index 3dbf2835..0340a877 100644 --- a/core/src/UNAM/Tupa/Core/Manager/ManagerTerminosCondiciones.php +++ b/core/src/UNAM/Tupa/Core/Manager/ManagerTerminosCondiciones.php @@ -3,9 +3,12 @@ namespace UNAM\Tupa\Core\Manager; +use Dompdf\Dompdf; +use SimpleSoftwareIO\QrCode\Generator; use UNAM\Tupa\Core\Errors\ErrorTupa; use UNAM\Tupa\Core\Errors\TerminosCondicionesNotFound; use UNAM\Tupa\Core\Filtros\Filtro; +use UNAM\Tupa\Core\Negocio\Externos\Visitante; use UNAM\Tupa\Core\Negocio\TerminosCondiciones; class ManagerTerminosCondiciones extends Manager @@ -255,4 +258,123 @@ class ManagerTerminosCondiciones extends Manager throw new ErrorTupa($e->getMessage(), $e->getCode()); } } + + /** + * Devuelve si existe o no un registro de Aceptación de Terminos y Condiciones + * @param $id + * @return bool + */ + public function getExisteAceptarTerminosCondiciones($terminoCondicion) + { + $existe = false; + $params = [ + "id_visitante" => $terminoCondicion->getIdVisitante(), + "tipo_visitante" => $terminoCondicion->getTipoVisitante(), + "id_terminos_condiciones" => $terminoCondicion->getCodigo(), + ]; + + $sql = "SELECT id + FROM aceptacion_terminos_condiciones + WHERE id_visitante = :id_visitante + AND tipo_visitante = :tipo_visitante + AND id_terminos_condiciones = :id_terminos_condiciones;"; + + $result = $this->db->sentencia_consultar_fila($sql, $params); + + if ($result) { + $existe = true; + } + + return $existe; + } + + public function aceptarTerminosCondiciones(TerminosCondiciones $terminoCondicion) + { + $params = [ + "id_visitante" => $terminoCondicion->getIdVisitante(), + "tipo_visitante" => $terminoCondicion->getTipoVisitante(), + "id_terminos_condiciones" => $terminoCondicion->getCodigo(), + "pase" => $terminoCondicion->getPase() + ]; + + try { + $existe = $this->getExisteAceptarTerminosCondiciones($terminoCondicion); + + if ($existe) { + $sql = "UPDATE aceptacion_terminos_condiciones + SET id_visitante = :id_visitante, + tipo_visitante = :tipo_visitante, + pase = :pase, + fecha = Now() + WHERE id_terminos_condiciones = :id_terminos_condiciones"; + } else { + $sql = "INSERT INTO aceptacion_terminos_condiciones + (id_terminos_condiciones, + id_visitante, + tipo_visitante, + pase, + fecha) + VALUES (:id_terminos_condiciones, + :id_visitante, + :tipo_visitante, + :pase, + Now())"; + } + return $this->db->sentencia_ejecutar($sql, $params); + } catch (\Exception $e) { + throw new ErrorTupa($e->getMessage(), $e->getCode()); + } + } + + /** + * Genera el QR para un visitante + * @param $url + * @return string|void + */ + public function generarQR($url) + { + $qrcode = new Generator; + return $qrcode->size(300)->generate($url); + } + + /** + * Genera un PDF con el QR y datos del visitante + * @param $urlQR string Url del QR + * @param Visitante $visitante + */ + public function generarPDF($urlQR, Visitante $visitante) + { + $img = base64_encode($this->generarQR($urlQR)); + $nombre = strtoupper($visitante->getDatosPersonales()->getApellido()." ".$visitante->getDatosPersonales()->getNombre()); + $documento = strtoupper($visitante->getDatosPersonales()->getDocumentos()[0]->getTipo() ." ". $visitante->getDatosPersonales()->getDocumentos()[0]->getNumero()); + + $dompdf = new Dompdf(); + $html = "<div style='text-align: center'>"; + $html .= "<h1><strong>Pase UNaM</strong></h1>"; + $html .= "<img src='data:image/svg+xml;base64,{$img}'><br>"; + $html .= "<h2><strong>{$nombre}</strong></h2>"; + $html .= "<h2><strong>{$documento}</strong></h2>"; + $html .= "</div>"; + + $dompdf->loadHtml($html); + $dompdf->setPaper('A4', 'landscape'); + $dompdf->render(); + + $dompdf->stream(); + } + + public function getPaseQr($id_visitante) + { + $params = [ + "id_visitante" => $id_visitante + ]; + + $sql = "SELECT pase + FROM aceptacion_terminos_condiciones + WHERE id_visitante = :id_visitante"; + + $result = $this->db->sentencia_consultar_fila($sql, $params); + + return $result; + } } diff --git a/core/src/UNAM/Tupa/Core/Negocio/TerminosCondiciones.php b/core/src/UNAM/Tupa/Core/Negocio/TerminosCondiciones.php index ce609b05..9756f539 100644 --- a/core/src/UNAM/Tupa/Core/Negocio/TerminosCondiciones.php +++ b/core/src/UNAM/Tupa/Core/Negocio/TerminosCondiciones.php @@ -40,6 +40,21 @@ class TerminosCondiciones */ private $archivo; + /** + * @var string + */ + private $tipoVisitante; + + /** + * @var string + */ + private $idVisitante; + + /** + * @var string + */ + private $pase; + public function __construct() { $this->codigo = null; @@ -142,6 +157,46 @@ class TerminosCondiciones $this->archivo = $archivo; } + public function getTipoVisitante() + { + return $this->tipoVisitante; + } + + /** + * @param $tipoVisitante + */ + public function setTipoVisitante($tipoVisitante) + { + $this->tipoVisitante = $tipoVisitante; + } + + public function getIdVisitante() + { + return $this->idVisitante; + } + + /** + * @param $idVisitante + */ + public function setIdVisitante($idVisitante) + { + $this->idVisitante = $idVisitante; + } + + public function getPase() + { + return $this->pase; + } + + /** + * @param $pase + */ + public function setPase($pase) + { + $this->pase = $pase; + } + + /** * Hidrata los atributos del objeto a partir de $datos * -- GitLab From f914e57e3079990334ba8d6205ba1fdfde6b873e Mon Sep 17 00:00:00 2001 From: "luciano.cassettai" <luciano.cassettai@campus.unam.edu.ar> Date: Fri, 18 Sep 2020 09:43:16 -0300 Subject: [PATCH 04/20] Fix: email laboral en solicitud --- frontend/src/components/EmailForm.js | 1 + frontend/src/components/PersonalDataForm.js | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/EmailForm.js b/frontend/src/components/EmailForm.js index 514c486d..7f21db6d 100644 --- a/frontend/src/components/EmailForm.js +++ b/frontend/src/components/EmailForm.js @@ -117,6 +117,7 @@ export default function EmailForm(props) { const { handleSubmit, errors, control } = useForm(defaultValues); const onSubmit = (data) => { + localStorage.setItem("emailContacto", data.email + "@" + data.dominio); recaptchaRef.current.reset(); const requestOptions = { mode: "cors", diff --git a/frontend/src/components/PersonalDataForm.js b/frontend/src/components/PersonalDataForm.js index e897c645..27a774b5 100644 --- a/frontend/src/components/PersonalDataForm.js +++ b/frontend/src/components/PersonalDataForm.js @@ -130,8 +130,8 @@ export default function PersonalDataForm(props) { const DatosPersonales = { contacto: { - tipo: "email", - valor: data.email, + tipo: "LABORAL", + valor: localStorage.getItem("emailContacto"), }, datos_personales: { nombre: data.nombres, -- GitLab From a23ef102709581f8ad228d70e5552f440a31aa28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sena?= <jsena@campus.unam.edu.ar> Date: Fri, 18 Sep 2020 13:00:10 -0300 Subject: [PATCH 05/20] Issue #46 metodo devuele url de pdf tyc --- visitas/app/Http/Controllers/VisitasController.php | 10 +++++++++- visitas/app/Repositorios/GuzzleHttpRequest.php | 14 +------------- visitas/app/Repositorios/TupaApi.php | 5 +---- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/visitas/app/Http/Controllers/VisitasController.php b/visitas/app/Http/Controllers/VisitasController.php index e769e5b4..64a01875 100644 --- a/visitas/app/Http/Controllers/VisitasController.php +++ b/visitas/app/Http/Controllers/VisitasController.php @@ -35,10 +35,12 @@ class VisitasController extends Controller $codigoQrEjemplo = $this->generar_qr("www.unam.edu.ar/visitas", "124", "tosv2"); $codigoqr = $codigoQrEjemplo; $dv = $this->visitas->getVisitante($id['respuesta']); + $nombre = $dv['datos_personales']['nombre']; $apellido = $dv['datos_personales']['apellido']; $dni = $dv['datos_personales']['documentos'][0]['numero']; - return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni')); + $pdf = $this->getPDFTyCVigente(); + return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni','pdf')); } public function getPDFTyCVigente() @@ -47,6 +49,12 @@ class VisitasController extends Controller return $this->visitas->getPDFToS($id[0]["codigo"]); } + public function aceptarTyC($id) + { + $id = $this->visitas->getToS(); + return $this->visitas->getPDFToS($id[0]["codigo"]); + } + private function generar_qr(string $link = null, string $idVisitante = null, string $idTOS) { diff --git a/visitas/app/Repositorios/GuzzleHttpRequest.php b/visitas/app/Repositorios/GuzzleHttpRequest.php index d0f74eb4..cc16ae62 100644 --- a/visitas/app/Repositorios/GuzzleHttpRequest.php +++ b/visitas/app/Repositorios/GuzzleHttpRequest.php @@ -5,7 +5,7 @@ namespace App\Repositorios; use GuzzleHttp\Client; - +use GuzzleHttp\Exception\GuzzleException; class GuzzleHttpRequest { protected $client; @@ -25,17 +25,5 @@ class GuzzleHttpRequest $response = $this->client->request('POST', $url,$datos); return json_decode($response->getBody(),true); } - public function getFile($url,$auth) { - $resource = fopen('tycCovid19.pdf', 'w'); - /*return $this->client->request('GET', $url, [ - 'headers' => [ - 'Authorization'=> 'Basic ' . $auth, - 'Content-Type' => 'application/pdf' - ], - 'sink' => $resource, - ]);*/ - return $this->client->request('GET', $url,$auth); - } - } diff --git a/visitas/app/Repositorios/TupaApi.php b/visitas/app/Repositorios/TupaApi.php index bcc69db8..605d51b9 100644 --- a/visitas/app/Repositorios/TupaApi.php +++ b/visitas/app/Repositorios/TupaApi.php @@ -85,10 +85,7 @@ class TupaApi extends GuzzleHttpRequest { $this->getCredApi(); $url = $this->getUrlApi() . "terminos-condiciones/{$id}/archivo"; - //$auth = base64_encode("{$this->getUser()}:{$this->getPass()}"); - $auth = ['auth' => [$this->getUser(), $this->getPass()]]; - dd($this->getFile($url, $auth)); - //return $this->getFile($url, $auth); + return $url; } public function postVisitante($visita=array()) -- GitLab From 25b1c23ee491e326f8901e2d9abcea3f7ac8e66a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sena?= <jsena@campus.unam.edu.ar> Date: Thu, 17 Sep 2020 15:36:01 -0300 Subject: [PATCH 06/20] Issue #46 - Se agrega post de Visita --- .../Http/Controllers/VisitasController.php | 14 ++++++++-- .../app/Repositorios/GuzzleHttpRequest.php | 5 ++-- visitas/app/Repositorios/TupaApi.php | 26 ++++++++++++------- visitas/routes/web.php | 2 +- 4 files changed, 33 insertions(+), 14 deletions(-) diff --git a/visitas/app/Http/Controllers/VisitasController.php b/visitas/app/Http/Controllers/VisitasController.php index fe20c9fb..4e89b3be 100644 --- a/visitas/app/Http/Controllers/VisitasController.php +++ b/visitas/app/Http/Controllers/VisitasController.php @@ -35,19 +35,29 @@ class VisitasController extends Controller //TODO: Cambiar con los datos que retorna la api $codigoQrEjemplo = $this->generar_qr("www.unam.edu.ar/visitas", "124", "tosv2"); $codigoqr = $codigoQrEjemplo; - + //$codigoqr = $datos->codigoqr; $nombre =$datos->nombre; $apellido =$datos->apellido; $dni=$datos->dni; - return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni')); + $TyC = $this->visitas->getToS(); + $TyC=$TyC[0]['contenido']; + return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni','TyC')); } private function generar_qr(string $link = null, string $idVisitante = null, string $idTOS) { + if (isset($link) && isset($idVisitante) && isset($idTOS)) { $url = $link . "/" . $idVisitante . "/" . $idTOS; return \QrCode::size(300)->generate($url); } } + + /*Este metodo devolveria Ruta al archivo pdf*/ + function getTyCVigentePDF(){ + $TyC = $this->visitas->getPdfTyC(); + $TyC=$TyC[0]['contenido']; + return $TyC; + } } diff --git a/visitas/app/Repositorios/GuzzleHttpRequest.php b/visitas/app/Repositorios/GuzzleHttpRequest.php index d9c44a19..d767746b 100644 --- a/visitas/app/Repositorios/GuzzleHttpRequest.php +++ b/visitas/app/Repositorios/GuzzleHttpRequest.php @@ -16,11 +16,12 @@ class GuzzleHttpRequest public function get($url,$auth) { $response = $this->client->request('GET', $url,$auth); - return json_decode($response->getBody()->getContents()); + return json_decode($response->getBody(),true); } public function post($url,$datos) { - $this->client->request('POST', $url,$datos); + $response = $this->client->request('POST', $url,$datos); + return json_decode($response->getBody(),true); } } diff --git a/visitas/app/Repositorios/TupaApi.php b/visitas/app/Repositorios/TupaApi.php index 03045f9a..655b3391 100644 --- a/visitas/app/Repositorios/TupaApi.php +++ b/visitas/app/Repositorios/TupaApi.php @@ -59,29 +59,30 @@ class TupaApi extends GuzzleHttpRequest } - public function getCredenciales(){ + public function getCredAPI(){ $this->credenciales = json_decode(env('CREDENCIALES_API_BASIC_TUPA')); $this->setUser($this->credenciales[0][0]); $this->setPass($this->credenciales[0][1]); $this->setUrlApi($this->credenciales[0][2]); } - public function getVisitantes() + public function getToS() { - - $url = $this->getUrlApi() . '/vistantes'; + $this->getCredApi(); + $url = $this->getUrlApi() . '/terminos-condiciones'; $auth = ['auth' => [$this->getUser(), $this->getPass()]]; return $this->get($url, $auth); } - public function getVisitante($id) + public function getPdfPase($id) { return $this->get("visitantes/{$id}"); } + public function postVisitante($visita=array()) { - $this->getCredenciales(); + $this->getCredApi(); $url = $this->getUrlApi() . '/visitantes'; $datos = array ( @@ -133,9 +134,16 @@ class TupaApi extends GuzzleHttpRequest ); $datos = ['body' => json_encode($datos), 'auth' => [$this->getUser(), $this->getPass()]]; - $this->post($url,$datos); - + $visita = $this->post($url,$datos); + $this->postVisita($visita['respuesta']); + return $visita; } - + function postVisita($id){ + $this->getCredApi(); + $tos = $this->getToS(); + $url = $this->getUrlApi() . 'visitas/'.$id; + $datos = ['body' => json_encode(['terminos_condiciones'=>$tos[0]['codigo'],'sede'=>'1','tipo_visitante'=>'EXTERNO']), 'auth' => [$this->getUser(), $this->getPass()]]; + $this->post($url,$datos); + } } diff --git a/visitas/routes/web.php b/visitas/routes/web.php index 9f4effc4..3394704e 100644 --- a/visitas/routes/web.php +++ b/visitas/routes/web.php @@ -22,7 +22,7 @@ Route::match(['get', 'post'],'/solicitudPase', 'VisitasController@solicitudPase' Route::post('/visitas','VisitasController@altaVisita')->name('visita_crear'); -Route::get('/acreditacionCOVID19', 'VisitasController@acreditar')->name('acreditacion'); +Route::get('/pdf-tyc', 'VisitasController@getTyCVigentePDF')->name('pdf-tyc'); //Route::resource('visitas', 'VisitasController'); -- GitLab From 8fd3c8c8b0dde650026835848d389d3a94551142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sena?= <jsena@campus.unam.edu.ar> Date: Fri, 18 Sep 2020 10:50:19 -0300 Subject: [PATCH 07/20] Issue #46 - avances conexion con api --- .../Http/Controllers/VisitasController.php | 31 +++++++++---------- visitas/app/Providers/AppServiceProvider.php | 3 +- .../app/Repositorios/GuzzleHttpRequest.php | 14 +++++++++ visitas/app/Repositorios/TupaApi.php | 29 ++++++++--------- visitas/routes/web.php | 3 +- 5 files changed, 47 insertions(+), 33 deletions(-) diff --git a/visitas/app/Http/Controllers/VisitasController.php b/visitas/app/Http/Controllers/VisitasController.php index 4e89b3be..e769e5b4 100644 --- a/visitas/app/Http/Controllers/VisitasController.php +++ b/visitas/app/Http/Controllers/VisitasController.php @@ -26,23 +26,25 @@ class VisitasController extends Controller public function altaVisita(Request $request) { - $this->visitas->postVisitante($request); - return $this->acreditar($request); + $visita = $this->visitas->postVisitante($request); + return $this->acreditar($visita); } - public function acreditar($datos=null) + public function acreditar($id) { - //TODO: Cambiar con los datos que retorna la api $codigoQrEjemplo = $this->generar_qr("www.unam.edu.ar/visitas", "124", "tosv2"); $codigoqr = $codigoQrEjemplo; + $dv = $this->visitas->getVisitante($id['respuesta']); + $nombre = $dv['datos_personales']['nombre']; + $apellido = $dv['datos_personales']['apellido']; + $dni = $dv['datos_personales']['documentos'][0]['numero']; + return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni')); + } - //$codigoqr = $datos->codigoqr; - $nombre =$datos->nombre; - $apellido =$datos->apellido; - $dni=$datos->dni; - $TyC = $this->visitas->getToS(); - $TyC=$TyC[0]['contenido']; - return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni','TyC')); + public function getPDFTyCVigente() + { + $id = $this->visitas->getToS(); + return $this->visitas->getPDFToS($id[0]["codigo"]); } private function generar_qr(string $link = null, string $idVisitante = null, string $idTOS) @@ -54,10 +56,5 @@ class VisitasController extends Controller } } - /*Este metodo devolveria Ruta al archivo pdf*/ - function getTyCVigentePDF(){ - $TyC = $this->visitas->getPdfTyC(); - $TyC=$TyC[0]['contenido']; - return $TyC; - } + } diff --git a/visitas/app/Providers/AppServiceProvider.php b/visitas/app/Providers/AppServiceProvider.php index 9222ee9d..42d3da74 100644 --- a/visitas/app/Providers/AppServiceProvider.php +++ b/visitas/app/Providers/AppServiceProvider.php @@ -15,8 +15,9 @@ class AppServiceProvider extends ServiceProvider public function register() { $this->app->singleton('GuzzleHttp\Client',function(){ + $credenciales = json_decode(env('CREDENCIALES_API_BASIC_TUPA')); return new Client([ - 'base_uri' => 'http://localhost:9002/api/v1/', + 'base_uri' => $credenciales[0][0], ]); }); } diff --git a/visitas/app/Repositorios/GuzzleHttpRequest.php b/visitas/app/Repositorios/GuzzleHttpRequest.php index d767746b..d0f74eb4 100644 --- a/visitas/app/Repositorios/GuzzleHttpRequest.php +++ b/visitas/app/Repositorios/GuzzleHttpRequest.php @@ -15,6 +15,7 @@ class GuzzleHttpRequest } public function get($url,$auth) { + $response = $this->client->request('GET', $url,$auth); return json_decode($response->getBody(),true); } @@ -24,4 +25,17 @@ class GuzzleHttpRequest $response = $this->client->request('POST', $url,$datos); return json_decode($response->getBody(),true); } + public function getFile($url,$auth) { + $resource = fopen('tycCovid19.pdf', 'w'); + /*return $this->client->request('GET', $url, [ + 'headers' => [ + 'Authorization'=> 'Basic ' . $auth, + 'Content-Type' => 'application/pdf' + ], + 'sink' => $resource, + ]);*/ + return $this->client->request('GET', $url,$auth); + } + } + diff --git a/visitas/app/Repositorios/TupaApi.php b/visitas/app/Repositorios/TupaApi.php index 655b3391..bcc69db8 100644 --- a/visitas/app/Repositorios/TupaApi.php +++ b/visitas/app/Repositorios/TupaApi.php @@ -58,7 +58,6 @@ class TupaApi extends GuzzleHttpRequest $this->urlApi = $urlApi; } - public function getCredAPI(){ $this->credenciales = json_decode(env('CREDENCIALES_API_BASIC_TUPA')); $this->setUser($this->credenciales[0][0]); @@ -66,6 +65,14 @@ class TupaApi extends GuzzleHttpRequest $this->setUrlApi($this->credenciales[0][2]); } + public function getVisitante($id){ + $url = $this->getUrlApi() . '/visitantes/'.$id; + $auth = ['auth' => [$this->getUser(), $this->getPass()]]; + return $this->get($url, $auth); + } + /* + * + * */ public function getToS() { $this->getCredApi(); @@ -74,12 +81,16 @@ class TupaApi extends GuzzleHttpRequest return $this->get($url, $auth); } - public function getPdfPase($id) + public function getPDFToS($id) { - return $this->get("visitantes/{$id}"); + $this->getCredApi(); + $url = $this->getUrlApi() . "terminos-condiciones/{$id}/archivo"; + //$auth = base64_encode("{$this->getUser()}:{$this->getPass()}"); + $auth = ['auth' => [$this->getUser(), $this->getPass()]]; + dd($this->getFile($url, $auth)); + //return $this->getFile($url, $auth); } - public function postVisitante($visita=array()) { $this->getCredApi(); @@ -132,18 +143,8 @@ class TupaApi extends GuzzleHttpRequest ), ), ); - $datos = ['body' => json_encode($datos), 'auth' => [$this->getUser(), $this->getPass()]]; $visita = $this->post($url,$datos); - $this->postVisita($visita['respuesta']); return $visita; } - - function postVisita($id){ - $this->getCredApi(); - $tos = $this->getToS(); - $url = $this->getUrlApi() . 'visitas/'.$id; - $datos = ['body' => json_encode(['terminos_condiciones'=>$tos[0]['codigo'],'sede'=>'1','tipo_visitante'=>'EXTERNO']), 'auth' => [$this->getUser(), $this->getPass()]]; - $this->post($url,$datos); - } } diff --git a/visitas/routes/web.php b/visitas/routes/web.php index 3394704e..acd1b8e9 100644 --- a/visitas/routes/web.php +++ b/visitas/routes/web.php @@ -22,7 +22,8 @@ Route::match(['get', 'post'],'/solicitudPase', 'VisitasController@solicitudPase' Route::post('/visitas','VisitasController@altaVisita')->name('visita_crear'); -Route::get('/pdf-tyc', 'VisitasController@getTyCVigentePDF')->name('pdf-tyc'); +Route::get('/pdf-tyc', 'VisitasController@getPDFTyCVigente')->name('pdf-tyc'); + //Route::resource('visitas', 'VisitasController'); -- GitLab From f97798d2d8ee2989a24b219a616ef27ccb0359da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sena?= <jsena@campus.unam.edu.ar> Date: Fri, 18 Sep 2020 13:00:10 -0300 Subject: [PATCH 08/20] Issue #46 metodo devuele url de pdf tyc --- visitas/app/Http/Controllers/VisitasController.php | 10 +++++++++- visitas/app/Repositorios/GuzzleHttpRequest.php | 14 +------------- visitas/app/Repositorios/TupaApi.php | 5 +---- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/visitas/app/Http/Controllers/VisitasController.php b/visitas/app/Http/Controllers/VisitasController.php index e769e5b4..64a01875 100644 --- a/visitas/app/Http/Controllers/VisitasController.php +++ b/visitas/app/Http/Controllers/VisitasController.php @@ -35,10 +35,12 @@ class VisitasController extends Controller $codigoQrEjemplo = $this->generar_qr("www.unam.edu.ar/visitas", "124", "tosv2"); $codigoqr = $codigoQrEjemplo; $dv = $this->visitas->getVisitante($id['respuesta']); + $nombre = $dv['datos_personales']['nombre']; $apellido = $dv['datos_personales']['apellido']; $dni = $dv['datos_personales']['documentos'][0]['numero']; - return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni')); + $pdf = $this->getPDFTyCVigente(); + return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni','pdf')); } public function getPDFTyCVigente() @@ -47,6 +49,12 @@ class VisitasController extends Controller return $this->visitas->getPDFToS($id[0]["codigo"]); } + public function aceptarTyC($id) + { + $id = $this->visitas->getToS(); + return $this->visitas->getPDFToS($id[0]["codigo"]); + } + private function generar_qr(string $link = null, string $idVisitante = null, string $idTOS) { diff --git a/visitas/app/Repositorios/GuzzleHttpRequest.php b/visitas/app/Repositorios/GuzzleHttpRequest.php index d0f74eb4..cc16ae62 100644 --- a/visitas/app/Repositorios/GuzzleHttpRequest.php +++ b/visitas/app/Repositorios/GuzzleHttpRequest.php @@ -5,7 +5,7 @@ namespace App\Repositorios; use GuzzleHttp\Client; - +use GuzzleHttp\Exception\GuzzleException; class GuzzleHttpRequest { protected $client; @@ -25,17 +25,5 @@ class GuzzleHttpRequest $response = $this->client->request('POST', $url,$datos); return json_decode($response->getBody(),true); } - public function getFile($url,$auth) { - $resource = fopen('tycCovid19.pdf', 'w'); - /*return $this->client->request('GET', $url, [ - 'headers' => [ - 'Authorization'=> 'Basic ' . $auth, - 'Content-Type' => 'application/pdf' - ], - 'sink' => $resource, - ]);*/ - return $this->client->request('GET', $url,$auth); - } - } diff --git a/visitas/app/Repositorios/TupaApi.php b/visitas/app/Repositorios/TupaApi.php index bcc69db8..605d51b9 100644 --- a/visitas/app/Repositorios/TupaApi.php +++ b/visitas/app/Repositorios/TupaApi.php @@ -85,10 +85,7 @@ class TupaApi extends GuzzleHttpRequest { $this->getCredApi(); $url = $this->getUrlApi() . "terminos-condiciones/{$id}/archivo"; - //$auth = base64_encode("{$this->getUser()}:{$this->getPass()}"); - $auth = ['auth' => [$this->getUser(), $this->getPass()]]; - dd($this->getFile($url, $auth)); - //return $this->getFile($url, $auth); + return $url; } public function postVisitante($visita=array()) -- GitLab From 6989708085aa8903d0042e7fba663b7a8819db49 Mon Sep 17 00:00:00 2001 From: "luciano.cassettai" <luciano.cassettai@campus.unam.edu.ar> Date: Fri, 18 Sep 2020 13:17:44 -0300 Subject: [PATCH 09/20] ADD: aceptacion de TOS y GET del pase QR --- .../Http/Controllers/VisitasController.php | 15 ++---------- .../app/Repositorios/GuzzleHttpRequest.php | 18 +++++++++++++++ visitas/app/Repositorios/TupaApi.php | 23 +++++++++++++++++++ 3 files changed, 43 insertions(+), 13 deletions(-) diff --git a/visitas/app/Http/Controllers/VisitasController.php b/visitas/app/Http/Controllers/VisitasController.php index 64a01875..864dbde5 100644 --- a/visitas/app/Http/Controllers/VisitasController.php +++ b/visitas/app/Http/Controllers/VisitasController.php @@ -27,13 +27,13 @@ class VisitasController extends Controller public function altaVisita(Request $request) { $visita = $this->visitas->postVisitante($request); + $respuesta = $this->visitas->putAceptarTerminos($visita['respuesta'],$idTosVigente); return $this->acreditar($visita); } public function acreditar($id) { - $codigoQrEjemplo = $this->generar_qr("www.unam.edu.ar/visitas", "124", "tosv2"); - $codigoqr = $codigoQrEjemplo; + $codigoqr = base64_decode($this->visitas->getPaseQr($id['respuesta'])[0]);; $dv = $this->visitas->getVisitante($id['respuesta']); $nombre = $dv['datos_personales']['nombre']; @@ -54,15 +54,4 @@ class VisitasController extends Controller $id = $this->visitas->getToS(); return $this->visitas->getPDFToS($id[0]["codigo"]); } - - private function generar_qr(string $link = null, string $idVisitante = null, string $idTOS) - { - - if (isset($link) && isset($idVisitante) && isset($idTOS)) { - $url = $link . "/" . $idVisitante . "/" . $idTOS; - return \QrCode::size(300)->generate($url); - } - } - - } diff --git a/visitas/app/Repositorios/GuzzleHttpRequest.php b/visitas/app/Repositorios/GuzzleHttpRequest.php index cc16ae62..e9d0a741 100644 --- a/visitas/app/Repositorios/GuzzleHttpRequest.php +++ b/visitas/app/Repositorios/GuzzleHttpRequest.php @@ -25,5 +25,23 @@ class GuzzleHttpRequest $response = $this->client->request('POST', $url,$datos); return json_decode($response->getBody(),true); } + + public function put($url,$datos) + { + $response = $this->client->request('PUT', $url,$datos); + return json_decode($response->getBody(),true); + } + + public function getFile($url,$auth) { + $resource = fopen('tycCovid19.pdf', 'w'); + /*return $this->client->request('GET', $url, [ + 'headers' => [ + 'Authorization'=> 'Basic ' . $auth, + 'Content-Type' => 'application/pdf' + ], + 'sink' => $resource, + ]);*/ + return $this->client->request('GET', $url,$auth); + } } diff --git a/visitas/app/Repositorios/TupaApi.php b/visitas/app/Repositorios/TupaApi.php index 605d51b9..5d208bd0 100644 --- a/visitas/app/Repositorios/TupaApi.php +++ b/visitas/app/Repositorios/TupaApi.php @@ -81,6 +81,29 @@ class TupaApi extends GuzzleHttpRequest return $this->get($url, $auth); } + public function getPaseQr($id_visitante) + { + $this->getCredApi(); + $url = $this->getUrlApi () . "/pases/$id_visitante/qr"; + $auth = ['auth' => [$this->getUser(), $this->getPass()]]; + return $this->get($url, $auth); + } + + public function putAceptarTerminos($id_visitante,$idTosVigente){ + $this->getCredApi(); + $url = $this->getUrlApi() . "/terminos-condiciones/$idTosVigente/aceptar"; + + $datos = array ( + 'tipo_visitante' => 'EXTERNO', + 'visitante' => $id_visitante + ); + + $datos = ['body' => json_encode($datos), 'auth' => [$this->getUser(), $this->getPass()]]; + + $visita = $this->put($url,$datos); + return $visita; + } + public function getPDFToS($id) { $this->getCredApi(); -- GitLab From b7d7c4695eb2ab2113f6066aaba8702c74874f3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sena?= <jsena@campus.unam.edu.ar> Date: Mon, 21 Sep 2020 10:56:42 -0300 Subject: [PATCH 10/20] Mejora en get de TyC - Se quita boton "Enviar por email" --- visitas/app/Repositorios/TupaApi.php | 2 +- visitas/resources/views/acreditacion.blade.php | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/visitas/app/Repositorios/TupaApi.php b/visitas/app/Repositorios/TupaApi.php index d1237e3f..e0356288 100644 --- a/visitas/app/Repositorios/TupaApi.php +++ b/visitas/app/Repositorios/TupaApi.php @@ -76,7 +76,7 @@ class TupaApi extends GuzzleHttpRequest public function getToS() { $this->getCredApi(); - $url = $this->getUrlApi() . '/terminos-condiciones'; + $url = $this->getUrlApi() . '/terminos-condiciones?estado=es_igual_a%3BAC'; $auth = ['auth' => [$this->getUser(), $this->getPass()]]; return $this->get($url, $auth); } diff --git a/visitas/resources/views/acreditacion.blade.php b/visitas/resources/views/acreditacion.blade.php index 292737cd..35c6baea 100644 --- a/visitas/resources/views/acreditacion.blade.php +++ b/visitas/resources/views/acreditacion.blade.php @@ -23,10 +23,9 @@ Este código deberá mostrarlo cada vez que ingrese a las instalaciones de la UNAM. Puede imprimirlo o si prefiere se lo podemos enviar al correo electrónico que indico en la solicitud. </div> <div class="text-center no-imprimir"> - <button class="btn btn-pers btn-lg" onClick="window.print()">Imprimir</button>   - <button class="btn btn-pers btn-lg">Enviar por correo</button> + <button class="btn btn-pers btn-lg" onClick="window.print()">Imprimir</button> </div> </div> </div> </div> -@endsection \ No newline at end of file +@endsection -- GitLab From e86c05466711817ce49703d8d529f2f2abe1dd82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sena?= <jsena@campus.unam.edu.ar> Date: Mon, 21 Sep 2020 11:55:23 -0300 Subject: [PATCH 11/20] Se Mejora en nombre de metodo --- visitas/app/Http/Controllers/VisitasController.php | 2 +- visitas/app/Repositorios/TupaApi.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/visitas/app/Http/Controllers/VisitasController.php b/visitas/app/Http/Controllers/VisitasController.php index 1aeeaece..9b0ba771 100644 --- a/visitas/app/Http/Controllers/VisitasController.php +++ b/visitas/app/Http/Controllers/VisitasController.php @@ -46,7 +46,7 @@ class VisitasController extends Controller public function getUrlPDFTyC() { $id = $this->visitas->getToS(); - return $this->visitas->getPDFToS($id[0]["codigo"]); + return $this->visitas->getUrlToS($id[0]["codigo"]); } public function getIdTyCVigente() diff --git a/visitas/app/Repositorios/TupaApi.php b/visitas/app/Repositorios/TupaApi.php index e0356288..554c8075 100644 --- a/visitas/app/Repositorios/TupaApi.php +++ b/visitas/app/Repositorios/TupaApi.php @@ -105,7 +105,7 @@ class TupaApi extends GuzzleHttpRequest } - public function getPDFToS($id) + public function getUrlToS($id) { $this->getCredApi(); $url = $this->getUrlApi() . "terminos-condiciones/{$id}/archivo"; -- GitLab From b2cde1464e46af10a3277790f7b8cde11479dcdd Mon Sep 17 00:00:00 2001 From: "luciano.cassettai" <luciano.cassettai@campus.unam.edu.ar> Date: Mon, 21 Sep 2020 20:46:46 -0300 Subject: [PATCH 12/20] Correcciones menores --- .../Http/Controllers/VisitasController.php | 52 ++++++++----------- visitas/app/Repositorios/TupaApi.php | 2 +- visitas/routes/web.php | 2 +- 3 files changed, 25 insertions(+), 31 deletions(-) diff --git a/visitas/app/Http/Controllers/VisitasController.php b/visitas/app/Http/Controllers/VisitasController.php index 9b0ba771..e9d996d4 100644 --- a/visitas/app/Http/Controllers/VisitasController.php +++ b/visitas/app/Http/Controllers/VisitasController.php @@ -7,16 +7,21 @@ use App\Repositorios\TupaApi; class VisitasController extends Controller { - protected $visitas; + protected $tupaApi; - public function __construct(TupaApi $visitas) + public function __construct(TupaApi $api) { - $this->visitas = $visitas; + $this->tupaApi = $api; } - public function solicitudPase(Request $post) + public function solicitudPase(Request $request) { - if ($post->get('acepto_resolucion') && $post->get('acepto_declaracion')) { + if(session()->has('declaracionJurada') && session('declaracionJurada')){ + return view('solicitudPase'); + } + + if ($request->get('acepto_resolucion') && $request->get('acepto_declaracion')) { + session(['declaracionJurada' => true]); return view('solicitudPase'); } else { $error = ['error' => 'Debe leer y aceptar la declaración jurada para continuar']; @@ -26,43 +31,32 @@ class VisitasController extends Controller public function altaVisita(Request $request) { - $visita = $this->visitas->postVisitante($request); + $idVisitante = $this->tupaApi->postVisitante($request); $idTosVigente = $this->getIdTyCVigente(); - $this->visitas->putAceptarTerminos($visita['respuesta'],$idTosVigente); - return $this->acreditar($visita); + $this->tupaApi->putAceptarTerminos($idVisitante['respuesta'],$idTosVigente); + + $datosVisitante = $request->only(['nombre','apellido','dni']); + + return $this->acreditar($idVisitante['respuesta'],$datosVisitante); } - public function acreditar($id) + public function acreditar(string $idVisitante,array $datosVisitante) { - $codigoqr = base64_decode($this->visitas->getPaseQr($id['respuesta'])[0]); - $dv = $this->visitas->getVisitante($id['respuesta']); - $nombre = $dv['datos_personales']['nombre']; - $apellido = $dv['datos_personales']['apellido']; - $dni = $dv['datos_personales']['documentos'][0]['numero']; - return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni')); + $datosVisitante['codigoqr'] = base64_decode($this->tupaApi->getPaseQr($idVisitante)[0]); + + return view('acreditacion',$datosVisitante); } public function getUrlPDFTyC() { - $id = $this->visitas->getToS(); - return $this->visitas->getUrlToS($id[0]["codigo"]); + $id = $this->tupaApi->getToS(); + return $this->tupaApi->getUrlToS($id[0]["codigo"]); } public function getIdTyCVigente() { - $id = $this->visitas->getToS(); + $id = $this->tupaApi->getToS(); return $id[0]["codigo"]; } - - public function getPDFTyCVigente() - { - - if (isset($link) && isset($idVisitante) && isset($idTOS)) { - $url = $link . "/" . $idVisitante . "/" . $idTOS; - return \QrCode::size(300)->generate($url); - } - - } - } diff --git a/visitas/app/Repositorios/TupaApi.php b/visitas/app/Repositorios/TupaApi.php index 554c8075..5911c655 100644 --- a/visitas/app/Repositorios/TupaApi.php +++ b/visitas/app/Repositorios/TupaApi.php @@ -108,7 +108,7 @@ class TupaApi extends GuzzleHttpRequest public function getUrlToS($id) { $this->getCredApi(); - $url = $this->getUrlApi() . "terminos-condiciones/{$id}/archivo"; + $url = $this->getUrlApi() . "/terminos-condiciones/{$id}/archivo"; return $url; } diff --git a/visitas/routes/web.php b/visitas/routes/web.php index acd1b8e9..cdc8a80d 100644 --- a/visitas/routes/web.php +++ b/visitas/routes/web.php @@ -20,7 +20,7 @@ Route::view('/', 'declaracionJurada')->name('declaracion_jurada'); Route::match(['get', 'post'],'/solicitudPase', 'VisitasController@solicitudPase')->name('solicitud_pase'); -Route::post('/visitas','VisitasController@altaVisita')->name('visita_crear'); +Route::post('/pase','VisitasController@altaVisita')->name('visita_crear'); Route::get('/pdf-tyc', 'VisitasController@getPDFTyCVigente')->name('pdf-tyc'); -- GitLab From 6dc6f6b61188845c3a324903a98b548a4e354d64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sena?= <jsena@campus.unam.edu.ar> Date: Thu, 17 Sep 2020 15:36:01 -0300 Subject: [PATCH 13/20] Issue #46 - Se agrega post de Visita --- .../Http/Controllers/VisitasController.php | 14 ++++++++-- .../app/Repositorios/GuzzleHttpRequest.php | 5 ++-- visitas/app/Repositorios/TupaApi.php | 26 ++++++++++++------- visitas/routes/web.php | 2 +- 4 files changed, 33 insertions(+), 14 deletions(-) diff --git a/visitas/app/Http/Controllers/VisitasController.php b/visitas/app/Http/Controllers/VisitasController.php index fe20c9fb..4e89b3be 100644 --- a/visitas/app/Http/Controllers/VisitasController.php +++ b/visitas/app/Http/Controllers/VisitasController.php @@ -35,19 +35,29 @@ class VisitasController extends Controller //TODO: Cambiar con los datos que retorna la api $codigoQrEjemplo = $this->generar_qr("www.unam.edu.ar/visitas", "124", "tosv2"); $codigoqr = $codigoQrEjemplo; - + //$codigoqr = $datos->codigoqr; $nombre =$datos->nombre; $apellido =$datos->apellido; $dni=$datos->dni; - return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni')); + $TyC = $this->visitas->getToS(); + $TyC=$TyC[0]['contenido']; + return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni','TyC')); } private function generar_qr(string $link = null, string $idVisitante = null, string $idTOS) { + if (isset($link) && isset($idVisitante) && isset($idTOS)) { $url = $link . "/" . $idVisitante . "/" . $idTOS; return \QrCode::size(300)->generate($url); } } + + /*Este metodo devolveria Ruta al archivo pdf*/ + function getTyCVigentePDF(){ + $TyC = $this->visitas->getPdfTyC(); + $TyC=$TyC[0]['contenido']; + return $TyC; + } } diff --git a/visitas/app/Repositorios/GuzzleHttpRequest.php b/visitas/app/Repositorios/GuzzleHttpRequest.php index d9c44a19..d767746b 100644 --- a/visitas/app/Repositorios/GuzzleHttpRequest.php +++ b/visitas/app/Repositorios/GuzzleHttpRequest.php @@ -16,11 +16,12 @@ class GuzzleHttpRequest public function get($url,$auth) { $response = $this->client->request('GET', $url,$auth); - return json_decode($response->getBody()->getContents()); + return json_decode($response->getBody(),true); } public function post($url,$datos) { - $this->client->request('POST', $url,$datos); + $response = $this->client->request('POST', $url,$datos); + return json_decode($response->getBody(),true); } } diff --git a/visitas/app/Repositorios/TupaApi.php b/visitas/app/Repositorios/TupaApi.php index 03045f9a..655b3391 100644 --- a/visitas/app/Repositorios/TupaApi.php +++ b/visitas/app/Repositorios/TupaApi.php @@ -59,29 +59,30 @@ class TupaApi extends GuzzleHttpRequest } - public function getCredenciales(){ + public function getCredAPI(){ $this->credenciales = json_decode(env('CREDENCIALES_API_BASIC_TUPA')); $this->setUser($this->credenciales[0][0]); $this->setPass($this->credenciales[0][1]); $this->setUrlApi($this->credenciales[0][2]); } - public function getVisitantes() + public function getToS() { - - $url = $this->getUrlApi() . '/vistantes'; + $this->getCredApi(); + $url = $this->getUrlApi() . '/terminos-condiciones'; $auth = ['auth' => [$this->getUser(), $this->getPass()]]; return $this->get($url, $auth); } - public function getVisitante($id) + public function getPdfPase($id) { return $this->get("visitantes/{$id}"); } + public function postVisitante($visita=array()) { - $this->getCredenciales(); + $this->getCredApi(); $url = $this->getUrlApi() . '/visitantes'; $datos = array ( @@ -133,9 +134,16 @@ class TupaApi extends GuzzleHttpRequest ); $datos = ['body' => json_encode($datos), 'auth' => [$this->getUser(), $this->getPass()]]; - $this->post($url,$datos); - + $visita = $this->post($url,$datos); + $this->postVisita($visita['respuesta']); + return $visita; } - + function postVisita($id){ + $this->getCredApi(); + $tos = $this->getToS(); + $url = $this->getUrlApi() . 'visitas/'.$id; + $datos = ['body' => json_encode(['terminos_condiciones'=>$tos[0]['codigo'],'sede'=>'1','tipo_visitante'=>'EXTERNO']), 'auth' => [$this->getUser(), $this->getPass()]]; + $this->post($url,$datos); + } } diff --git a/visitas/routes/web.php b/visitas/routes/web.php index 9f4effc4..3394704e 100644 --- a/visitas/routes/web.php +++ b/visitas/routes/web.php @@ -22,7 +22,7 @@ Route::match(['get', 'post'],'/solicitudPase', 'VisitasController@solicitudPase' Route::post('/visitas','VisitasController@altaVisita')->name('visita_crear'); -Route::get('/acreditacionCOVID19', 'VisitasController@acreditar')->name('acreditacion'); +Route::get('/pdf-tyc', 'VisitasController@getTyCVigentePDF')->name('pdf-tyc'); //Route::resource('visitas', 'VisitasController'); -- GitLab From 5e6bd266cb4ba02cacdf6d1858231c4c37c20b01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sena?= <jsena@campus.unam.edu.ar> Date: Fri, 18 Sep 2020 10:50:19 -0300 Subject: [PATCH 14/20] Issue #46 - avances conexion con api --- .../Http/Controllers/VisitasController.php | 31 +++++++++---------- visitas/app/Providers/AppServiceProvider.php | 3 +- .../app/Repositorios/GuzzleHttpRequest.php | 14 +++++++++ visitas/app/Repositorios/TupaApi.php | 29 ++++++++--------- visitas/routes/web.php | 3 +- 5 files changed, 47 insertions(+), 33 deletions(-) diff --git a/visitas/app/Http/Controllers/VisitasController.php b/visitas/app/Http/Controllers/VisitasController.php index 4e89b3be..e769e5b4 100644 --- a/visitas/app/Http/Controllers/VisitasController.php +++ b/visitas/app/Http/Controllers/VisitasController.php @@ -26,23 +26,25 @@ class VisitasController extends Controller public function altaVisita(Request $request) { - $this->visitas->postVisitante($request); - return $this->acreditar($request); + $visita = $this->visitas->postVisitante($request); + return $this->acreditar($visita); } - public function acreditar($datos=null) + public function acreditar($id) { - //TODO: Cambiar con los datos que retorna la api $codigoQrEjemplo = $this->generar_qr("www.unam.edu.ar/visitas", "124", "tosv2"); $codigoqr = $codigoQrEjemplo; + $dv = $this->visitas->getVisitante($id['respuesta']); + $nombre = $dv['datos_personales']['nombre']; + $apellido = $dv['datos_personales']['apellido']; + $dni = $dv['datos_personales']['documentos'][0]['numero']; + return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni')); + } - //$codigoqr = $datos->codigoqr; - $nombre =$datos->nombre; - $apellido =$datos->apellido; - $dni=$datos->dni; - $TyC = $this->visitas->getToS(); - $TyC=$TyC[0]['contenido']; - return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni','TyC')); + public function getPDFTyCVigente() + { + $id = $this->visitas->getToS(); + return $this->visitas->getPDFToS($id[0]["codigo"]); } private function generar_qr(string $link = null, string $idVisitante = null, string $idTOS) @@ -54,10 +56,5 @@ class VisitasController extends Controller } } - /*Este metodo devolveria Ruta al archivo pdf*/ - function getTyCVigentePDF(){ - $TyC = $this->visitas->getPdfTyC(); - $TyC=$TyC[0]['contenido']; - return $TyC; - } + } diff --git a/visitas/app/Providers/AppServiceProvider.php b/visitas/app/Providers/AppServiceProvider.php index 9222ee9d..42d3da74 100644 --- a/visitas/app/Providers/AppServiceProvider.php +++ b/visitas/app/Providers/AppServiceProvider.php @@ -15,8 +15,9 @@ class AppServiceProvider extends ServiceProvider public function register() { $this->app->singleton('GuzzleHttp\Client',function(){ + $credenciales = json_decode(env('CREDENCIALES_API_BASIC_TUPA')); return new Client([ - 'base_uri' => 'http://localhost:9002/api/v1/', + 'base_uri' => $credenciales[0][0], ]); }); } diff --git a/visitas/app/Repositorios/GuzzleHttpRequest.php b/visitas/app/Repositorios/GuzzleHttpRequest.php index d767746b..d0f74eb4 100644 --- a/visitas/app/Repositorios/GuzzleHttpRequest.php +++ b/visitas/app/Repositorios/GuzzleHttpRequest.php @@ -15,6 +15,7 @@ class GuzzleHttpRequest } public function get($url,$auth) { + $response = $this->client->request('GET', $url,$auth); return json_decode($response->getBody(),true); } @@ -24,4 +25,17 @@ class GuzzleHttpRequest $response = $this->client->request('POST', $url,$datos); return json_decode($response->getBody(),true); } + public function getFile($url,$auth) { + $resource = fopen('tycCovid19.pdf', 'w'); + /*return $this->client->request('GET', $url, [ + 'headers' => [ + 'Authorization'=> 'Basic ' . $auth, + 'Content-Type' => 'application/pdf' + ], + 'sink' => $resource, + ]);*/ + return $this->client->request('GET', $url,$auth); + } + } + diff --git a/visitas/app/Repositorios/TupaApi.php b/visitas/app/Repositorios/TupaApi.php index 655b3391..bcc69db8 100644 --- a/visitas/app/Repositorios/TupaApi.php +++ b/visitas/app/Repositorios/TupaApi.php @@ -58,7 +58,6 @@ class TupaApi extends GuzzleHttpRequest $this->urlApi = $urlApi; } - public function getCredAPI(){ $this->credenciales = json_decode(env('CREDENCIALES_API_BASIC_TUPA')); $this->setUser($this->credenciales[0][0]); @@ -66,6 +65,14 @@ class TupaApi extends GuzzleHttpRequest $this->setUrlApi($this->credenciales[0][2]); } + public function getVisitante($id){ + $url = $this->getUrlApi() . '/visitantes/'.$id; + $auth = ['auth' => [$this->getUser(), $this->getPass()]]; + return $this->get($url, $auth); + } + /* + * + * */ public function getToS() { $this->getCredApi(); @@ -74,12 +81,16 @@ class TupaApi extends GuzzleHttpRequest return $this->get($url, $auth); } - public function getPdfPase($id) + public function getPDFToS($id) { - return $this->get("visitantes/{$id}"); + $this->getCredApi(); + $url = $this->getUrlApi() . "terminos-condiciones/{$id}/archivo"; + //$auth = base64_encode("{$this->getUser()}:{$this->getPass()}"); + $auth = ['auth' => [$this->getUser(), $this->getPass()]]; + dd($this->getFile($url, $auth)); + //return $this->getFile($url, $auth); } - public function postVisitante($visita=array()) { $this->getCredApi(); @@ -132,18 +143,8 @@ class TupaApi extends GuzzleHttpRequest ), ), ); - $datos = ['body' => json_encode($datos), 'auth' => [$this->getUser(), $this->getPass()]]; $visita = $this->post($url,$datos); - $this->postVisita($visita['respuesta']); return $visita; } - - function postVisita($id){ - $this->getCredApi(); - $tos = $this->getToS(); - $url = $this->getUrlApi() . 'visitas/'.$id; - $datos = ['body' => json_encode(['terminos_condiciones'=>$tos[0]['codigo'],'sede'=>'1','tipo_visitante'=>'EXTERNO']), 'auth' => [$this->getUser(), $this->getPass()]]; - $this->post($url,$datos); - } } diff --git a/visitas/routes/web.php b/visitas/routes/web.php index 3394704e..acd1b8e9 100644 --- a/visitas/routes/web.php +++ b/visitas/routes/web.php @@ -22,7 +22,8 @@ Route::match(['get', 'post'],'/solicitudPase', 'VisitasController@solicitudPase' Route::post('/visitas','VisitasController@altaVisita')->name('visita_crear'); -Route::get('/pdf-tyc', 'VisitasController@getTyCVigentePDF')->name('pdf-tyc'); +Route::get('/pdf-tyc', 'VisitasController@getPDFTyCVigente')->name('pdf-tyc'); + //Route::resource('visitas', 'VisitasController'); -- GitLab From 79b3c580fd44f6da317b1a3ed28436c59a9d2647 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sena?= <jsena@campus.unam.edu.ar> Date: Fri, 18 Sep 2020 13:00:10 -0300 Subject: [PATCH 15/20] Issue #46 metodo devuele url de pdf tyc --- visitas/app/Http/Controllers/VisitasController.php | 10 +++++++++- visitas/app/Repositorios/GuzzleHttpRequest.php | 14 +------------- visitas/app/Repositorios/TupaApi.php | 5 +---- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/visitas/app/Http/Controllers/VisitasController.php b/visitas/app/Http/Controllers/VisitasController.php index e769e5b4..64a01875 100644 --- a/visitas/app/Http/Controllers/VisitasController.php +++ b/visitas/app/Http/Controllers/VisitasController.php @@ -35,10 +35,12 @@ class VisitasController extends Controller $codigoQrEjemplo = $this->generar_qr("www.unam.edu.ar/visitas", "124", "tosv2"); $codigoqr = $codigoQrEjemplo; $dv = $this->visitas->getVisitante($id['respuesta']); + $nombre = $dv['datos_personales']['nombre']; $apellido = $dv['datos_personales']['apellido']; $dni = $dv['datos_personales']['documentos'][0]['numero']; - return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni')); + $pdf = $this->getPDFTyCVigente(); + return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni','pdf')); } public function getPDFTyCVigente() @@ -47,6 +49,12 @@ class VisitasController extends Controller return $this->visitas->getPDFToS($id[0]["codigo"]); } + public function aceptarTyC($id) + { + $id = $this->visitas->getToS(); + return $this->visitas->getPDFToS($id[0]["codigo"]); + } + private function generar_qr(string $link = null, string $idVisitante = null, string $idTOS) { diff --git a/visitas/app/Repositorios/GuzzleHttpRequest.php b/visitas/app/Repositorios/GuzzleHttpRequest.php index d0f74eb4..cc16ae62 100644 --- a/visitas/app/Repositorios/GuzzleHttpRequest.php +++ b/visitas/app/Repositorios/GuzzleHttpRequest.php @@ -5,7 +5,7 @@ namespace App\Repositorios; use GuzzleHttp\Client; - +use GuzzleHttp\Exception\GuzzleException; class GuzzleHttpRequest { protected $client; @@ -25,17 +25,5 @@ class GuzzleHttpRequest $response = $this->client->request('POST', $url,$datos); return json_decode($response->getBody(),true); } - public function getFile($url,$auth) { - $resource = fopen('tycCovid19.pdf', 'w'); - /*return $this->client->request('GET', $url, [ - 'headers' => [ - 'Authorization'=> 'Basic ' . $auth, - 'Content-Type' => 'application/pdf' - ], - 'sink' => $resource, - ]);*/ - return $this->client->request('GET', $url,$auth); - } - } diff --git a/visitas/app/Repositorios/TupaApi.php b/visitas/app/Repositorios/TupaApi.php index bcc69db8..605d51b9 100644 --- a/visitas/app/Repositorios/TupaApi.php +++ b/visitas/app/Repositorios/TupaApi.php @@ -85,10 +85,7 @@ class TupaApi extends GuzzleHttpRequest { $this->getCredApi(); $url = $this->getUrlApi() . "terminos-condiciones/{$id}/archivo"; - //$auth = base64_encode("{$this->getUser()}:{$this->getPass()}"); - $auth = ['auth' => [$this->getUser(), $this->getPass()]]; - dd($this->getFile($url, $auth)); - //return $this->getFile($url, $auth); + return $url; } public function postVisitante($visita=array()) -- GitLab From e50cd276bc2ac9902c3cd1a85684c8d5c19c11e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sena?= <jsena@campus.unam.edu.ar> Date: Thu, 17 Sep 2020 15:36:01 -0300 Subject: [PATCH 16/20] Issue #46 - Se agrega post de Visita --- .../Http/Controllers/VisitasController.php | 58 +++++++++---------- visitas/app/Repositorios/TupaApi.php | 30 +++++++++- visitas/routes/web.php | 1 - 3 files changed, 53 insertions(+), 36 deletions(-) diff --git a/visitas/app/Http/Controllers/VisitasController.php b/visitas/app/Http/Controllers/VisitasController.php index 64a01875..e9d996d4 100644 --- a/visitas/app/Http/Controllers/VisitasController.php +++ b/visitas/app/Http/Controllers/VisitasController.php @@ -7,16 +7,21 @@ use App\Repositorios\TupaApi; class VisitasController extends Controller { - protected $visitas; + protected $tupaApi; - public function __construct(TupaApi $visitas) + public function __construct(TupaApi $api) { - $this->visitas = $visitas; + $this->tupaApi = $api; } - public function solicitudPase(Request $post) + public function solicitudPase(Request $request) { - if ($post->get('acepto_resolucion') && $post->get('acepto_declaracion')) { + if(session()->has('declaracionJurada') && session('declaracionJurada')){ + return view('solicitudPase'); + } + + if ($request->get('acepto_resolucion') && $request->get('acepto_declaracion')) { + session(['declaracionJurada' => true]); return view('solicitudPase'); } else { $error = ['error' => 'Debe leer y aceptar la declaración jurada para continuar']; @@ -26,43 +31,32 @@ class VisitasController extends Controller public function altaVisita(Request $request) { - $visita = $this->visitas->postVisitante($request); - return $this->acreditar($visita); - } + $idVisitante = $this->tupaApi->postVisitante($request); + $idTosVigente = $this->getIdTyCVigente(); + $this->tupaApi->putAceptarTerminos($idVisitante['respuesta'],$idTosVigente); - public function acreditar($id) - { - $codigoQrEjemplo = $this->generar_qr("www.unam.edu.ar/visitas", "124", "tosv2"); - $codigoqr = $codigoQrEjemplo; - $dv = $this->visitas->getVisitante($id['respuesta']); + $datosVisitante = $request->only(['nombre','apellido','dni']); - $nombre = $dv['datos_personales']['nombre']; - $apellido = $dv['datos_personales']['apellido']; - $dni = $dv['datos_personales']['documentos'][0]['numero']; - $pdf = $this->getPDFTyCVigente(); - return view('acreditacion', compact('nombre', 'codigoqr', 'apellido', 'dni','pdf')); + return $this->acreditar($idVisitante['respuesta'],$datosVisitante); } - public function getPDFTyCVigente() + public function acreditar(string $idVisitante,array $datosVisitante) { - $id = $this->visitas->getToS(); - return $this->visitas->getPDFToS($id[0]["codigo"]); + $datosVisitante['codigoqr'] = base64_decode($this->tupaApi->getPaseQr($idVisitante)[0]); + + return view('acreditacion',$datosVisitante); } - public function aceptarTyC($id) + + public function getUrlPDFTyC() { - $id = $this->visitas->getToS(); - return $this->visitas->getPDFToS($id[0]["codigo"]); + $id = $this->tupaApi->getToS(); + return $this->tupaApi->getUrlToS($id[0]["codigo"]); } - private function generar_qr(string $link = null, string $idVisitante = null, string $idTOS) + public function getIdTyCVigente() { - - if (isset($link) && isset($idVisitante) && isset($idTOS)) { - $url = $link . "/" . $idVisitante . "/" . $idTOS; - return \QrCode::size(300)->generate($url); - } + $id = $this->tupaApi->getToS(); + return $id[0]["codigo"]; } - - } diff --git a/visitas/app/Repositorios/TupaApi.php b/visitas/app/Repositorios/TupaApi.php index 605d51b9..5911c655 100644 --- a/visitas/app/Repositorios/TupaApi.php +++ b/visitas/app/Repositorios/TupaApi.php @@ -76,15 +76,39 @@ class TupaApi extends GuzzleHttpRequest public function getToS() { $this->getCredApi(); - $url = $this->getUrlApi() . '/terminos-condiciones'; + $url = $this->getUrlApi() . '/terminos-condiciones?estado=es_igual_a%3BAC'; $auth = ['auth' => [$this->getUser(), $this->getPass()]]; return $this->get($url, $auth); } - public function getPDFToS($id) + public function getPaseQr($id_visitante) { $this->getCredApi(); - $url = $this->getUrlApi() . "terminos-condiciones/{$id}/archivo"; + $url = $this->getUrlApi () . "/pases/$id_visitante/qr"; + $auth = ['auth' => [$this->getUser(), $this->getPass()]]; + return $this->get($url, $auth); + } + + public function putAceptarTerminos($id_visitante,$idTosVigente){ + $this->getCredApi(); + $url = $this->getUrlApi() . "/terminos-condiciones/$idTosVigente/aceptar"; + + $datos = array ( + 'tipo_visitante' => 'EXTERNO', + 'visitante' => $id_visitante + ); + + $datos = ['body' => json_encode($datos), 'auth' => [$this->getUser(), $this->getPass()]]; + + $visita = $this->put($url,$datos); + return $visita; + } + + + public function getUrlToS($id) + { + $this->getCredApi(); + $url = $this->getUrlApi() . "/terminos-condiciones/{$id}/archivo"; return $url; } diff --git a/visitas/routes/web.php b/visitas/routes/web.php index acd1b8e9..945e084a 100644 --- a/visitas/routes/web.php +++ b/visitas/routes/web.php @@ -24,6 +24,5 @@ Route::post('/visitas','VisitasController@altaVisita')->name('visita_crear'); Route::get('/pdf-tyc', 'VisitasController@getPDFTyCVigente')->name('pdf-tyc'); - //Route::resource('visitas', 'VisitasController'); -- GitLab From ce01c4a478c5f2cf5228219c019715dcf2eac746 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sena?= <jsena@campus.unam.edu.ar> Date: Fri, 18 Sep 2020 10:50:19 -0300 Subject: [PATCH 17/20] Issue #46 - avances conexion con api --- visitas/app/Repositorios/GuzzleHttpRequest.php | 12 ++++++++++++ visitas/routes/web.php | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/visitas/app/Repositorios/GuzzleHttpRequest.php b/visitas/app/Repositorios/GuzzleHttpRequest.php index cc16ae62..f17574cd 100644 --- a/visitas/app/Repositorios/GuzzleHttpRequest.php +++ b/visitas/app/Repositorios/GuzzleHttpRequest.php @@ -25,5 +25,17 @@ class GuzzleHttpRequest $response = $this->client->request('POST', $url,$datos); return json_decode($response->getBody(),true); } + public function getFile($url,$auth) { + $resource = fopen('tycCovid19.pdf', 'w'); + /*return $this->client->request('GET', $url, [ + 'headers' => [ + 'Authorization'=> 'Basic ' . $auth, + 'Content-Type' => 'application/pdf' + ], + 'sink' => $resource, + ]);*/ + return $this->client->request('GET', $url,$auth); + } + } diff --git a/visitas/routes/web.php b/visitas/routes/web.php index 945e084a..cdc8a80d 100644 --- a/visitas/routes/web.php +++ b/visitas/routes/web.php @@ -20,9 +20,10 @@ Route::view('/', 'declaracionJurada')->name('declaracion_jurada'); Route::match(['get', 'post'],'/solicitudPase', 'VisitasController@solicitudPase')->name('solicitud_pase'); -Route::post('/visitas','VisitasController@altaVisita')->name('visita_crear'); +Route::post('/pase','VisitasController@altaVisita')->name('visita_crear'); Route::get('/pdf-tyc', 'VisitasController@getPDFTyCVigente')->name('pdf-tyc'); + //Route::resource('visitas', 'VisitasController'); -- GitLab From fc537c0a0d3329a865d680bc7e6a58038e126e06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sena?= <jsena@campus.unam.edu.ar> Date: Fri, 18 Sep 2020 13:00:10 -0300 Subject: [PATCH 18/20] Issue #46 metodo devuele url de pdf tyc --- visitas/app/Repositorios/GuzzleHttpRequest.php | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/visitas/app/Repositorios/GuzzleHttpRequest.php b/visitas/app/Repositorios/GuzzleHttpRequest.php index f17574cd..cc16ae62 100644 --- a/visitas/app/Repositorios/GuzzleHttpRequest.php +++ b/visitas/app/Repositorios/GuzzleHttpRequest.php @@ -25,17 +25,5 @@ class GuzzleHttpRequest $response = $this->client->request('POST', $url,$datos); return json_decode($response->getBody(),true); } - public function getFile($url,$auth) { - $resource = fopen('tycCovid19.pdf', 'w'); - /*return $this->client->request('GET', $url, [ - 'headers' => [ - 'Authorization'=> 'Basic ' . $auth, - 'Content-Type' => 'application/pdf' - ], - 'sink' => $resource, - ]);*/ - return $this->client->request('GET', $url,$auth); - } - } -- GitLab From a5cca0b2ef7416dcbdb3cef1ffc944070c980446 Mon Sep 17 00:00:00 2001 From: "luciano.cassettai" <luciano.cassettai@campus.unam.edu.ar> Date: Fri, 18 Sep 2020 13:17:44 -0300 Subject: [PATCH 19/20] ADD: aceptacion de TOS y GET del pase QR --- visitas/app/Repositorios/GuzzleHttpRequest.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/visitas/app/Repositorios/GuzzleHttpRequest.php b/visitas/app/Repositorios/GuzzleHttpRequest.php index cc16ae62..e9d0a741 100644 --- a/visitas/app/Repositorios/GuzzleHttpRequest.php +++ b/visitas/app/Repositorios/GuzzleHttpRequest.php @@ -25,5 +25,23 @@ class GuzzleHttpRequest $response = $this->client->request('POST', $url,$datos); return json_decode($response->getBody(),true); } + + public function put($url,$datos) + { + $response = $this->client->request('PUT', $url,$datos); + return json_decode($response->getBody(),true); + } + + public function getFile($url,$auth) { + $resource = fopen('tycCovid19.pdf', 'w'); + /*return $this->client->request('GET', $url, [ + 'headers' => [ + 'Authorization'=> 'Basic ' . $auth, + 'Content-Type' => 'application/pdf' + ], + 'sink' => $resource, + ]);*/ + return $this->client->request('GET', $url,$auth); + } } -- GitLab From 001828aa5eaf0d2987216bbf2042987b7744f3e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sena?= <jsena@campus.unam.edu.ar> Date: Mon, 21 Sep 2020 10:56:42 -0300 Subject: [PATCH 20/20] Mejora en get de TyC - Se quita boton "Enviar por email" --- visitas/resources/views/acreditacion.blade.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/visitas/resources/views/acreditacion.blade.php b/visitas/resources/views/acreditacion.blade.php index 292737cd..35c6baea 100644 --- a/visitas/resources/views/acreditacion.blade.php +++ b/visitas/resources/views/acreditacion.blade.php @@ -23,10 +23,9 @@ Este código deberá mostrarlo cada vez que ingrese a las instalaciones de la UNAM. Puede imprimirlo o si prefiere se lo podemos enviar al correo electrónico que indico en la solicitud. </div> <div class="text-center no-imprimir"> - <button class="btn btn-pers btn-lg" onClick="window.print()">Imprimir</button>   - <button class="btn btn-pers btn-lg">Enviar por correo</button> + <button class="btn btn-pers btn-lg" onClick="window.print()">Imprimir</button> </div> </div> </div> </div> -@endsection \ No newline at end of file +@endsection -- GitLab