Commit 0374f638 authored by Aroldo Landeros's avatar Aroldo Landeros

Se agrega listado de solicitudes (transacciones) generadas para cada tramite de pago

parent 4b53ff8e
Pipeline #8969 passed with stage
in 2 minutes and 2 seconds
......@@ -71,6 +71,10 @@ RABBITMQ_QUEUE=
DESTINATARIOS_CRON=
TOKEN_CRON=
#TGR_API_URL pendiente rectorización
TGR_API_URL=''
TGR_API_BASE_URL=''
TGR_API_TOKEN_PATH=''
TGR_API_SOLICITUDES_PATH=''
TGR_GRANT_TYPE=
TGR_SCOPE=''
<?php
namespace App\Helpers;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use Illuminate\Support\Facades\Log;
class PagoTGR {
private $url_base;
private $url_token_path;
private $url_solicitudes_path;
private $grant_type;
private $scope;
private $client_secret;
private $client_id;
private $access_token;
private $client;
public function __construct($client_secret, $client_id)
{
$this->client_secret = $client_secret;
$this->client_id = $client_id;
$this->url_base = env('TGR_API_URL');
$this->url_token_path = env('TGR_API_TOKEN_PATH');
$this->url_solicitudes_path = env('TGR_API_SOLICITUDES_PATH');
$this->grant_type = env('TGR_GRANT_TYPE');
$this->scope = env('TGR_SCOPE');
$this->client = new Client(['base_uri' => $this->url_base]);
$this->init();
}
public function getTokenParams()
{
$params = [
'grant_type' => $this->grant_type,
'scope' => $this->scope,
'client_secret' => $this->client_secret,
'client_id' => $this->client_id,
];
return $params;
}
public function setAccessToken($token)
{
$this->access_token = $token;
}
public function getBearerToken()
{
return 'Bearer '.$this->access_token;
}
public function getUrlSolicitudesPath($recaudacion_id)
{
return $this->url_solicitudes_path.'/'.$recaudacion_id;
}
/**
* General la estructura inicial para realizar una solicitud y obtiene el access token
*/
public function init()
{
\Log::debug('Obteniendo access token hacia TGR');
try {
$response = $this->client->request('POST', $this->url_token_path, [
'headers' => ['Content-Type' => 'application/x-www-form-urlencoded'],
'form_params' => $this->getTokenParams()
]);
$stream = $response->getBody();
$contents = json_decode($stream->getContents(), true);
$this->setAccessToken($contents['access_token']);
} catch (RequestException $e) {
\Log::debug('ERROR API TGR, Problema al obtener access token: ' . $e->getMessage());
}
}
public function checkStatusRecaudacion($recaudacion_id)
{
$result = null;
try {
$response = $this->client->request('GET', $this->getUrlSolicitudesPath($recaudacion_id), [
'headers' => [
'Authorization' => $this->getBearerToken(),
'Content-Type' => 'application/json'
]
]);
$stream = $response->getBody();
$contents = json_decode($stream->getContents(), true);
$result = [
'status' => (int)$response->getStatusCode(),
'data' => $contents['data']
];
} catch (RequestException $e) {
\Log::debug('ERROR API TGR, Problema al consultar la recaudación ['.$recaudacion_id.']: ' . $e->getMessage());
$result = [
'status' => (int)$e->getCode()
];
}
return $result;
}
}
\ No newline at end of file
......@@ -20,10 +20,6 @@ use Illuminate\Database\QueryException;
use Categoria;
use App\Models\Documento;
use DB;
use App\Models\PagoConfiguracion;
use App\Rules\VerificaBancoTGR;
use Carbon\Carbon;
use Validator;
class ConfigurationController extends Controller
......@@ -1126,60 +1122,4 @@ class ConfigurationController extends Controller
$data->save();
return redirect('/backend/configuracion/estilo/');
}
public function pagoConfiguracionCuenta(Request $request)
{
$miCuenta = Cuenta::find(Auth::user()->cuenta_id);
$miConfigPago = $miCuenta->pagoConfiguracion; // la obtengo si existe
$bancos = PagoConfiguracion::getBancos();
$tiposDeCuenta = PagoConfiguracion::getTiposDeCuenta();
if ($request->isMethod('post')) {
$validator = Validator::make($request->all(), [
'receptor_rut' => 'required|rut',
'receptor_nombre' => 'required',
'receptor_razon_social' => 'required',
'receptor_cuenta_numero' => 'required',
'client_secret' => 'required',
'client_id' => 'required',
'receptor_banco' => ['required', new VerificaBancoTGR],
'receptor_cuenta_tipo' => 'required',
], ['required' => 'Este campo es requerido.', 'rut' => 'El RUT ingresado no es válido.']);
if ($validator->fails()) {
return redirect('/backend/configuracion/datos-para-pago')
->withErrors($validator)
->withInput();
}
// Si no existe mi configuracion, la vreo
if (!$miConfigPago) {
$miConfigPago = new PagoConfiguracion();
$miConfigPago->cuenta_id = $miCuenta->id;
$miConfigPago->created_at = Carbon::now();
}
$miConfigPago->receptor_banco_id = $request->input('receptor_banco');
// obtengo nombre banco, $banco['name'] ya es valido al pasar la validacion VerificaBancoTGR
$banco = PagoConfiguracion::getBanco($miConfigPago->receptor_banco_id);
$miConfigPago->receptor_banco_nombre = $banco['name'];
$miConfigPago->client_id = $request->input('client_id');
$miConfigPago->client_secret = $request->input('client_secret');
$miConfigPago->receptor_nombre = $request->input('receptor_nombre');
$miConfigPago->receptor_razon_social = $request->input('receptor_razon_social');
$miConfigPago->receptor_rut = $request->input('receptor_rut');
$miConfigPago->receptor_cuenta_tipo = $request->input('receptor_cuenta_tipo');
$miConfigPago->receptor_cuenta_numero = $request->input('receptor_cuenta_numero');
$miConfigPago->updated_at = Carbon::now();
$miConfigPago->save();
}
return view('backend.configuration.pagos.config_cuenta', [
'bancos' => $bancos,
'tiposDeCuenta' => $tiposDeCuenta,
'miConfigPago' => $miConfigPago
]);
}
}
<?php
namespace App\Http\Controllers\Backend;
use App\Helpers\PagoTGR;
use App\Http\Controllers\Controller;
use App\Models\PagoConfiguracion;
use App\Models\PagoTransaccion;
use App\Rules\VerificaBancoTGR;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Validator;
use DB;
class PagoController extends Controller
{
public function configuracionDatosCuenta(Request $request)
{
$miCuenta = Cuenta::find(Auth::user()->cuenta_id);
$miConfigPago = $miCuenta->pagoConfiguracion; // la obtengo si existe
$bancos = PagoConfiguracion::getBancos();
$tiposDeCuenta = PagoConfiguracion::getTiposDeCuenta();
if ($request->isMethod('post')) {
$validator = Validator::make($request->all(), [
'receptor_rut' => 'required|rut',
'receptor_nombre' => 'required',
'receptor_razon_social' => 'required',
'receptor_cuenta_numero' => 'required',
'client_secret' => 'required',
'client_id' => 'required',
'receptor_banco' => ['required', new VerificaBancoTGR],
'receptor_cuenta_tipo' => 'required',
], ['required' => 'Este campo es requerido.', 'rut' => 'El RUT ingresado no es válido.']);
if ($validator->fails()) {
return redirect('/backend/configuracion/datos-para-pago')
->withErrors($validator)
->withInput();
}
// Si no existe mi configuracion, la vreo
if (!$miConfigPago) {
$miConfigPago = new PagoConfiguracion();
$miConfigPago->cuenta_id = $miCuenta->id;
$miConfigPago->created_at = Carbon::now();
}
$miConfigPago->receptor_banco_id = $request->input('receptor_banco');
// obtengo nombre banco, $banco['name'] ya es valido al pasar la validacion VerificaBancoTGR
$banco = PagoConfiguracion::getBanco($miConfigPago->receptor_banco_id);
$miConfigPago->receptor_banco_nombre = $banco['name'];
$miConfigPago->client_id = $request->input('client_id');
$miConfigPago->client_secret = $request->input('client_secret');
$miConfigPago->receptor_nombre = $request->input('receptor_nombre');
$miConfigPago->receptor_razon_social = $request->input('receptor_razon_social');
$miConfigPago->receptor_rut = $request->input('receptor_rut');
$miConfigPago->receptor_cuenta_tipo = $request->input('receptor_cuenta_tipo');
$miConfigPago->receptor_cuenta_numero = $request->input('receptor_cuenta_numero');
$miConfigPago->updated_at = Carbon::now();
$miConfigPago->save();
}
return view('backend.configuration.pagos.config_cuenta', [
'bancos' => $bancos,
'tiposDeCuenta' => $tiposDeCuenta,
'miConfigPago' => $miConfigPago
]);
}
public function getListadoRecaudaciones(Request $request)
{
$recaudaciones = DB::table('pago_transaccion')
->join('tramite', 'pago_transaccion.tramite_id', '=', 'tramite.id')
->join('proceso', 'tramite.proceso_id', '=', 'proceso.id')
->select('pago_transaccion.*', 'tramite.pendiente', 'proceso.nombre')
->orderBy('pago_transaccion.created_at', 'desc')
->paginate(10);
// dd($recaudaciones);
$statusRecaudaciones = PagoTransaccion::getArrayStatus();
return view('backend.configuration.pagos.recaudaciones', [
'recaudaciones' => $recaudaciones,
'statusRecaudaciones' => $statusRecaudaciones
]);
}
public function checktStatusRecaudacion($id)
{
$transaccion = PagoTransaccion::findOrFail($id);
$current_status = $transaccion->status;
$configPago = PagoConfiguracion::where('cuenta_id', $transaccion->cuenta_id)->first();
// mejorar instancia, quitar parámetros
$pago = new PagoTGR($configPago->client_secret, $configPago->client_id);
$solicitud = $pago->checkStatusRecaudacion($transaccion->recaudacion_id);
if (200 == $solicitud['status']) {
$transaccion->status = $solicitud['data']['estado']['nombreEstado'];
$statusDate = new Carbon($solicitud['data']['estado']['fechaEstado']);
// $transaccion->response_on = $statusDate->format('Y-m-d H:i:s'); // llega en utc-0
$transaccion->response_on = Carbon::now()->format('Y-m-d H:i:s');
$transaccion->save();
}
// $current_status = $transaccion->status;
return redirect()->route('backend.configuration.recaudaciones.list');
}
}
......@@ -9,7 +9,6 @@ use App\Models\PagoTransaccion;
use App\Models\Tramite;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use App\Helpers\Pagos;
use Carbon\Carbon;
use Illuminate\Http\RedirectResponse;
......@@ -76,6 +75,9 @@ class AccionPagoTGR extends Accion
$recaudacion_id = $transaccion['content_pago']['transaccion_id'];
$pagoTransaccion = new PagoTransaccion($cuenta_id, $tramite->id);
$pagoTransaccion->recaudacion_id = $recaudacion_id;
$pagoTransaccion->cuenta_id = $cuenta_id;
$pagoTransaccion->tramite_id = $tramite->id;
$pagoTransaccion->created_at = Carbon::now()->format('Y-m-d H:i:s');
$pagoTransaccion->status = PagoTransaccion::CREADA;
$pagoTransaccion->status_description = 'Solicitud Enviada a TGR';
$pagoTransaccion->save();
......
......@@ -18,11 +18,15 @@ class PagoTransaccion extends Model
const RECHAZADA = 'RECHAZADA';
const CANCELADA = 'CANCELADA';
public function __construct($cuenta_id, $tramite_id)
static function getArrayStatus()
{
$this->cuenta_id = $cuenta_id;
$this->tramite_id = $tramite_id;
$this->created_at = Carbon::now()->format('Y-m-d H:i:s');
return [
self::CREADA,
self::RECIBIDA,
self::CONFIRMADA,
self::RECHAZADA,
self::CANCELADA,
];
}
public function cuenta()
......
......@@ -45,8 +45,8 @@
href="{{ route('backend.configuration.datos_pago_cuenta_get') }}">
Información de pago asociada a mi cuenta
</a>
<a class="nav-link"
href="#">
<a class="nav-link {{ strstr(Request::path(), 'listado-recaudaciones') ? 'active' : '' }}"
href="{{ route('backend.configuration.recaudaciones.list') }}">
Trasacciones registradas
</a>
</div>
......
@extends('layouts.backend')
@section('title', 'Infomación del portal de pagos TGR')
@section('content')
<div class="container-fluid">
<div class="row mt-3">
@include('backend.configuration.nav')
<div class="col-md-9">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a href="{{ route('backend.configuration.my_site') }}">Configuración</a>
</li>
<li class="breadcrumb-item active" aria-current="page">
Listado de recaudaciones
</li>
</ol>
</nav>
<h1 class="mb-4">Listado de recaudaciones</h1>
@if(count($recaudaciones) > 0)
{{ $recaudaciones->links('vendor.pagination.bootstrap-4') }}
<table class="table table-bordered">
<thead>
<tr>
<th class="text-center"></th>
<th class="text-center">
<div class="form-group">
<input type="text" class="form-control form-control-sm" id="exampleFormControlInput1" placeholder=" recaudación...">
</div>
</th>
<th class="text-center">
<div class="form-group">
<select class="form-control form-control-sm" id="recaudaciones-status">
<option value="">seleccione</option>
@foreach($statusRecaudaciones as $status)
<option value="{{ $status }}">{{ $status }}</option>
@endforeach
</select>
</div>
</th>
<th colspan="4">
</th>
</tr>
<tr>
<th class="text-center">Tramite</th>
<th class="text-left">Id Recaudación</th>
<th class="text-center">Estado</th>
<th class="text-center">fecha creación</th>
<th class="text-center">fecha confirmación estado</th>
<th class="text-center">Descripción de estado</th>
<th class="text-center">
<button class="btn btn-sm btn-info">
...
</button>
</th>
</tr>
</thead>
<tbody>
@foreach($recaudaciones as $recaudacion)
<tr>
<th class="text-center">
<a href="javascript:void(0);" class="recaudacion-ref"
data-toggle="popover"
data-placement="top"
data-trigger="focus"
title="{{ $recaudacion->nombre }}"
data-lala="<b>ID Tramite:</b> {{ $recaudacion->tramite_id }}</br><b>Estado Tramite:</b> {{ $recaudacion->pendiente ? 'finalizado':'en curso' }}">
{{ $recaudacion->nombre }}
</a>
</th>
<th class="text-center">{{ $recaudacion->recaudacion_id }}</th>
<th class="text-center">
<h5><span class="badge badge-primary">{{ $recaudacion->status }}</span></h5>
</th>
<th class="text-center">{{ $recaudacion->created_at }}</th>
<th class="text-center">{{ $recaudacion->response_on ? $recaudacion->response_on:'-' }}</th>
<th class="text-center">{{ $recaudacion->status_description }}</th>
<td class="text-center">
@if($recaudacion->status == 'CREADA' || $recaudacion->status == 'RECIBIDA')
<a href="{{ route('backend.configuration.recaudaciones.checkt_status', [
'pago_transaccion_id' => $recaudacion->id
]) }}" class="btn btn-sm btn-secondary">check</a>
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
{{ $recaudaciones->links('vendor.pagination.bootstrap-4') }}
@else
<div class="alert alert-primary" role="alert">
No se encontraron recaudaciones registradas
</div>
@endif
</div>
</div>
</div>
@endsection
@section('script')
<script src="{{ asset('js/app.js') }}"></script>
<script>
$(document).ready(function() {
console.log("sadads");
$('[data-toggle="popover"]').popover({
html: true,
content: function() {
let el = $( '<div></div>' );
return el.html($(this).data('lala'));
}
});
});
</script>
@endsection
\ No newline at end of file
......@@ -317,8 +317,12 @@ Route::prefix('backend')->namespace('Backend')->name('backend.')->group(function
Route::get('/configuracion/ajax_get_validacion_reglas', 'ConfigurationController@ajax_get_validacion_reglas')->name('configuration.ajax_get_validacion_reglas');
Route::get('/configuracion/datos-para-pago', 'ConfigurationController@pagoConfiguracionCuenta')->name('configuration.datos_pago_cuenta_get');
Route::post('/configuracion/datos-para-pago', 'ConfigurationController@pagoConfiguracionCuenta')->name('configuration.datos_pago_cuenta_post');
// BTN Pago Backend
Route::get('/configuracion/datos-para-pago', 'PagoController@configuracionDatosCuenta')->name('configuration.datos_pago_cuenta_get');
Route::post('/configuracion/datos-para-pago', 'PagoController@configuracionDatosCuenta')->name('configuration.datos_pago_cuenta_post');
Route::get('/configuracion/listado-recaudaciones', 'PagoController@getListadoRecaudaciones')->name('configuration.recaudaciones.list');
Route::get('/configuracion/recaudacion/{pago_transaccion_id}/verificar', 'PagoController@checktStatusRecaudacion')->name('configuration.recaudaciones.checkt_status');
});
//});
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment