diff --git a/app/Http/Controllers/OperationSummaryController.php b/app/Http/Controllers/OperationSummaryController.php index c4e4fa3..967e327 100644 --- a/app/Http/Controllers/OperationSummaryController.php +++ b/app/Http/Controllers/OperationSummaryController.php @@ -20,6 +20,18 @@ class OperationSummaryController extends Controller { } + public function index(Request $request) + { + try { + $response = $this->dadosTeContract->search($request->all(), true); + return (new OperationSummaryResource($response)) + ->response() + ->setStatusCode(Response::HTTP_OK); + } catch (\Exception $ex) { + return $this->errorResponse(false, $ex->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR); + } + } + public function operationSummary(Request $request) { try { diff --git a/app/Repositories/ContractInterface.php b/app/Repositories/ContractInterface.php index 49ce0a9..fd290f2 100644 --- a/app/Repositories/ContractInterface.php +++ b/app/Repositories/ContractInterface.php @@ -10,5 +10,5 @@ interface ContractInterface public function update(array $params, $id); public function destroy($id); public function withRelationsByAll($relations); - public function search($params); + public function search($params, $distinct = false); } diff --git a/app/Repositories/DadosTe/DadosTeRepository.php b/app/Repositories/DadosTe/DadosTeRepository.php index 329485b..0741127 100644 --- a/app/Repositories/DadosTe/DadosTeRepository.php +++ b/app/Repositories/DadosTe/DadosTeRepository.php @@ -20,19 +20,9 @@ class DadosTeRepository extends AbstractRepository implements DadosTeContractInt parent::__construct($dadosTe); } - private function execute($params): Builder + private function execute($fields, $params): Builder { - $query = $this->model - ->select( - DB::raw("TO_CHAR(TO_DATE(dados_te.mes, 'YYMM'), 'MM/YYYY') as mes"), - 'dados_te.cod_smart_unidade', - 'dados_te.operacao', - 'dados_te.tipo', - 'dados_te.perfil_contr as contraparte', - 'dados_te.montante_nf', - 'dados_te.preco_nf', - 'dados_te.nf_c_icms' - ); + $query = $this->model->select($fields); if (!empty($params)) { $query = static::getFilterBuilder($params)->applyFilter($query); @@ -43,8 +33,19 @@ class DadosTeRepository extends AbstractRepository implements DadosTeContractInt public function getOperationSummary($params): Collection|array { + $fields = [ + DB::raw("TO_CHAR(TO_DATE(dados_te.mes, 'YYMM'), 'MM/YYYY') as mes"), + 'dados_te.cod_smart_unidade', + 'dados_te.operacao', + 'dados_te.tipo', + 'dados_te.perfil_contr as contraparte', + 'dados_te.montante_nf', + 'dados_te.preco_nf', + 'dados_te.nf_c_icms' + ]; + $params = static::filterRow($params); - return $this->execute($params)->get(); + return $this->execute($fields, $params)->get(); } public static function filterRow($params, $field = 'mes'): array diff --git a/app/Repositories/MethodsTrait.php b/app/Repositories/MethodsTrait.php index 2ae1767..2f2abb9 100644 --- a/app/Repositories/MethodsTrait.php +++ b/app/Repositories/MethodsTrait.php @@ -38,12 +38,20 @@ trait MethodsTrait return $this->model->with($relations)->get(); } - public function search($params) + public function search($params, $distinct = false) { $filter = static::getFilterBuilder($params); + $filter->setFields(collect($filter->getFields())->transform(fn($value) => $this->model->qualifyColumn($value))->all()); + $query = $this->model->select($filter->getFields()); - return $filter->applyFilter($query)->get(); + $response = $filter->applyFilter($query); + + if (isset($distinct)){ + $response = $response->distinct(); + } + + return $response->get(); } } \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index b2880cf..abf7cfc 100644 --- a/routes/api.php +++ b/routes/api.php @@ -52,7 +52,8 @@ Route::middleware(['auth:sanctum', 'ability:Client'])->group(function () { Route::post('economy/estimates', [\App\Http\Controllers\EconomyController::class, 'captiveMonthlyEconomy']); Route::post('economy/MWh', [\App\Http\Controllers\EconomyController::class, 'costMWhEconomy']); - Route::post('operation', [\App\Http\Controllers\OperationSummaryController::class, 'operationSummary']); + Route::post('operation/summary', [\App\Http\Controllers\OperationSummaryController::class, 'operationSummary']); + Route::post('operation', [\App\Http\Controllers\OperationSummaryController::class, 'index']); });