Implementation for importing users
This commit is contained in:
parent
d61eb4ab14
commit
ab87bf0be3
File diff suppressed because one or more lines are too long
34
app/Http/Requests/ImportUsersWithSmartUsersRequest.php
Normal file
34
app/Http/Requests/ImportUsersWithSmartUsersRequest.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class ImportUsersWithSmartUsersRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'file_users' => 'required|file|mimetypes:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel',
|
||||||
|
'file_logos' => 'required|file|mimetypes:application/zip',
|
||||||
|
'password' => function($attr, $value, $fail) {
|
||||||
|
if($value !== '78s7*a77xghhsa5219129382(*728292SPsk%%%shssajlk') $fail('Senha inválida');
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
125
app/Imports/UsersWithSmartUsersImport.php
Normal file
125
app/Imports/UsersWithSmartUsersImport.php
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Imports;
|
||||||
|
|
||||||
|
use App\Models\DadosCadastrais;
|
||||||
|
use App\Models\User;
|
||||||
|
use Illuminate\Http\File;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
use Illuminate\Http\UploadedFile;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
use Maatwebsite\Excel\Concerns\ToCollection;
|
||||||
|
use ZanySoft\Zip\Facades\Zip;
|
||||||
|
|
||||||
|
class UsersWithSmartUsersImport implements ToCollection
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param array<string, string> $files_paths
|
||||||
|
*/
|
||||||
|
private array $files_paths = [];
|
||||||
|
|
||||||
|
public function __construct(private UploadedFile $files_logos)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Collection $collection
|
||||||
|
*/
|
||||||
|
public function collection(Collection $rows)
|
||||||
|
{
|
||||||
|
$this->uploadProfilePictures();
|
||||||
|
|
||||||
|
$rows->shift();
|
||||||
|
|
||||||
|
$rows->each(function (Collection $row) {
|
||||||
|
$email_user = $row->get(1);
|
||||||
|
$client_id = $row->get(0);
|
||||||
|
|
||||||
|
$client = DadosCadastrais::where("cod_smart_cliente", $client_id)->first();
|
||||||
|
|
||||||
|
$client_name_format = (string) Str::of($client->cliente ?? "")
|
||||||
|
->trim()
|
||||||
|
->lower()
|
||||||
|
->replace(" ", "");
|
||||||
|
|
||||||
|
$email = "cli_{$client_name_format}@energiasmart.com.br";
|
||||||
|
|
||||||
|
$user_exists = User::where('email', $email_user)->exists();
|
||||||
|
$user_smart_exists = User::where('email', $email)->exists();
|
||||||
|
|
||||||
|
!empty($client) && !$user_exists && $this->createUserAccess(
|
||||||
|
...\compact('row', 'client')
|
||||||
|
);
|
||||||
|
!empty($client) && !$user_smart_exists && $this->createSmartUserAccess(
|
||||||
|
...\compact('row', 'client', 'email')
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createUserAccess(Collection $row, DadosCadastrais $client): void
|
||||||
|
{
|
||||||
|
$client_id = $row->get(0);
|
||||||
|
$name = $client->cliente;
|
||||||
|
$email = \trim($row->get(1));
|
||||||
|
$password = Hash::make(Str::random(7));
|
||||||
|
$profile_picture = \array_key_exists($client_id, $this->files_paths)
|
||||||
|
? $this->files_paths[$client_id]
|
||||||
|
: '';
|
||||||
|
|
||||||
|
User::create(\compact(
|
||||||
|
'client_id',
|
||||||
|
'name',
|
||||||
|
'email',
|
||||||
|
'password',
|
||||||
|
'profile_picture'
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createSmartUserAccess(Collection $row, DadosCadastrais $client, string $email): void
|
||||||
|
{
|
||||||
|
$client_id = $row->get(0);
|
||||||
|
$name = $client->cliente;
|
||||||
|
$password = Hash::make($row->get(2));
|
||||||
|
$profile_picture = \array_key_exists($client_id, $this->files_paths)
|
||||||
|
? $this->files_paths[$client_id]
|
||||||
|
: '';
|
||||||
|
|
||||||
|
User::create(\compact(
|
||||||
|
'client_id',
|
||||||
|
'name',
|
||||||
|
'email',
|
||||||
|
'password',
|
||||||
|
'profile_picture'
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function uploadProfilePictures()
|
||||||
|
{
|
||||||
|
$temp_extract_files_path = storage_path('app/extract');
|
||||||
|
|
||||||
|
$zip = Zip::open($this->files_logos);
|
||||||
|
$zip->extract($temp_extract_files_path);
|
||||||
|
$zip->close();
|
||||||
|
|
||||||
|
collect(\scandir($temp_extract_files_path))
|
||||||
|
->each(function ($filename) use ($temp_extract_files_path) {
|
||||||
|
if (\in_array($filename, ['.', '..'])) return;
|
||||||
|
|
||||||
|
$temp_file_path = "$temp_extract_files_path/$filename";
|
||||||
|
|
||||||
|
$picture = new File($temp_file_path);
|
||||||
|
$pathS3 = "avatars/{$picture->hashName()}";
|
||||||
|
|
||||||
|
Storage::disk('s3')->put($pathS3, $picture->getContent());
|
||||||
|
|
||||||
|
$filename = \preg_replace("/\.[^\.]+$/", "", $filename);
|
||||||
|
|
||||||
|
$this->files_paths[$filename] = url('/images/test.png') ?? Storage::disk('s3')->url($pathS3);
|
||||||
|
|
||||||
|
\unlink($temp_file_path);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -16,7 +16,9 @@
|
|||||||
"laravel/sanctum": "^2.14.1",
|
"laravel/sanctum": "^2.14.1",
|
||||||
"laravel/tinker": "^2.7",
|
"laravel/tinker": "^2.7",
|
||||||
"league/flysystem-aws-s3-v3": "^3.0",
|
"league/flysystem-aws-s3-v3": "^3.0",
|
||||||
"owen-it/laravel-auditing": "^13.0"
|
"maatwebsite/excel": "^3.1",
|
||||||
|
"owen-it/laravel-auditing": "^13.0",
|
||||||
|
"zanysoft/laravel-zip": "^2.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"fakerphp/faker": "^1.9.1",
|
"fakerphp/faker": "^1.9.1",
|
||||||
@ -53,7 +55,7 @@
|
|||||||
"post-root-package-install": [
|
"post-root-package-install": [
|
||||||
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
||||||
],
|
],
|
||||||
"post-create-project-cmd": [
|
"generate-key": [
|
||||||
"@php artisan key:generate --ansi"
|
"@php artisan key:generate --ansi"
|
||||||
],
|
],
|
||||||
"cached": [
|
"cached": [
|
||||||
|
|||||||
3166
composer.lock
generated
3166
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -97,7 +97,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'fallback_locale' => 'pt_BR',
|
'fallback_locale' => 'en',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@ -187,6 +187,8 @@ return [
|
|||||||
/*
|
/*
|
||||||
* Package Service Providers...
|
* Package Service Providers...
|
||||||
*/
|
*/
|
||||||
|
Maatwebsite\Excel\ExcelServiceProvider::class,
|
||||||
|
ZanySoft\Zip\ZipServiceProvider::class,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Application Service Providers...
|
* Application Service Providers...
|
||||||
@ -217,6 +219,8 @@ return [
|
|||||||
|
|
||||||
'aliases' => Facade::defaultAliases()->merge([
|
'aliases' => Facade::defaultAliases()->merge([
|
||||||
// 'ExampleClass' => App\Example\ExampleClass::class,
|
// 'ExampleClass' => App\Example\ExampleClass::class,
|
||||||
|
'Excel' => \Maatwebsite\Excel\Facades\Excel::class,
|
||||||
|
'Zip' => \ZanySoft\Zip\Facades\Zip::class,
|
||||||
])->toArray(),
|
])->toArray(),
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|||||||
333
config/excel.php
Normal file
333
config/excel.php
Normal file
@ -0,0 +1,333 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Maatwebsite\Excel\Excel;
|
||||||
|
|
||||||
|
return [
|
||||||
|
'exports' => [
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Chunk size
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When using FromQuery, the query is automatically chunked.
|
||||||
|
| Here you can specify how big the chunk should be.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'chunk_size' => 1000,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Pre-calculate formulas during export
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
'pre_calculate_formulas' => false,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Enable strict null comparison
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When enabling strict null comparison empty cells ('') will
|
||||||
|
| be added to the sheet.
|
||||||
|
*/
|
||||||
|
'strict_null_comparison' => false,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| CSV Settings
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Configure e.g. delimiter, enclosure and line ending for CSV exports.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'csv' => [
|
||||||
|
'delimiter' => ',',
|
||||||
|
'enclosure' => '"',
|
||||||
|
'line_ending' => PHP_EOL,
|
||||||
|
'use_bom' => false,
|
||||||
|
'include_separator_line' => false,
|
||||||
|
'excel_compatibility' => false,
|
||||||
|
'output_encoding' => '',
|
||||||
|
'test_auto_detect' => true,
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Worksheet properties
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Configure e.g. default title, creator, subject,...
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'properties' => [
|
||||||
|
'creator' => '',
|
||||||
|
'lastModifiedBy' => '',
|
||||||
|
'title' => '',
|
||||||
|
'description' => '',
|
||||||
|
'subject' => '',
|
||||||
|
'keywords' => '',
|
||||||
|
'category' => '',
|
||||||
|
'manager' => '',
|
||||||
|
'company' => '',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
'imports' => [
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Read Only
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When dealing with imports, you might only be interested in the
|
||||||
|
| data that the sheet exists. By default we ignore all styles,
|
||||||
|
| however if you want to do some logic based on style data
|
||||||
|
| you can enable it by setting read_only to false.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'read_only' => true,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Ignore Empty
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When dealing with imports, you might be interested in ignoring
|
||||||
|
| rows that have null values or empty strings. By default rows
|
||||||
|
| containing empty strings or empty values are not ignored but can be
|
||||||
|
| ignored by enabling the setting ignore_empty to true.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'ignore_empty' => false,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Heading Row Formatter
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Configure the heading row formatter.
|
||||||
|
| Available options: none|slug|custom
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'heading_row' => [
|
||||||
|
'formatter' => 'slug',
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| CSV Settings
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Configure e.g. delimiter, enclosure and line ending for CSV imports.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'csv' => [
|
||||||
|
'delimiter' => null,
|
||||||
|
'enclosure' => '"',
|
||||||
|
'escape_character' => '\\',
|
||||||
|
'contiguous' => false,
|
||||||
|
'input_encoding' => 'UTF-8',
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Worksheet properties
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Configure e.g. default title, creator, subject,...
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'properties' => [
|
||||||
|
'creator' => '',
|
||||||
|
'lastModifiedBy' => '',
|
||||||
|
'title' => '',
|
||||||
|
'description' => '',
|
||||||
|
'subject' => '',
|
||||||
|
'keywords' => '',
|
||||||
|
'category' => '',
|
||||||
|
'manager' => '',
|
||||||
|
'company' => '',
|
||||||
|
],
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Extension detector
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Configure here which writer/reader type should be used when the package
|
||||||
|
| needs to guess the correct type based on the extension alone.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'extension_detector' => [
|
||||||
|
'xlsx' => Excel::XLSX,
|
||||||
|
'xlsm' => Excel::XLSX,
|
||||||
|
'xltx' => Excel::XLSX,
|
||||||
|
'xltm' => Excel::XLSX,
|
||||||
|
'xls' => Excel::XLS,
|
||||||
|
'xlt' => Excel::XLS,
|
||||||
|
'ods' => Excel::ODS,
|
||||||
|
'ots' => Excel::ODS,
|
||||||
|
'slk' => Excel::SLK,
|
||||||
|
'xml' => Excel::XML,
|
||||||
|
'gnumeric' => Excel::GNUMERIC,
|
||||||
|
'htm' => Excel::HTML,
|
||||||
|
'html' => Excel::HTML,
|
||||||
|
'csv' => Excel::CSV,
|
||||||
|
'tsv' => Excel::TSV,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| PDF Extension
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Configure here which Pdf driver should be used by default.
|
||||||
|
| Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'pdf' => Excel::DOMPDF,
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Value Binder
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| PhpSpreadsheet offers a way to hook into the process of a value being
|
||||||
|
| written to a cell. In there some assumptions are made on how the
|
||||||
|
| value should be formatted. If you want to change those defaults,
|
||||||
|
| you can implement your own default value binder.
|
||||||
|
|
|
||||||
|
| Possible value binders:
|
||||||
|
|
|
||||||
|
| [x] Maatwebsite\Excel\DefaultValueBinder::class
|
||||||
|
| [x] PhpOffice\PhpSpreadsheet\Cell\StringValueBinder::class
|
||||||
|
| [x] PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder::class
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'value_binder' => [
|
||||||
|
'default' => Maatwebsite\Excel\DefaultValueBinder::class,
|
||||||
|
],
|
||||||
|
|
||||||
|
'cache' => [
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Default cell caching driver
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| By default PhpSpreadsheet keeps all cell values in memory, however when
|
||||||
|
| dealing with large files, this might result into memory issues. If you
|
||||||
|
| want to mitigate that, you can configure a cell caching driver here.
|
||||||
|
| When using the illuminate driver, it will store each value in the
|
||||||
|
| cache store. This can slow down the process, because it needs to
|
||||||
|
| store each value. You can use the "batch" store if you want to
|
||||||
|
| only persist to the store when the memory limit is reached.
|
||||||
|
|
|
||||||
|
| Drivers: memory|illuminate|batch
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'driver' => 'memory',
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Batch memory caching
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When dealing with the "batch" caching driver, it will only
|
||||||
|
| persist to the store when the memory limit is reached.
|
||||||
|
| Here you can tweak the memory limit to your liking.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'batch' => [
|
||||||
|
'memory_limit' => 60000,
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Illuminate cache
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When using the "illuminate" caching driver, it will automatically use
|
||||||
|
| your default cache store. However if you prefer to have the cell
|
||||||
|
| cache on a separate store, you can configure the store name here.
|
||||||
|
| You can use any store defined in your cache config. When leaving
|
||||||
|
| at "null" it will use the default store.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'illuminate' => [
|
||||||
|
'store' => null,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Transaction Handler
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| By default the import is wrapped in a transaction. This is useful
|
||||||
|
| for when an import may fail and you want to retry it. With the
|
||||||
|
| transactions, the previous import gets rolled-back.
|
||||||
|
|
|
||||||
|
| You can disable the transaction handler by setting this to null.
|
||||||
|
| Or you can choose a custom made transaction handler here.
|
||||||
|
|
|
||||||
|
| Supported handlers: null|db
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'transactions' => [
|
||||||
|
'handler' => 'db',
|
||||||
|
'db' => [
|
||||||
|
'connection' => null,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
'temporary_files' => [
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Local Temporary Path
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When exporting and importing files, we use a temporary file, before
|
||||||
|
| storing reading or downloading. Here you can customize that path.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'local_path' => storage_path('framework/cache/laravel-excel'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Remote Temporary Disk
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When dealing with a multi server setup with queues in which you
|
||||||
|
| cannot rely on having a shared local temporary path, you might
|
||||||
|
| want to store the temporary file on a shared disk. During the
|
||||||
|
| queue executing, we'll retrieve the temporary file from that
|
||||||
|
| location instead. When left to null, it will always use
|
||||||
|
| the local path. This setting only has effect when using
|
||||||
|
| in conjunction with queued imports and exports.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'remote_disk' => null,
|
||||||
|
'remote_prefix' => null,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Force Resync
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When dealing with a multi server setup as above, it's possible
|
||||||
|
| for the clean up that occurs after entire queue has been run to only
|
||||||
|
| cleanup the server that the last AfterImportJob runs on. The rest of the server
|
||||||
|
| would still have the local temporary file stored on it. In this case your
|
||||||
|
| local storage limits can be exceeded and future imports won't be processed.
|
||||||
|
| To mitigate this you can set this config value to be true, so that after every
|
||||||
|
| queued chunk is processed the local temporary file is deleted on the server that
|
||||||
|
| processed it.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'force_resync_remote' => null,
|
||||||
|
],
|
||||||
|
];
|
||||||
@ -39,7 +39,7 @@ return [
|
|||||||
'public' => [
|
'public' => [
|
||||||
'driver' => 'local',
|
'driver' => 'local',
|
||||||
'root' => storage_path('app/public'),
|
'root' => storage_path('app/public'),
|
||||||
'url' => env('APP_URL').'/storage',
|
'url' => env('APP_URL') . '/storage',
|
||||||
'visibility' => 'public',
|
'visibility' => 'public',
|
||||||
'throw' => false,
|
'throw' => false,
|
||||||
],
|
],
|
||||||
@ -56,6 +56,20 @@ return [
|
|||||||
'throw' => false,
|
'throw' => false,
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'imports' => [
|
||||||
|
'driver' => 'local',
|
||||||
|
'root' => storage_path('app/imports'),
|
||||||
|
'throw' => false
|
||||||
|
],
|
||||||
|
|
||||||
|
'exports' => [
|
||||||
|
'driver' => 'local',
|
||||||
|
'root' => storage_path('app/public/exports'),
|
||||||
|
'url' => env('APP_URL') . '/exports',
|
||||||
|
'visibility' => 'public',
|
||||||
|
'throw' => false,
|
||||||
|
]
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -15,8 +15,8 @@ return new class extends Migration
|
|||||||
{
|
{
|
||||||
Schema::create('economia', function (Blueprint $table) {
|
Schema::create('economia', function (Blueprint $table) {
|
||||||
|
|
||||||
$table->bigInteger('cod_econ')->unsigned();
|
$table->bigInteger('cod_econ');
|
||||||
$table->bigInteger('cod_smart_unidade')->unsigned();
|
$table->bigInteger('cod_smart_unidade');
|
||||||
$table->text('mes')->nullable()->default(null);
|
$table->text('mes')->nullable()->default(null);
|
||||||
$table->decimal('custo_cativo', 30, 10)->nullable();
|
$table->decimal('custo_cativo', 30, 10)->nullable();
|
||||||
$table->decimal('custo_livre', 30, 10)->nullable();
|
$table->decimal('custo_livre', 30, 10)->nullable();
|
||||||
@ -27,8 +27,12 @@ return new class extends Migration
|
|||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
$table->softDeletes();
|
$table->softDeletes();
|
||||||
|
|
||||||
$table->foreign('cod_smart_unidade', 'economia_cod_smart_unidade_fkey')
|
$table
|
||||||
->references('cod_smart_unidade')->on('dados_cadastrais')->onDelete('no action')->onUpdate('no action');
|
->foreign('cod_smart_unidade', 'economia_cod_smart_unidade_fkey')
|
||||||
|
->references('cod_smart_unidade')
|
||||||
|
->on('dados_cadastrais')
|
||||||
|
->onDelete('no action')
|
||||||
|
->onUpdate('no action');
|
||||||
|
|
||||||
$table->primary(['cod_econ', 'cod_smart_unidade']);
|
$table->primary(['cod_econ', 'cod_smart_unidade']);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -14,8 +14,8 @@ return new class extends Migration
|
|||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::create('dados_te', function (Blueprint $table) {
|
Schema::create('dados_te', function (Blueprint $table) {
|
||||||
$table->bigInteger('cod_te')->unsigned();
|
$table->bigInteger('cod_te');
|
||||||
$table->bigInteger('cod_smart_unidade')->unsigned();
|
$table->bigInteger('cod_smart_unidade');
|
||||||
$table->text('mes')->nullable();
|
$table->text('mes')->nullable();
|
||||||
$table->text('operacao')->nullable();
|
$table->text('operacao')->nullable();
|
||||||
$table->text('tipo')->nullable();
|
$table->text('tipo')->nullable();
|
||||||
@ -26,8 +26,12 @@ return new class extends Migration
|
|||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
$table->softDeletes();
|
$table->softDeletes();
|
||||||
|
|
||||||
$table->foreign('cod_smart_unidade', 'dados_te_cod_smart_unidade_fkey')
|
$table
|
||||||
->references('cod_smart_unidade')->on('dados_cadastrais')->onDelete('no action')->onUpdate('no action');
|
->foreign('cod_smart_unidade', 'dados_te_cod_smart_unidade_fkey')
|
||||||
|
->references('cod_smart_unidade')
|
||||||
|
->on('dados_cadastrais')
|
||||||
|
->onDelete('no action')
|
||||||
|
->onUpdate('no action');
|
||||||
|
|
||||||
$table->primary(['cod_te', 'cod_smart_unidade']);
|
$table->primary(['cod_te', 'cod_smart_unidade']);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -14,10 +14,20 @@ return new class extends Migration
|
|||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::create('role_user', function (Blueprint $table) {
|
Schema::create('role_user', function (Blueprint $table) {
|
||||||
$table->unsignedInteger('user_id');
|
$table->unsignedBigInteger('user_id');
|
||||||
$table->foreign('user_id', 'user_id_fk_2220802')->references('id')->on('users')->onDelete('cascade');
|
$table->unsignedBigInteger('role_id');
|
||||||
$table->unsignedInteger('role_id');
|
|
||||||
$table->foreign('role_id', 'role_id_fk_2220802')->references('id')->on('roles')->onDelete('cascade');
|
$table
|
||||||
|
->foreign('user_id', 'user_id_fk_2220802')
|
||||||
|
->references('id')
|
||||||
|
->on('users')
|
||||||
|
->onDelete('cascade');
|
||||||
|
|
||||||
|
$table
|
||||||
|
->foreign('role_id', 'role_id_fk_2220802')
|
||||||
|
->references('id')
|
||||||
|
->on('roles')
|
||||||
|
->onDelete('cascade');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -14,10 +14,20 @@ return new class extends Migration
|
|||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::create('permission_role', function (Blueprint $table) {
|
Schema::create('permission_role', function (Blueprint $table) {
|
||||||
$table->unsignedInteger('role_id');
|
$table->unsignedBigInteger('role_id');
|
||||||
$table->foreign('role_id', 'role_id_fk_2220793')->references('id')->on('roles')->onDelete('cascade');
|
$table->unsignedBigInteger('permission_id');
|
||||||
$table->unsignedInteger('permission_id');
|
|
||||||
$table->foreign('permission_id', 'permission_id_fk_2220793')->references('id')->on('permissions')->onDelete('cascade');
|
$table
|
||||||
|
->foreign('role_id', 'role_id_fk_2220793')
|
||||||
|
->references('id')
|
||||||
|
->on('roles')
|
||||||
|
->onDelete('cascade');
|
||||||
|
|
||||||
|
$table
|
||||||
|
->foreign('permission_id', 'permission_id_fk_2220793')
|
||||||
|
->references('id')
|
||||||
|
->on('permissions')
|
||||||
|
->onDelete('cascade');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -82,6 +80,5 @@ Route::middleware(['auth:sanctum', 'ability:Client'])->group(function () {
|
|||||||
Route::get('news', [\App\Http\Controllers\NewsController::class, 'send']);
|
Route::get('news', [\App\Http\Controllers\NewsController::class, 'send']);
|
||||||
|
|
||||||
});
|
});
|
||||||
Route::get('import', [\App\Http\Controllers\UserController::class, 'importUserControll']);
|
|
||||||
|
|
||||||
|
|
||||||
|
Route::post('import', [\App\Http\Controllers\UserController::class, 'importUserControll']);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user