Atualização README entre outros
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
|
||||

|
||||

|
||||
|
||||
## EAP - Essential Automation Platform
|
||||
|
||||
|
||||
40
app/Http/Controllers/Api/v1/relatorio_chamados.php
Normal file
40
app/Http/Controllers/Api/v1/relatorio_chamados.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\v1;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\clientes;
|
||||
use App\Models\clientes_relatorios_mensal;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class relatorio_chamados extends Controller
|
||||
{
|
||||
public function salvar_relatorio(Request $request)
|
||||
{
|
||||
foreach ($request->all() as $item) {
|
||||
|
||||
$cliente = clientes::where('name', $item['customerName'])->first();
|
||||
|
||||
if ($cliente) {
|
||||
|
||||
$relatorio = new clientes_relatorios_mensal();
|
||||
$relatorio->id_cliente = $cliente->id;
|
||||
|
||||
$relatorio->horas_utilizadas = array_sum(
|
||||
array_column($item['registros'], 'cr13a_horasutilizadas')
|
||||
);
|
||||
|
||||
$relatorio->chamados = json_encode($item['registros']);
|
||||
|
||||
$relatorio->save();
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => 'Relatório recebido com sucesso',
|
||||
'data' => $request->all(),
|
||||
], 201);
|
||||
}
|
||||
}
|
||||
10
app/Http/Controllers/ClientesContratosController.php
Normal file
10
app/Http/Controllers/ClientesContratosController.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ClientesContratosController extends Controller
|
||||
{
|
||||
//
|
||||
}
|
||||
10
app/Http/Controllers/ClientesRelatoriosMensalController.php
Normal file
10
app/Http/Controllers/ClientesRelatoriosMensalController.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ClientesRelatoriosMensalController extends Controller
|
||||
{
|
||||
//
|
||||
}
|
||||
@@ -40,4 +40,9 @@ class clientes extends Model
|
||||
{
|
||||
return $this->hasMany(clientes_grupos::class, 'id_cliente', 'id');
|
||||
}
|
||||
|
||||
public function contratos()
|
||||
{
|
||||
return $this->hasMany(clientes_contratos::class, 'cliente_id');
|
||||
}
|
||||
}
|
||||
|
||||
10
app/Models/clientes_contratos.php
Normal file
10
app/Models/clientes_contratos.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class clientes_contratos extends Model
|
||||
{
|
||||
//
|
||||
}
|
||||
10
app/Models/clientes_relatorios_mensal.php
Normal file
10
app/Models/clientes_relatorios_mensal.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class clientes_relatorios_mensal extends Model
|
||||
{
|
||||
//
|
||||
}
|
||||
@@ -7,6 +7,7 @@
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^8.2",
|
||||
"barryvdh/laravel-dompdf": "^3.1",
|
||||
"guzzlehttp/guzzle": "^7.10",
|
||||
"laravel/breeze": "^2.3",
|
||||
"laravel/framework": "^12.0",
|
||||
|
||||
524
composer.lock
generated
524
composer.lock
generated
@@ -4,8 +4,85 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "3b9fe38f5d50cbc876c4b821c09d6c9c",
|
||||
"content-hash": "8daa8e625b1a4f30f19d27ea0fe5aa02",
|
||||
"packages": [
|
||||
{
|
||||
"name": "barryvdh/laravel-dompdf",
|
||||
"version": "v3.1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/barryvdh/laravel-dompdf.git",
|
||||
"reference": "8e71b99fc53bb8eb77f316c3c452dd74ab7cb25d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/8e71b99fc53bb8eb77f316c3c452dd74ab7cb25d",
|
||||
"reference": "8e71b99fc53bb8eb77f316c3c452dd74ab7cb25d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"dompdf/dompdf": "^3.0",
|
||||
"illuminate/support": "^9|^10|^11|^12",
|
||||
"php": "^8.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"larastan/larastan": "^2.7|^3.0",
|
||||
"orchestra/testbench": "^7|^8|^9|^10",
|
||||
"phpro/grumphp": "^2.5",
|
||||
"squizlabs/php_codesniffer": "^3.5"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"aliases": {
|
||||
"PDF": "Barryvdh\\DomPDF\\Facade\\Pdf",
|
||||
"Pdf": "Barryvdh\\DomPDF\\Facade\\Pdf"
|
||||
},
|
||||
"providers": [
|
||||
"Barryvdh\\DomPDF\\ServiceProvider"
|
||||
]
|
||||
},
|
||||
"branch-alias": {
|
||||
"dev-master": "3.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Barryvdh\\DomPDF\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Barry vd. Heuvel",
|
||||
"email": "barryvdh@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "A DOMPDF Wrapper for Laravel",
|
||||
"keywords": [
|
||||
"dompdf",
|
||||
"laravel",
|
||||
"pdf"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/barryvdh/laravel-dompdf/issues",
|
||||
"source": "https://github.com/barryvdh/laravel-dompdf/tree/v3.1.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://fruitcake.nl",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/barryvdh",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2025-02-13T15:07:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "brick/math",
|
||||
"version": "0.14.1",
|
||||
@@ -377,6 +454,161 @@
|
||||
],
|
||||
"time": "2024-02-05T11:56:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "dompdf/dompdf",
|
||||
"version": "v3.1.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/dompdf/dompdf.git",
|
||||
"reference": "f11ead23a8a76d0ff9bbc6c7c8fd7e05ca328496"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/dompdf/dompdf/zipball/f11ead23a8a76d0ff9bbc6c7c8fd7e05ca328496",
|
||||
"reference": "f11ead23a8a76d0ff9bbc6c7c8fd7e05ca328496",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"dompdf/php-font-lib": "^1.0.0",
|
||||
"dompdf/php-svg-lib": "^1.0.0",
|
||||
"ext-dom": "*",
|
||||
"ext-mbstring": "*",
|
||||
"masterminds/html5": "^2.0",
|
||||
"php": "^7.1 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-gd": "*",
|
||||
"ext-json": "*",
|
||||
"ext-zip": "*",
|
||||
"mockery/mockery": "^1.3",
|
||||
"phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11",
|
||||
"squizlabs/php_codesniffer": "^3.5",
|
||||
"symfony/process": "^4.4 || ^5.4 || ^6.2 || ^7.0"
|
||||
},
|
||||
"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",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Dompdf\\": "src/"
|
||||
},
|
||||
"classmap": [
|
||||
"lib/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"LGPL-2.1"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "The Dompdf Community",
|
||||
"homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md"
|
||||
}
|
||||
],
|
||||
"description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
|
||||
"homepage": "https://github.com/dompdf/dompdf",
|
||||
"support": {
|
||||
"issues": "https://github.com/dompdf/dompdf/issues",
|
||||
"source": "https://github.com/dompdf/dompdf/tree/v3.1.5"
|
||||
},
|
||||
"time": "2026-03-03T13:54:37+00:00"
|
||||
},
|
||||
{
|
||||
"name": "dompdf/php-font-lib",
|
||||
"version": "1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/dompdf/php-font-lib.git",
|
||||
"reference": "a6e9a688a2a80016ac080b97be73d3e10c444c9a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/a6e9a688a2a80016ac080b97be73d3e10c444c9a",
|
||||
"reference": "a6e9a688a2a80016ac080b97be73d3e10c444c9a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-mbstring": "*",
|
||||
"php": "^7.1 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11 || ^12"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"FontLib\\": "src/FontLib"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"LGPL-2.1-or-later"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "The FontLib Community",
|
||||
"homepage": "https://github.com/dompdf/php-font-lib/blob/master/AUTHORS.md"
|
||||
}
|
||||
],
|
||||
"description": "A library to read, parse, export and make subsets of different types of font files.",
|
||||
"homepage": "https://github.com/dompdf/php-font-lib",
|
||||
"support": {
|
||||
"issues": "https://github.com/dompdf/php-font-lib/issues",
|
||||
"source": "https://github.com/dompdf/php-font-lib/tree/1.0.2"
|
||||
},
|
||||
"time": "2026-01-20T14:10:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "dompdf/php-svg-lib",
|
||||
"version": "1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/dompdf/php-svg-lib.git",
|
||||
"reference": "8259ffb930817e72b1ff1caef5d226501f3dfeb1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/8259ffb930817e72b1ff1caef5d226501f3dfeb1",
|
||||
"reference": "8259ffb930817e72b1ff1caef5d226501f3dfeb1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-mbstring": "*",
|
||||
"php": "^7.1 || ^8.0",
|
||||
"sabberworm/php-css-parser": "^8.4 || ^9.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Svg\\": "src/Svg"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"LGPL-3.0-or-later"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "The SvgLib Community",
|
||||
"homepage": "https://github.com/dompdf/php-svg-lib/blob/master/AUTHORS.md"
|
||||
}
|
||||
],
|
||||
"description": "A library to read, parse and export to PDF SVG files.",
|
||||
"homepage": "https://github.com/dompdf/php-svg-lib",
|
||||
"support": {
|
||||
"issues": "https://github.com/dompdf/php-svg-lib/issues",
|
||||
"source": "https://github.com/dompdf/php-svg-lib/tree/1.0.2"
|
||||
},
|
||||
"time": "2026-01-02T16:01:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "dragonmantank/cron-expression",
|
||||
"version": "v3.6.0",
|
||||
@@ -2219,6 +2451,73 @@
|
||||
],
|
||||
"time": "2025-11-18T12:17:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "masterminds/html5",
|
||||
"version": "2.10.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Masterminds/html5-php.git",
|
||||
"reference": "fcf91eb64359852f00d921887b219479b4f21251"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251",
|
||||
"reference": "fcf91eb64359852f00d921887b219479b4f21251",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-dom": "*",
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.7-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Masterminds\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Matt Butcher",
|
||||
"email": "technosophos@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Matt Farina",
|
||||
"email": "matt@mattfarina.com"
|
||||
},
|
||||
{
|
||||
"name": "Asmir Mustafic",
|
||||
"email": "goetas@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "An HTML5 parser and serializer.",
|
||||
"homepage": "http://masterminds.github.io/html5-php",
|
||||
"keywords": [
|
||||
"HTML5",
|
||||
"dom",
|
||||
"html",
|
||||
"parser",
|
||||
"querypath",
|
||||
"serializer",
|
||||
"xml"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/Masterminds/html5-php/issues",
|
||||
"source": "https://github.com/Masterminds/html5-php/tree/2.10.0"
|
||||
},
|
||||
"time": "2025-07-25T09:04:22+00:00"
|
||||
},
|
||||
{
|
||||
"name": "monolog/monolog",
|
||||
"version": "3.9.0",
|
||||
@@ -3490,6 +3789,86 @@
|
||||
},
|
||||
"time": "2025-09-04T20:59:21+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sabberworm/php-css-parser",
|
||||
"version": "v9.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/MyIntervals/PHP-CSS-Parser.git",
|
||||
"reference": "88dbd0f7f91abbfe4402d0a3071e9ff4d81ed949"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/88dbd0f7f91abbfe4402d0a3071e9ff4d81ed949",
|
||||
"reference": "88dbd0f7f91abbfe4402d0a3071e9ff4d81ed949",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-iconv": "*",
|
||||
"php": "^7.2.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
|
||||
"thecodingmachine/safe": "^1.3 || ^2.5 || ^3.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"php-parallel-lint/php-parallel-lint": "1.4.0",
|
||||
"phpstan/extension-installer": "1.4.3",
|
||||
"phpstan/phpstan": "1.12.32 || 2.1.32",
|
||||
"phpstan/phpstan-phpunit": "1.4.2 || 2.0.8",
|
||||
"phpstan/phpstan-strict-rules": "1.6.2 || 2.0.7",
|
||||
"phpunit/phpunit": "8.5.52",
|
||||
"rawr/phpunit-data-provider": "3.3.1",
|
||||
"rector/rector": "1.2.10 || 2.2.8",
|
||||
"rector/type-perfect": "1.0.0 || 2.1.0",
|
||||
"squizlabs/php_codesniffer": "4.0.1",
|
||||
"thecodingmachine/phpstan-safe-rule": "1.2.0 || 1.4.1"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "for parsing UTF-8 CSS"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "9.4.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/Rule/Rule.php",
|
||||
"src/RuleSet/RuleContainer.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Sabberworm\\CSS\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Raphael Schweikert"
|
||||
},
|
||||
{
|
||||
"name": "Oliver Klee",
|
||||
"email": "github@oliverklee.de"
|
||||
},
|
||||
{
|
||||
"name": "Jake Hotson",
|
||||
"email": "jake.github@qzdesign.co.uk"
|
||||
}
|
||||
],
|
||||
"description": "Parser for CSS Files written in PHP",
|
||||
"homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser",
|
||||
"keywords": [
|
||||
"css",
|
||||
"parser",
|
||||
"stylesheet"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues",
|
||||
"source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v9.3.0"
|
||||
},
|
||||
"time": "2026-03-03T17:31:43+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/clock",
|
||||
"version": "v7.3.0",
|
||||
@@ -5979,6 +6358,149 @@
|
||||
],
|
||||
"time": "2025-09-27T09:00:46+00:00"
|
||||
},
|
||||
{
|
||||
"name": "thecodingmachine/safe",
|
||||
"version": "v3.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thecodingmachine/safe.git",
|
||||
"reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thecodingmachine/safe/zipball/705683a25bacf0d4860c7dea4d7947bfd09eea19",
|
||||
"reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^8.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"php-parallel-lint/php-parallel-lint": "^1.4",
|
||||
"phpstan/phpstan": "^2",
|
||||
"phpunit/phpunit": "^10",
|
||||
"squizlabs/php_codesniffer": "^3.2"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"lib/special_cases.php",
|
||||
"generated/apache.php",
|
||||
"generated/apcu.php",
|
||||
"generated/array.php",
|
||||
"generated/bzip2.php",
|
||||
"generated/calendar.php",
|
||||
"generated/classobj.php",
|
||||
"generated/com.php",
|
||||
"generated/cubrid.php",
|
||||
"generated/curl.php",
|
||||
"generated/datetime.php",
|
||||
"generated/dir.php",
|
||||
"generated/eio.php",
|
||||
"generated/errorfunc.php",
|
||||
"generated/exec.php",
|
||||
"generated/fileinfo.php",
|
||||
"generated/filesystem.php",
|
||||
"generated/filter.php",
|
||||
"generated/fpm.php",
|
||||
"generated/ftp.php",
|
||||
"generated/funchand.php",
|
||||
"generated/gettext.php",
|
||||
"generated/gmp.php",
|
||||
"generated/gnupg.php",
|
||||
"generated/hash.php",
|
||||
"generated/ibase.php",
|
||||
"generated/ibmDb2.php",
|
||||
"generated/iconv.php",
|
||||
"generated/image.php",
|
||||
"generated/imap.php",
|
||||
"generated/info.php",
|
||||
"generated/inotify.php",
|
||||
"generated/json.php",
|
||||
"generated/ldap.php",
|
||||
"generated/libxml.php",
|
||||
"generated/lzf.php",
|
||||
"generated/mailparse.php",
|
||||
"generated/mbstring.php",
|
||||
"generated/misc.php",
|
||||
"generated/mysql.php",
|
||||
"generated/mysqli.php",
|
||||
"generated/network.php",
|
||||
"generated/oci8.php",
|
||||
"generated/opcache.php",
|
||||
"generated/openssl.php",
|
||||
"generated/outcontrol.php",
|
||||
"generated/pcntl.php",
|
||||
"generated/pcre.php",
|
||||
"generated/pgsql.php",
|
||||
"generated/posix.php",
|
||||
"generated/ps.php",
|
||||
"generated/pspell.php",
|
||||
"generated/readline.php",
|
||||
"generated/rnp.php",
|
||||
"generated/rpminfo.php",
|
||||
"generated/rrd.php",
|
||||
"generated/sem.php",
|
||||
"generated/session.php",
|
||||
"generated/shmop.php",
|
||||
"generated/sockets.php",
|
||||
"generated/sodium.php",
|
||||
"generated/solr.php",
|
||||
"generated/spl.php",
|
||||
"generated/sqlsrv.php",
|
||||
"generated/ssdeep.php",
|
||||
"generated/ssh2.php",
|
||||
"generated/stream.php",
|
||||
"generated/strings.php",
|
||||
"generated/swoole.php",
|
||||
"generated/uodbc.php",
|
||||
"generated/uopz.php",
|
||||
"generated/url.php",
|
||||
"generated/var.php",
|
||||
"generated/xdiff.php",
|
||||
"generated/xml.php",
|
||||
"generated/xmlrpc.php",
|
||||
"generated/yaml.php",
|
||||
"generated/yaz.php",
|
||||
"generated/zip.php",
|
||||
"generated/zlib.php"
|
||||
],
|
||||
"classmap": [
|
||||
"lib/DateTime.php",
|
||||
"lib/DateTimeImmutable.php",
|
||||
"lib/Exceptions/",
|
||||
"generated/Exceptions/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "PHP core functions that throw exceptions instead of returning FALSE on error",
|
||||
"support": {
|
||||
"issues": "https://github.com/thecodingmachine/safe/issues",
|
||||
"source": "https://github.com/thecodingmachine/safe/tree/v3.4.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/OskarStark",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/shish",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/silasjoisten",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/staabm",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2026-02-04T18:08:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "tijsverkoyen/css-to-inline-styles",
|
||||
"version": "v2.3.0",
|
||||
|
||||
301
config/dompdf.php
Normal file
301
config/dompdf.php
Normal file
@@ -0,0 +1,301 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Settings
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Set some default values. It is possible to add all defines that can be set
|
||||
| in dompdf_config.inc.php. You can also override the entire config file.
|
||||
|
|
||||
*/
|
||||
'show_warnings' => false, // Throw an Exception on warnings from dompdf
|
||||
|
||||
'public_path' => null, // Override the public path if needed
|
||||
|
||||
/*
|
||||
* Dejavu Sans font is missing glyphs for converted entities, turn it off if you need to show € and £.
|
||||
*/
|
||||
'convert_entities' => true,
|
||||
|
||||
'options' => [
|
||||
/**
|
||||
* The location of the DOMPDF font directory
|
||||
*
|
||||
* The location of the directory where DOMPDF will store fonts and font metrics
|
||||
* Note: This directory must exist and be writable by the webserver process.
|
||||
* *Please note the trailing slash.*
|
||||
*
|
||||
* Notes regarding fonts:
|
||||
* Additional .afm font metrics can be added by executing load_font.php from command line.
|
||||
*
|
||||
* Only the original "Base 14 fonts" are present on all pdf viewers. Additional fonts must
|
||||
* be embedded in the pdf file or the PDF may not display correctly. This can significantly
|
||||
* increase file size unless font subsetting is enabled. Before embedding a font please
|
||||
* review your rights under the font license.
|
||||
*
|
||||
* Any font specification in the source HTML is translated to the closest font available
|
||||
* in the font directory.
|
||||
*
|
||||
* The pdf standard "Base 14 fonts" are:
|
||||
* Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique,
|
||||
* Helvetica, Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique,
|
||||
* Times-Roman, Times-Bold, Times-BoldItalic, Times-Italic,
|
||||
* Symbol, ZapfDingbats.
|
||||
*/
|
||||
'font_dir' => storage_path('fonts'), // advised by dompdf (https://github.com/dompdf/dompdf/pull/782)
|
||||
|
||||
/**
|
||||
* The location of the DOMPDF font cache directory
|
||||
*
|
||||
* This directory contains the cached font metrics for the fonts used by DOMPDF.
|
||||
* This directory can be the same as DOMPDF_FONT_DIR
|
||||
*
|
||||
* Note: This directory must exist and be writable by the webserver process.
|
||||
*/
|
||||
'font_cache' => storage_path('fonts'),
|
||||
|
||||
/**
|
||||
* The location of a temporary directory.
|
||||
*
|
||||
* The directory specified must be writeable by the webserver process.
|
||||
* The temporary directory is required to download remote images and when
|
||||
* using the PDFLib back end.
|
||||
*/
|
||||
'temp_dir' => sys_get_temp_dir(),
|
||||
|
||||
/**
|
||||
* ==== IMPORTANT ====
|
||||
*
|
||||
* dompdf's "chroot": Prevents dompdf from accessing system files or other
|
||||
* files on the webserver. All local files opened by dompdf must be in a
|
||||
* subdirectory of this directory. DO NOT set it to '/' since this could
|
||||
* allow an attacker to use dompdf to read any files on the server. This
|
||||
* should be an absolute path.
|
||||
* This is only checked on command line call by dompdf.php, but not by
|
||||
* direct class use like:
|
||||
* $dompdf = new DOMPDF(); $dompdf->load_html($htmldata); $dompdf->render(); $pdfdata = $dompdf->output();
|
||||
*/
|
||||
'chroot' => realpath(base_path()),
|
||||
|
||||
/**
|
||||
* Protocol whitelist
|
||||
*
|
||||
* Protocols and PHP wrappers allowed in URIs, and the validation rules
|
||||
* that determine if a resouce may be loaded. Full support is not guaranteed
|
||||
* for the protocols/wrappers specified
|
||||
* by this array.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
'allowed_protocols' => [
|
||||
'data://' => ['rules' => []],
|
||||
'file://' => ['rules' => []],
|
||||
'http://' => ['rules' => []],
|
||||
'https://' => ['rules' => []],
|
||||
],
|
||||
|
||||
/**
|
||||
* Operational artifact (log files, temporary files) path validation
|
||||
*/
|
||||
'artifactPathValidation' => null,
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
'log_output_file' => null,
|
||||
|
||||
/**
|
||||
* Whether to enable font subsetting or not.
|
||||
*/
|
||||
'enable_font_subsetting' => true,
|
||||
|
||||
/**
|
||||
* The PDF rendering backend to use
|
||||
*
|
||||
* Valid settings are 'PDFLib', 'CPDF' (the bundled R&OS PDF class), 'GD' and
|
||||
* 'auto'. 'auto' will look for PDFLib and use it if found, or if not it will
|
||||
* fall back on CPDF. 'GD' renders PDFs to graphic files.
|
||||
* {@link * Canvas_Factory} ultimately determines which rendering class to
|
||||
* instantiate based on this setting.
|
||||
*
|
||||
* Both PDFLib & CPDF rendering backends provide sufficient rendering
|
||||
* capabilities for dompdf, however additional features (e.g. object,
|
||||
* image and font support, etc.) differ between backends. Please see
|
||||
* {@link PDFLib_Adapter} for more information on the PDFLib backend
|
||||
* and {@link CPDF_Adapter} and lib/class.pdf.php for more information
|
||||
* on CPDF. Also see the documentation for each backend at the links
|
||||
* below.
|
||||
*
|
||||
* The GD rendering backend is a little different than PDFLib and
|
||||
* CPDF. Several features of CPDF and PDFLib are not supported or do
|
||||
* not make any sense when creating image files. For example,
|
||||
* multiple pages are not supported, nor are PDF 'objects'. Have a
|
||||
* look at {@link GD_Adapter} for more information. GD support is
|
||||
* experimental, so use it at your own risk.
|
||||
*
|
||||
* @link http://www.pdflib.com
|
||||
* @link http://www.ros.co.nz/pdf
|
||||
* @link http://www.php.net/image
|
||||
*/
|
||||
'pdf_backend' => 'CPDF',
|
||||
|
||||
/**
|
||||
* html target media view which should be rendered into pdf.
|
||||
* List of types and parsing rules for future extensions:
|
||||
* http://www.w3.org/TR/REC-html40/types.html
|
||||
* screen, tty, tv, projection, handheld, print, braille, aural, all
|
||||
* Note: aural is deprecated in CSS 2.1 because it is replaced by speech in CSS 3.
|
||||
* Note, even though the generated pdf file is intended for print output,
|
||||
* the desired content might be different (e.g. screen or projection view of html file).
|
||||
* Therefore allow specification of content here.
|
||||
*/
|
||||
'default_media_type' => 'screen',
|
||||
|
||||
/**
|
||||
* The default paper size.
|
||||
*
|
||||
* North America standard is "letter"; other countries generally "a4"
|
||||
*
|
||||
* @see CPDF_Adapter::PAPER_SIZES for valid sizes ('letter', 'legal', 'A4', etc.)
|
||||
*/
|
||||
'default_paper_size' => 'a4',
|
||||
|
||||
/**
|
||||
* The default paper orientation.
|
||||
*
|
||||
* The orientation of the page (portrait or landscape).
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
'default_paper_orientation' => 'portrait',
|
||||
|
||||
/**
|
||||
* The default font family
|
||||
*
|
||||
* Used if no suitable fonts can be found. This must exist in the font folder.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
'default_font' => 'sans-serif',
|
||||
|
||||
/**
|
||||
* Image DPI setting
|
||||
*
|
||||
* This setting determines the default DPI setting for images and fonts. The
|
||||
* DPI may be overridden for inline images by explictly setting the
|
||||
* image's width & height style attributes (i.e. if the image's native
|
||||
* width is 600 pixels and you specify the image's width as 72 points,
|
||||
* the image will have a DPI of 600 in the rendered PDF. The DPI of
|
||||
* background images can not be overridden and is controlled entirely
|
||||
* via this parameter.
|
||||
*
|
||||
* For the purposes of DOMPDF, pixels per inch (PPI) = dots per inch (DPI).
|
||||
* If a size in html is given as px (or without unit as image size),
|
||||
* this tells the corresponding size in pt.
|
||||
* This adjusts the relative sizes to be similar to the rendering of the
|
||||
* html page in a reference browser.
|
||||
*
|
||||
* In pdf, always 1 pt = 1/72 inch
|
||||
*
|
||||
* Rendering resolution of various browsers in px per inch:
|
||||
* Windows Firefox and Internet Explorer:
|
||||
* SystemControl->Display properties->FontResolution: Default:96, largefonts:120, custom:?
|
||||
* Linux Firefox:
|
||||
* about:config *resolution: Default:96
|
||||
* (xorg screen dimension in mm and Desktop font dpi settings are ignored)
|
||||
*
|
||||
* Take care about extra font/image zoom factor of browser.
|
||||
*
|
||||
* In images, <img> size in pixel attribute, img css style, are overriding
|
||||
* the real image dimension in px for rendering.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
'dpi' => 150,
|
||||
|
||||
/**
|
||||
* Enable embedded PHP
|
||||
*
|
||||
* If this setting is set to true then DOMPDF will automatically evaluate embedded PHP contained
|
||||
* within <script type="text/php"> ... </script> tags.
|
||||
*
|
||||
* ==== IMPORTANT ==== Enabling this for documents you do not trust (e.g. arbitrary remote html pages)
|
||||
* is a security risk.
|
||||
* Embedded scripts are run with the same level of system access available to dompdf.
|
||||
* Set this option to false (recommended) if you wish to process untrusted documents.
|
||||
* This setting may increase the risk of system exploit.
|
||||
* Do not change this settings without understanding the consequences.
|
||||
* Additional documentation is available on the dompdf wiki at:
|
||||
* https://github.com/dompdf/dompdf/wiki
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
'enable_php' => false,
|
||||
|
||||
/**
|
||||
* Rnable inline JavaScript
|
||||
*
|
||||
* If this setting is set to true then DOMPDF will automatically insert JavaScript code contained
|
||||
* within <script type="text/javascript"> ... </script> tags as written into the PDF.
|
||||
* NOTE: This is PDF-based JavaScript to be executed by the PDF viewer,
|
||||
* not browser-based JavaScript executed by Dompdf.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
'enable_javascript' => true,
|
||||
|
||||
/**
|
||||
* Enable remote file access
|
||||
*
|
||||
* If this setting is set to true, DOMPDF will access remote sites for
|
||||
* images and CSS files as required.
|
||||
*
|
||||
* ==== IMPORTANT ====
|
||||
* This can be a security risk, in particular in combination with isPhpEnabled and
|
||||
* allowing remote html code to be passed to $dompdf = new DOMPDF(); $dompdf->load_html(...);
|
||||
* This allows anonymous users to download legally doubtful internet content which on
|
||||
* tracing back appears to being downloaded by your server, or allows malicious php code
|
||||
* in remote html pages to be executed by your server with your account privileges.
|
||||
*
|
||||
* This setting may increase the risk of system exploit. Do not change
|
||||
* this settings without understanding the consequences. Additional
|
||||
* documentation is available on the dompdf wiki at:
|
||||
* https://github.com/dompdf/dompdf/wiki
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
'enable_remote' => true,
|
||||
|
||||
/**
|
||||
* List of allowed remote hosts
|
||||
*
|
||||
* Each value of the array must be a valid hostname.
|
||||
*
|
||||
* This will be used to filter which resources can be loaded in combination with
|
||||
* isRemoteEnabled. If enable_remote is FALSE, then this will have no effect.
|
||||
*
|
||||
* Leave to NULL to allow any remote host.
|
||||
*
|
||||
* @var array|null
|
||||
*/
|
||||
'allowed_remote_hosts' => null,
|
||||
|
||||
/**
|
||||
* A ratio applied to the fonts height to be more like browsers' line height
|
||||
*/
|
||||
'font_height_ratio' => 1.1,
|
||||
|
||||
/**
|
||||
* Use the HTML5 Lib parser
|
||||
*
|
||||
* @deprecated This feature is now always on in dompdf 2.x
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
'enable_html5_parser' => true,
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('clientes_contratos', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->foreignId('cliente_id')->constrained('clientes')->cascadeOnDelete();
|
||||
$table->integer('horas_contratadas');
|
||||
$table->string('contrato');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('clientes_contratos');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('clientes_relatorios_mensals', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->foreignId('id_cliente')->nullable()->constrained('clientes')->cascadeOnDelete();
|
||||
$table->integer('horas_utilizadas');
|
||||
$table->json('chamados');
|
||||
$table->json('melhorias')->nullable();
|
||||
$table->longText('nota_consultor')->nullable();
|
||||
$table->longText('observacao_consultor')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('clientes_relatorios_mensals');
|
||||
}
|
||||
};
|
||||
@@ -1,230 +1,331 @@
|
||||
@extends('theme.default')
|
||||
@section('page.title', $cliente->name)
|
||||
@section('content')
|
||||
<div class="page-title">
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('clientes') }}">
|
||||
<svg width="16" height="16" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M2.125 6.375L8.5 1.41667L14.875 6.375V14.1667C14.875 14.5424 14.7257 14.9027 14.4601 15.1684C14.1944 15.4341 13.8341 15.5833 13.4583 15.5833H3.54167C3.16594 15.5833 2.80561 15.4341 2.53993 15.1684C2.27426 14.9027 2.125 14.5424 2.125 14.1667V6.375Z"
|
||||
stroke="var(--bs-body-color)" stroke-linecap="round" stroke-linejoin="round" />
|
||||
<path d="M6.375 15.5833V8.5H10.625V15.5833" stroke="var(--bs-body-color)" stroke-linecap="round"
|
||||
stroke-linejoin="round" />
|
||||
</svg>
|
||||
Clientes
|
||||
</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">{{ $cliente->name }}</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="page-title">
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ route('clientes') }}">
|
||||
<svg width="16" height="16" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M2.125 6.375L8.5 1.41667L14.875 6.375V14.1667C14.875 14.5424 14.7257 14.9027 14.4601 15.1684C14.1944 15.4341 13.8341 15.5833 13.4583 15.5833H3.54167C3.16594 15.5833 2.80561 15.4341 2.53993 15.1684C2.27426 14.9027 2.125 14.5424 2.125 14.1667V6.375Z"
|
||||
stroke="var(--bs-body-color)" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M6.375 15.5833V8.5H10.625V15.5833" stroke="var(--bs-body-color)"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"/>
|
||||
</svg>
|
||||
Clientes
|
||||
</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">{{ $cliente->name }}</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row align-items-stretch">
|
||||
<div class="col-xl-3">
|
||||
<div class="card h-80">
|
||||
<div class="card-body">
|
||||
<div class="text-center mb-3">
|
||||
<img src="{{ $cliente->logotipo }}" class="avatar avatar-lg mb-2 logo-avatar" alt="">
|
||||
</div>
|
||||
<ul class="list-group list-group-flush">
|
||||
<li class="list-group-item px-0">
|
||||
<span>Contato Principal</span>
|
||||
<h6 class="m-0">demo123@gmail.com</h6>
|
||||
</li>
|
||||
<li class="list-group-item px-0">
|
||||
<h6 class="m-0">Tenant ID</h6>
|
||||
@if (isset($cliente->cred))
|
||||
<span>{{ $cliente->cred['id_tenant'] }}</span>
|
||||
@else
|
||||
<span>Não Cadastrado</span>
|
||||
@endif
|
||||
</li>
|
||||
<li class="list-group-item px-0">
|
||||
<h6 class="m-0">Client ID</h6>
|
||||
@if (isset($cliente->cred))
|
||||
<span>{{ $cliente->cred['id_client'] }}</span>
|
||||
@else
|
||||
<span>Não Cadastrado</span>
|
||||
@endif
|
||||
</li>
|
||||
<li class="list-group-item px-0">
|
||||
<h6 class="m-0">Secret ID</h6>
|
||||
@if (isset($cliente->cred))
|
||||
<span>{{ $cliente->cred['id_secret'] }}</span>
|
||||
@else
|
||||
<span>Não Cadastrado</span>
|
||||
@endif
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container-fluid">
|
||||
<div class="row align-items-stretch">
|
||||
<div class="col-xl-3">
|
||||
<div class="card h-80">
|
||||
<div class="card-body">
|
||||
<div class="text-center mb-3">
|
||||
<img src="{{ $cliente->logotipo }}" class="avatar avatar-lg mb-2 logo-avatar" alt="">
|
||||
</div>
|
||||
<ul class="list-group list-group-flush">
|
||||
<li class="list-group-item px-0">
|
||||
<span>Contato Principal</span>
|
||||
<h6 class="m-0">demo123@gmail.com</h6>
|
||||
</li>
|
||||
<li class="list-group-item px-0">
|
||||
<h6 class="m-0">Tenant ID</h6>
|
||||
@if (isset($cliente->cred))
|
||||
<span>{{ $cliente->cred['id_tenant'] }}</span>
|
||||
@else
|
||||
<span>Não Cadastrado</span>
|
||||
@endif
|
||||
</li>
|
||||
<li class="list-group-item px-0">
|
||||
<h6 class="m-0">Client ID</h6>
|
||||
@if (isset($cliente->cred))
|
||||
<span>{{ $cliente->cred['id_client'] }}</span>
|
||||
@else
|
||||
<span>Não Cadastrado</span>
|
||||
@endif
|
||||
</li>
|
||||
<li class="list-group-item px-0">
|
||||
<h6 class="m-0">Secret ID</h6>
|
||||
@if (isset($cliente->cred))
|
||||
<span>{{ $cliente->cred['id_secret'] }}</span>
|
||||
@else
|
||||
<span>Não Cadastrado</span>
|
||||
@endif
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-9">
|
||||
<div class="card h-80">
|
||||
<div class="card-body">
|
||||
<div class="text-center mb-3">
|
||||
<h4>Informações</h4>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<div class="card">
|
||||
<div class="card-body overflow-hidden">
|
||||
<div class="row gx-5 gy-3">
|
||||
<div class="col-xl-3 col-sm-4 col-6 border-end">
|
||||
<div class="d-flex align-items-center">
|
||||
<h2 class="text-purple my-0 fs-3 me-2">
|
||||
@php
|
||||
use \App\Models\clientes_usuarios;
|
||||
$quantidadeusuarios = clientes_usuarios::where('principalType', 'user')->where('id_cliente', $cliente->id)->count();
|
||||
@endphp
|
||||
{{ $quantidadeusuarios}}
|
||||
</h2>
|
||||
</div>
|
||||
<span>Usuários</span>
|
||||
</div>
|
||||
<div class="col-xl-3 col-sm-4 col-6 border-end">
|
||||
<div class="d-flex align-items-center ">
|
||||
<h2 class="text-purple my-0 fs-3 me-2">{{ $cliente->grupos()->count() }}
|
||||
</h2>
|
||||
</div>
|
||||
<span>Grupos</span>
|
||||
</div>
|
||||
<div class="col-xl-3 col-sm-4 col-6 border-end">
|
||||
<div class="d-flex align-items-center">
|
||||
<h2 class="text-purple my-0 fs-3 me-2">
|
||||
{{ $cliente->sitesSharepoint()->count() }}
|
||||
</h2>
|
||||
</div>
|
||||
<span>Sharepoint</span>
|
||||
</div>
|
||||
<div class="col-xl-3 col-sm-4 col-6 border-end">
|
||||
<div class="d-flex align-items-center">
|
||||
<h2 class="text-purple my-0 fs-3 me-2">
|
||||
{{ $cliente->dominios()->count() }}
|
||||
</h2>
|
||||
</div>
|
||||
<span>Domínios</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row align-items-stretch">
|
||||
<div class="col-xl-6">
|
||||
<div class="card h-auto">
|
||||
<div class="card-header border-0 py-3">
|
||||
<h4 class="card-title">Top 10 Sites Sharepoint</h4>
|
||||
</div>
|
||||
<div class="card-body p-0 table-card-body pb-2">
|
||||
<div class="table-responsive">
|
||||
<table id="paymentHistoryTable" class="table table-sm-responsive">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th class="mw-100">Displayname</th>
|
||||
<th class="mw-100">Storage</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@php
|
||||
use App\Models\clientes_sharepoint;
|
||||
$sitesSharepoint = clientes_sharepoint::where('id_cliente', $cliente->id)->orderBy('storage_gb', 'desc')->limit(10)->get();
|
||||
@endphp
|
||||
<tbody class="text-nowrap">
|
||||
@foreach ($sitesSharepoint as $siteSharepoint)
|
||||
<tr>
|
||||
<td><a href="{{ $siteSharepoint->webUrl }}"> {{ $siteSharepoint->displayName }}
|
||||
</a>
|
||||
</td>
|
||||
@if (isset($siteSharepoint->storage_gb))
|
||||
<td>{{ $siteSharepoint->storage_gb }} GB</td>
|
||||
@else
|
||||
<td><span class="badge badge-sm badge-danger light">Sem Relatório</span></td>
|
||||
@endif
|
||||
<div class="col-xl-9">
|
||||
<div class="card h-80">
|
||||
<div class="card-body">
|
||||
<div class="text-center mb-3">
|
||||
<h4>Informações</h4>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<div class="card">
|
||||
<div class="card-body overflow-hidden">
|
||||
<div class="row gx-5 gy-3">
|
||||
<div class="col-xl-3 col-sm-4 col-6 border-end">
|
||||
<div class="d-flex align-items-center">
|
||||
<h2 class="text-purple my-0 fs-3 me-2">
|
||||
@php
|
||||
use \App\Models\clientes_usuarios;
|
||||
$quantidadeusuarios = clientes_usuarios::where('principalType', 'user')->where('id_cliente', $cliente->id)->count();
|
||||
@endphp
|
||||
{{ $quantidadeusuarios}}
|
||||
</h2>
|
||||
</div>
|
||||
<span>Usuários</span>
|
||||
</div>
|
||||
<div class="col-xl-3 col-sm-4 col-6 border-end">
|
||||
<div class="d-flex align-items-center ">
|
||||
<h2 class="text-purple my-0 fs-3 me-2">{{ $cliente->grupos()->count() }}
|
||||
</h2>
|
||||
</div>
|
||||
<span>Grupos</span>
|
||||
</div>
|
||||
<div class="col-xl-3 col-sm-4 col-6 border-end">
|
||||
<div class="d-flex align-items-center">
|
||||
<h2 class="text-purple my-0 fs-3 me-2">
|
||||
{{ $cliente->sitesSharepoint()->count() }}
|
||||
</h2>
|
||||
</div>
|
||||
<span>Sharepoint</span>
|
||||
</div>
|
||||
<div class="col-xl-3 col-sm-4 col-6 border-end">
|
||||
<div class="d-flex align-items-center">
|
||||
<h2 class="text-purple my-0 fs-3 me-2">
|
||||
{{ $cliente->dominios()->count() }}
|
||||
</h2>
|
||||
</div>
|
||||
<span>Domínios</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center mb-3">
|
||||
<h4>Contratos</h4>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<div class="card shadow-sm border-0">
|
||||
<div class="card-header bg-white border-0 pb-0">
|
||||
<h5 class="mb-0">Utilização dos Contratos</h5>
|
||||
<small class="text-muted">Acompanhe o consumo de horas de cada contrato</small>
|
||||
</div>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-6">
|
||||
<div class="card h-auto">
|
||||
<div class="card-header border-0 py-3">
|
||||
<h4 class="card-title">Divergências de Domínios</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<table class="table align-middle table-hover">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th style="width: 25%;">Contrato</th>
|
||||
<th style="width: 75%;">Utilização</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($cliente->contratos as $contrato)
|
||||
@php
|
||||
$horas_utilizadas = 140; // valor fixo por enquanto
|
||||
$horas_contratadas = $contrato->horas_contratadas ?? 0;
|
||||
|
||||
<div class="card-body p-0 table-card-body pb-2">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm align-middle text-nowrap mb-0">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Domínio</th>
|
||||
<th>Tipos Divergentes</th>
|
||||
<th>Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
$porcentagem_utilizada = $horas_contratadas > 0
|
||||
? round(($horas_utilizadas / $horas_contratadas) * 100)
|
||||
: 0;
|
||||
|
||||
<tbody>
|
||||
@php
|
||||
$possuiDivergencia = false;
|
||||
@endphp
|
||||
if ($porcentagem_utilizada < 60) {
|
||||
$cor = 'bg-success';
|
||||
$status = 'Baixa utilização';
|
||||
} elseif ($porcentagem_utilizada < 80) {
|
||||
$cor = 'bg-warning';
|
||||
$status = 'Atenção';
|
||||
} else {
|
||||
$cor = 'bg-danger';
|
||||
$status = 'Alta utilização';
|
||||
}
|
||||
|
||||
@foreach ($cliente->dominios as $dominio)
|
||||
@if ($dominio->tipos_divergentes->isNotEmpty())
|
||||
@php $possuiDivergencia = true; @endphp
|
||||
$largura_barra = min($porcentagem_utilizada, 100);
|
||||
@endphp
|
||||
|
||||
<tr>
|
||||
{{-- Domínio --}}
|
||||
<td class="fw-semibold">
|
||||
{{ $dominio->id_domain }}
|
||||
</td>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="fw-semibold text-dark">
|
||||
{{ $contrato->contrato }}
|
||||
</div>
|
||||
<small class="text-muted">
|
||||
{{ $status }}
|
||||
</small>
|
||||
</td>
|
||||
|
||||
{{-- Tipos divergentes --}}
|
||||
<td>
|
||||
@foreach ($dominio->tipos_divergentes as $tipo)
|
||||
<span class="badge bg-danger me-1" data-bs-toggle="tooltip"
|
||||
data-bs-placement="top" data-bs-html="true"
|
||||
title="{!! nl2br(e($dominio->tooltipPorTipo($tipo))) !!}">
|
||||
<td>
|
||||
<div class="d-flex justify-content-between mb-1">
|
||||
<small class="text-muted">
|
||||
{{ $horas_utilizadas }}h usadas de {{ $horas_contratadas }}h contratadas
|
||||
</small>
|
||||
<small class="fw-semibold text-dark">
|
||||
{{ $porcentagem_utilizada }}%
|
||||
</small>
|
||||
</div>
|
||||
|
||||
<div class="progress rounded-pill shadow-sm"
|
||||
style="height: 22px; cursor: pointer;"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-placement="top"
|
||||
title="Horas contratadas: {{ $horas_contratadas }}h | Horas utilizadas: {{ $horas_utilizadas }}h | Utilização: {{ $porcentagem_utilizada }}%">
|
||||
<div class="progress-bar progress-bar-striped progress-bar-animated {{ $cor }} rounded-pill"
|
||||
role="progressbar"
|
||||
style="width: {{ $largura_barra }}%;"
|
||||
aria-valuenow="{{ $porcentagem_utilizada }}"
|
||||
aria-valuemin="0"
|
||||
aria-valuemax="100">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
<small class="text-muted">
|
||||
Contratadas: <strong>{{ $horas_contratadas }}h</strong>
|
||||
|
|
||||
Utilizadas: <strong>{{ $horas_utilizadas }}h</strong>
|
||||
|
|
||||
Consumo: <strong>{{ $porcentagem_utilizada }}%</strong>
|
||||
</small>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row align-items-stretch">
|
||||
<div class="col-xl-6">
|
||||
<div class="card h-auto">
|
||||
<div class="card-header border-0 py-3">
|
||||
<h4 class="card-title">Top 10 Sites Sharepoint</h4>
|
||||
</div>
|
||||
<div class="card-body p-0 table-card-body pb-2">
|
||||
<div class="table-responsive">
|
||||
<table id="paymentHistoryTable" class="table table-sm-responsive">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th class="mw-100">Displayname</th>
|
||||
<th class="mw-100">Storage</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@php
|
||||
use App\Models\clientes_sharepoint;
|
||||
$sitesSharepoint = clientes_sharepoint::where('id_cliente', $cliente->id)->orderBy('storage_gb', 'desc')->limit(10)->get();
|
||||
@endphp
|
||||
<tbody class="text-nowrap">
|
||||
@foreach ($sitesSharepoint as $siteSharepoint)
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ $siteSharepoint->webUrl }}"> {{ $siteSharepoint->displayName }}
|
||||
</a>
|
||||
</td>
|
||||
@if (isset($siteSharepoint->storage_gb))
|
||||
<td>{{ $siteSharepoint->storage_gb }} GB</td>
|
||||
@else
|
||||
<td><span class="badge badge-sm badge-danger light">Sem Relatório</span>
|
||||
</td>
|
||||
@endif
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-6">
|
||||
<div class="card h-auto">
|
||||
<div class="card-header border-0 py-3">
|
||||
<h4 class="card-title">Divergências de Domínios</h4>
|
||||
</div>
|
||||
|
||||
<div class="card-body p-0 table-card-body pb-2">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm align-middle text-nowrap mb-0">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Domínio</th>
|
||||
<th>Tipos Divergentes</th>
|
||||
<th>Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
@php
|
||||
$possuiDivergencia = false;
|
||||
@endphp
|
||||
|
||||
@foreach ($cliente->dominios as $dominio)
|
||||
@if ($dominio->tipos_divergentes->isNotEmpty())
|
||||
@php $possuiDivergencia = true; @endphp
|
||||
|
||||
<tr>
|
||||
{{-- Domínio --}}
|
||||
<td class="fw-semibold">
|
||||
{{ $dominio->id_domain }}
|
||||
</td>
|
||||
|
||||
{{-- Tipos divergentes --}}
|
||||
<td>
|
||||
@foreach ($dominio->tipos_divergentes as $tipo)
|
||||
<span class="badge bg-danger me-1" data-bs-toggle="tooltip"
|
||||
data-bs-placement="top" data-bs-html="true"
|
||||
title="{!! nl2br(e($dominio->tooltipPorTipo($tipo))) !!}">
|
||||
{{ $tipo }}
|
||||
</span>
|
||||
@endforeach
|
||||
</td>
|
||||
@endforeach
|
||||
</td>
|
||||
|
||||
{{-- Status --}}
|
||||
<td>
|
||||
{{-- Status --}}
|
||||
<td>
|
||||
<span class="badge bg-danger-subtle text-danger">
|
||||
Divergente
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endforeach
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
@if (!$possuiDivergencia)
|
||||
<tr>
|
||||
<td colspan="3" class="text-center text-muted py-4">
|
||||
Nenhuma divergência encontrada
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@if (!$possuiDivergencia)
|
||||
<tr>
|
||||
<td colspan="3" class="text-center text-muted py-4">
|
||||
Nenhuma divergência encontrada
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@section('scripts')
|
||||
<script>
|
||||
@@ -238,6 +339,14 @@
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]');
|
||||
[...tooltipTriggerList].forEach(function (tooltipTriggerEl) {
|
||||
new bootstrap.Tooltip(tooltipTriggerEl);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -20,197 +20,199 @@
|
||||
|
||||
<body>
|
||||
|
||||
<!-- Start - Preloader -->
|
||||
<div id="preloader">
|
||||
<div class="lds-ripple">
|
||||
<div></div>
|
||||
<div></div>
|
||||
</div>
|
||||
<!-- Start - Preloader -->
|
||||
<div id="preloader">
|
||||
<div class="lds-ripple">
|
||||
<div></div>
|
||||
<div></div>
|
||||
</div>
|
||||
<!-- End - Preloader -->
|
||||
</div>
|
||||
<!-- End - Preloader -->
|
||||
|
||||
<!-- Start - Main Wrapper -->
|
||||
<div id="main-wrapper">
|
||||
<!-- Start - Main Wrapper -->
|
||||
<div id="main-wrapper">
|
||||
|
||||
<!-- Start - Nav Header -->
|
||||
<div class="nav-header">
|
||||
<a href="{{ route('dashboard') }}" class="brand-logo" aria-label="Brand Logo">
|
||||
</a>
|
||||
</div>
|
||||
<!-- End - Nav Header -->
|
||||
<!-- Start - Nav Header -->
|
||||
<div class="nav-header">
|
||||
<a href="{{ route('dashboard') }}" class="brand-logo" aria-label="Brand Logo">
|
||||
</a>
|
||||
</div>
|
||||
<!-- End - Nav Header -->
|
||||
|
||||
<!-- Start - Sidebar Chat Box -->
|
||||
<!-- Start - Sidebar Chat Box -->
|
||||
|
||||
<!-- End - Sidebar Chat Box -->
|
||||
<!-- End - Sidebar Chat Box -->
|
||||
|
||||
<!-- Start - Header -->
|
||||
<div class="header">
|
||||
<div class="header-content">
|
||||
<nav class="navbar navbar-expand">
|
||||
<div class="collapse navbar-collapse justify-content-between">
|
||||
<div class="header-left">
|
||||
</div>
|
||||
<ul class="navbar-nav header-right">
|
||||
<li class="nav-item notification_dropdown d-none d-sm-flex">
|
||||
<a class="nav-link dz-fullscreen" href="javascript:void(0);" aria-label="Fullscreen">
|
||||
<svg id="icon-full" viewBox="0 0 24 24" width="20" height="20"
|
||||
stroke="var(--bs-body-color)" stroke-width="2" fill="none"
|
||||
stroke-linecap="round" stroke-linejoin="round">
|
||||
<path
|
||||
<!-- Start - Header -->
|
||||
<div class="header">
|
||||
<div class="header-content">
|
||||
<nav class="navbar navbar-expand">
|
||||
<div class="collapse navbar-collapse justify-content-between">
|
||||
<div class="header-left">
|
||||
</div>
|
||||
<ul class="navbar-nav header-right">
|
||||
<li class="nav-item notification_dropdown d-none d-sm-flex">
|
||||
<a class="nav-link dz-fullscreen" href="javascript:void(0);" aria-label="Fullscreen">
|
||||
<svg id="icon-full" viewBox="0 0 24 24" width="20" height="20"
|
||||
stroke="var(--bs-body-color)" stroke-width="2" fill="none"
|
||||
stroke-linecap="round" stroke-linejoin="round">
|
||||
<path
|
||||
d="M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"
|
||||
style="stroke-dasharray: 37, 57; stroke-dashoffset: 0;"></path>
|
||||
</svg>
|
||||
<svg id="icon-minimize" width="20" height="20" viewBox="0 0 24 24" fill="none"
|
||||
stroke="var(--bs-body-color)" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round" class="feather feather-minimize">
|
||||
<path
|
||||
</svg>
|
||||
<svg id="icon-minimize" width="20" height="20" viewBox="0 0 24 24" fill="none"
|
||||
stroke="var(--bs-body-color)" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round" class="feather feather-minimize">
|
||||
<path
|
||||
d="M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3"
|
||||
style="stroke-dasharray: 37, 57; stroke-dashoffset: 0;"></path>
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item dropdown header-profile-dropdown">
|
||||
<a class="nav-link" href="javascript:void(0);" role="button" data-bs-toggle="dropdown"
|
||||
aria-expanded="false">
|
||||
<div class="profile-head">
|
||||
<div class="profile-media">
|
||||
<img src="{{ asset('assets/images/tab/1.jpg') }}" alt="">
|
||||
</div>
|
||||
<div class="header-info">
|
||||
<h6 class="author-name">{{ Auth::user()->name }}</h6>
|
||||
<small>{{ Auth::user()->email }}</small>
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item dropdown header-profile-dropdown">
|
||||
<a class="nav-link" href="javascript:void(0);" role="button" data-bs-toggle="dropdown"
|
||||
aria-expanded="false">
|
||||
<div class="profile-head">
|
||||
<div class="profile-media">
|
||||
<img src="{{ asset('assets/images/tab/1.jpg') }}" alt="">
|
||||
</div>
|
||||
<div class="header-info">
|
||||
<h6 class="author-name">{{ Auth::user()->name }}</h6>
|
||||
<small>{{ Auth::user()->email }}</small>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li>
|
||||
<div class="py-2 d-flex px-3">
|
||||
<img src="{{ asset('assets/images/tab/1.jpg') }}"
|
||||
class="avatar avatar-sm rounded-circle" alt="">
|
||||
<div class="ms-2">
|
||||
<h6 class="mb-0">{{ Auth::user()->name }}</h6>
|
||||
<small>Web Designer</small>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li>
|
||||
<div class="py-2 d-flex px-3">
|
||||
<img src="{{ asset('assets/images/tab/1.jpg') }}"
|
||||
class="avatar avatar-sm rounded-circle" alt="">
|
||||
<div class="ms-2">
|
||||
<h6 class="mb-0">{{ Auth::user()->name }}</h6>
|
||||
<small>Web Designer</small>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
<li><a class="dropdown-item" href="{{ route('horizon.index') }}" target="_blank"><i
|
||||
</li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
<li><a class="dropdown-item" href="{{ route('horizon.index') }}" target="_blank"><i
|
||||
class="fa-solid fa-chart-area text-primary me-1"></i> Horizon</a></li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="dropdown-item"
|
||||
onclick="event.preventDefault(); document.getElementById('logout-form').submit();">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18"
|
||||
viewBox="0 0 24 24" fill="none" stroke="var(--bs-danger)"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="var(--bs-danger)"
|
||||
d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"></path>
|
||||
<polyline stroke="var(--bs-danger)" points="16 17 21 12 16 7">
|
||||
</polyline>
|
||||
<line x1="21" y1="12" x2="9" y2="12"></line>
|
||||
</svg>
|
||||
<span class="ms-2 text-danger">Logout</span>
|
||||
</a>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="dropdown-item"
|
||||
onclick="event.preventDefault(); document.getElementById('logout-form').submit();">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18"
|
||||
viewBox="0 0 24 24" fill="none" stroke="var(--bs-danger)"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="var(--bs-danger)"
|
||||
d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"></path>
|
||||
<polyline stroke="var(--bs-danger)" points="16 17 21 12 16 7">
|
||||
</polyline>
|
||||
<line x1="21" y1="12" x2="9" y2="12"></line>
|
||||
</svg>
|
||||
<span class="ms-2 text-danger">Logout</span>
|
||||
</a>
|
||||
|
||||
<form id="logout-form" action="{{ route('logout') }}" method="POST"
|
||||
class="d-none">
|
||||
@csrf
|
||||
</form>
|
||||
<form id="logout-form" action="{{ route('logout') }}" method="POST"
|
||||
class="d-none">
|
||||
@csrf
|
||||
</form>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
<!-- End - Header -->
|
||||
|
||||
<!-- Start - Sidebar Navigation -->
|
||||
<div class="deznav">
|
||||
<div class="deznav-scroll">
|
||||
<ul class="metismenu" id="menu">
|
||||
<li class="menu-title" data-i18n="CloudEssential">CloudEssential</li>
|
||||
<li>
|
||||
<a href="{{ route('dashboard') }}" aria-expanded="false">
|
||||
<div class="menu-icon">
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M10.986 14.0673C7.4407 14.0673 4.41309 14.6034 4.41309 16.7501C4.41309 18.8969 7.4215 19.4521 10.986 19.4521C14.5313 19.4521 17.5581 18.9152 17.5581 16.7693C17.5581 14.6234 14.5505 14.0673 10.986 14.0673Z"
|
||||
stroke="#888888" stroke-linecap="round" stroke-linejoin="round" />
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M10.986 11.0054C13.3126 11.0054 15.1983 9.11881 15.1983 6.79223C15.1983 4.46564 13.3126 2.57993 10.986 2.57993C8.65944 2.57993 6.77285 4.46564 6.77285 6.79223C6.76499 9.11096 8.63849 10.9975 10.9563 11.0054H10.986Z"
|
||||
stroke="#888888" stroke-linecap="round" stroke-linejoin="round" />
|
||||
</svg>
|
||||
</div>
|
||||
<span class="nav-text" data-i18n="Dashboard">Dashboard</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ route('clientes') }}" aria-expanded="false">
|
||||
<div class="menu-icon">
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M10.986 14.0673C7.4407 14.0673 4.41309 14.6034 4.41309 16.7501C4.41309 18.8969 7.4215 19.4521 10.986 19.4521C14.5313 19.4521 17.5581 18.9152 17.5581 16.7693C17.5581 14.6234 14.5505 14.0673 10.986 14.0673Z"
|
||||
stroke="#888888" stroke-linecap="round" stroke-linejoin="round" />
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M10.986 11.0054C13.3126 11.0054 15.1983 9.11881 15.1983 6.79223C15.1983 4.46564 13.3126 2.57993 10.986 2.57993C8.65944 2.57993 6.77285 4.46564 6.77285 6.79223C6.76499 9.11096 8.63849 10.9975 10.9563 11.0054H10.986Z"
|
||||
stroke="#888888" stroke-linecap="round" stroke-linejoin="round" />
|
||||
</svg>
|
||||
</div>
|
||||
<span class="nav-text" data-i18n="Clientes">Clientes</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End - Header -->
|
||||
|
||||
<!-- Start - Sidebar Navigation -->
|
||||
<div class="deznav">
|
||||
<div class="deznav-scroll">
|
||||
<ul class="metismenu" id="menu">
|
||||
<li class="menu-title" data-i18n="CloudEssential">CloudEssential</li>
|
||||
<li>
|
||||
<a href="{{ route('dashboard') }}" aria-expanded="false">
|
||||
<div class="menu-icon">
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M10.986 14.0673C7.4407 14.0673 4.41309 14.6034 4.41309 16.7501C4.41309 18.8969 7.4215 19.4521 10.986 19.4521C14.5313 19.4521 17.5581 18.9152 17.5581 16.7693C17.5581 14.6234 14.5505 14.0673 10.986 14.0673Z"
|
||||
stroke="#888888" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M10.986 11.0054C13.3126 11.0054 15.1983 9.11881 15.1983 6.79223C15.1983 4.46564 13.3126 2.57993 10.986 2.57993C8.65944 2.57993 6.77285 4.46564 6.77285 6.79223C6.76499 9.11096 8.63849 10.9975 10.9563 11.0054H10.986Z"
|
||||
stroke="#888888" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
</div>
|
||||
<span class="nav-text" data-i18n="Dashboard">Dashboard</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ route('clientes') }}" aria-expanded="false">
|
||||
<div class="menu-icon">
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M10.986 14.0673C7.4407 14.0673 4.41309 14.6034 4.41309 16.7501C4.41309 18.8969 7.4215 19.4521 10.986 19.4521C14.5313 19.4521 17.5581 18.9152 17.5581 16.7693C17.5581 14.6234 14.5505 14.0673 10.986 14.0673Z"
|
||||
stroke="#888888" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M10.986 11.0054C13.3126 11.0054 15.1983 9.11881 15.1983 6.79223C15.1983 4.46564 13.3126 2.57993 10.986 2.57993C8.65944 2.57993 6.77285 4.46564 6.77285 6.79223C6.76499 9.11096 8.63849 10.9975 10.9563 11.0054H10.986Z"
|
||||
stroke="#888888" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
</div>
|
||||
<span class="nav-text" data-i18n="Clientes">Clientes</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- End - Sidebar Navigation -->
|
||||
|
||||
<!-- Start - Content Body -->
|
||||
<main class="content-body">
|
||||
@yield('content')
|
||||
</main>
|
||||
<!-- End - Content Body -->
|
||||
|
||||
<!-- Start - Footer -->
|
||||
<div class="footer">
|
||||
<div class="copyright text-center">
|
||||
<p class="mb-0">Copyright © Developed by <a href="https://cloudessential.tech/" target="_blank">Felipe
|
||||
Aquino</a> 2025 - <span class="current-year"></span></p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End - Footer -->
|
||||
|
||||
</div>
|
||||
<!-- End - Main Wrapper -->
|
||||
<!-- End - Sidebar Navigation -->
|
||||
|
||||
<!-- Start - Content Body -->
|
||||
<main class="content-body">
|
||||
@yield('content')
|
||||
</main>
|
||||
<!-- End - Content Body -->
|
||||
|
||||
<!-- Start - Footer -->
|
||||
<div class="footer">
|
||||
<div class="copyright text-center">
|
||||
<p class="mb-0">Copyright © Developed by <a href="https://cloudessential.tech/" target="_blank">Felipe
|
||||
Aquino</a> 2025 - <span class="current-year"></span></p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End - Footer -->
|
||||
|
||||
</div>
|
||||
<!-- End - Main Wrapper -->
|
||||
|
||||
|
||||
<!-- Start - Page Scripts -->
|
||||
<script src="{{ asset('assets/vendor/jquery/dist/jquery.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/vendor/bootstrap/dist/js/bootstrap.bundle.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/vendor/bootstrap-select/dist/js/bootstrap-select.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/vendor/metismenu/dist/metisMenu.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/vendor/@yaireo/tagify/dist/tagify.js') }}"></script>
|
||||
<!-- Script For Dropzone -->
|
||||
<script src="/assets/vendor/dropzone/dropzone.min.js"></script>
|
||||
<!-- Script For Multiple Languages -->
|
||||
<script src="{{ asset('assets/vendor/i18n/i18n.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/translator.js') }}"></script>
|
||||
|
||||
<!-- Script For Custom JS -->
|
||||
<script src="{{ asset('assets/js/deznav-init.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/custom.js') }}"></script>
|
||||
|
||||
@yield('scripts')
|
||||
<!-- End - Page Scripts -->
|
||||
<!-- Start - Page Scripts -->
|
||||
<script src="../assets/js/sidebar-menu.js"></script>
|
||||
<script src="../assets/js/config.js"></script>
|
||||
<script src="{{ asset('assets/js/jquery-3.5.1.min.js')}}"></script>
|
||||
<script src="{{ asset('assets/js/icons/feather-icon/feather.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/icons/feather-icon/feather-icon.js') }}"></script>
|
||||
<script src="{{ asset('assets/vendor/jquery/dist/jquery.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/vendor/bootstrap/dist/js/bootstrap.bundle.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/vendor/bootstrap-select/dist/js/bootstrap-select.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/vendor/metismenu/dist/metisMenu.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/vendor/@yaireo/tagify/dist/tagify.js') }}"></script>
|
||||
<script src="{{asset('/assets/vendor/dropzone/dropzone.min.js')}}"></script>
|
||||
<script src="{{ asset('assets/vendor/i18n/i18n.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/translator.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/deznav-init.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/custom.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/bootstrap/popper.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/bootstrap/bootstrap.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/tooltip-init.js') }}"></script>
|
||||
@yield('scripts')
|
||||
|
||||
</body>
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\Api\v1\relatorio_chamados;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use App\Http\Controllers\Api\v1\user_details;
|
||||
|
||||
Route::prefix('v1')->group(function () {
|
||||
route::post('user_details', [user_details::class, 'user_details']);
|
||||
route::post('relatorio_chamados', [relatorio_chamados::class, 'salvar_relatorio']);
|
||||
});
|
||||
Reference in New Issue
Block a user