new commit

This commit is contained in:
Fiqh Pratama
2025-10-12 18:29:07 +07:00
parent aa3a1807aa
commit 9952968d82
26 changed files with 404 additions and 173 deletions
+1 -1
View File
@@ -25,7 +25,7 @@ LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=db.upsense.co.id
DB_HOST=mysql.upsense.co.id
DB_PORT=3306
DB_DATABASE=xpendify
DB_USERNAME=root
@@ -17,6 +17,7 @@ use App\Models\Cabang;
use App\Models\Region;
use App\Helpers\FormHelper;
use App\Helpers\BudgetHelper;
use App\Models\Admin;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Schema;
use App\Models\Kategori;
@@ -591,10 +592,51 @@ class ReportController extends Controller
// Get the forms after all filters have been applied
// Sort by 'tanggal' if it exists, otherwise by 'created_at'
$forms = $formsQuery->orderBy(
Schema::hasColumn('form_others', 'tanggal') ? 'tanggal' : 'created_at',
'desc'
)->get();
$tables = [
'form_others',
'form_up_country',
'form_vehicle_running_cost',
'form_meeting_seminar',
'form_entertainment_presentation'
];
$formsQuery = null;
foreach ($tables as $table) {
$query = DB::table($table)
->selectRaw("
expense_number,
'$table' as type,
user_id,
total,
approved_total,
account_number,
status,
created_at
");
$formsQuery = $formsQuery
? $formsQuery->unionAll($query)
: $query;
}
$forms = DB::query()
->fromSub($formsQuery, 'forms')
->join('admins', 'admins.id', '=', 'forms.user_id')
->select('forms.*', 'admins.id as admin_id')
->orderBy('forms.created_at', 'desc')
->paginate(100);
// inject relasi Admin model ke setiap item
$forms->getCollection()->transform(function ($item) {
$item->user = \App\Models\Admin::with(['region', 'rayon.region'])->find($item->admin_id);
$item->type = ucwords(str_replace('_', ' ', str_replace('form_', '', $item->type)));
return $item;
});
return view('backend.pages.report.all', [
@@ -29,6 +29,7 @@ use App\Helpers\NotificationHelper;
use Illuminate\Support\Facades\Log;
use App\Services\BrevoService;
use Carbon\Carbon;
use Illuminate\Container\Attributes\Auth;
class FormUpCountryController extends Controller
{
@@ -372,6 +373,18 @@ class FormUpCountryController extends Controller
$role = auth()->user()->getRoleNames()[0];
$cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang;
$regionId = Cabang::where('id', 1)->value('region_id');
$rayonData = Rayon::where('cabang_id', $cabang->id)->get();
if ($role = "Admin Region" || "Marketing Information System" || "Superadmin") {
$rayonData = DB::table('rayon')
->join('cabang', 'rayon.cabang_id', '=', 'cabang.id')
->join('region', 'cabang.region_id', '=', 'region.id')
->where('region.id', $regionId)
->select('rayon.*')
->get();
}
$form = FormUpCountry::with('rayon')->findOrfail($id);
if (($form->status != 'On Progress' && $form->status != 'Rejected') && $role == 'Medical Representatif') {
@@ -380,7 +393,7 @@ class FormUpCountryController extends Controller
}
return view('backend.pages.forms.upcountry.edit', [
'rayons' => Rayon::where('cabang_id', $cabang->id)->get(),
'rayons' => $rayonData,
'form' => $form
]);
}
+5
View File
@@ -168,6 +168,11 @@ class Admin extends Authenticatable
return $this->belongsTo(Rayon::class, 'rayon_id');
}
public function rayon()
{
return $this->belongsTo(Rayon::class, 'rayon_id');
}
public function getRegion()
{
return $this->belongsTo(Region::class, 'region_id');
+5
View File
@@ -16,4 +16,9 @@ class Rayon extends Model
{
return $this->belongsTo('App\Models\Cabang');
}
public function region()
{
return $this->belongsTo(\App\Models\Region::class, 'region_id', 'id');
}
}
-1
View File
@@ -26,7 +26,6 @@
"yajra/laravel-datatables-oracle": "11.0"
},
"require-dev": {
"barryvdh/laravel-debugbar": "^3.14",
"fakerphp/faker": "^1.23",
"laravel/pail": "^1.1",
"laravel/pint": "^1.13",
Generated
+1 -153
View File
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "2576aa0bcffcd93e0f78de10eefa63c1",
"content-hash": "1ad355916564d86a9848db17b8afa298",
"packages": [
{
"name": "barryvdh/laravel-dompdf",
@@ -8305,90 +8305,6 @@
}
],
"packages-dev": [
{
"name": "barryvdh/laravel-debugbar",
"version": "v3.14.10",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-debugbar.git",
"reference": "56b9bd235e3fe62e250124804009ce5bab97cc63"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/56b9bd235e3fe62e250124804009ce5bab97cc63",
"reference": "56b9bd235e3fe62e250124804009ce5bab97cc63",
"shasum": ""
},
"require": {
"illuminate/routing": "^9|^10|^11",
"illuminate/session": "^9|^10|^11",
"illuminate/support": "^9|^10|^11",
"maximebf/debugbar": "~1.23.0",
"php": "^8.0",
"symfony/finder": "^6|^7"
},
"require-dev": {
"mockery/mockery": "^1.3.3",
"orchestra/testbench-dusk": "^5|^6|^7|^8|^9",
"phpunit/phpunit": "^9.6|^10.5",
"squizlabs/php_codesniffer": "^3.5"
},
"type": "library",
"extra": {
"laravel": {
"aliases": {
"Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar"
},
"providers": [
"Barryvdh\\Debugbar\\ServiceProvider"
]
},
"branch-alias": {
"dev-master": "3.14-dev"
}
},
"autoload": {
"files": [
"src/helpers.php"
],
"psr-4": {
"Barryvdh\\Debugbar\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Barry vd. Heuvel",
"email": "barryvdh@gmail.com"
}
],
"description": "PHP Debugbar integration for Laravel",
"keywords": [
"debug",
"debugbar",
"laravel",
"profiler",
"webprofiler"
],
"support": {
"issues": "https://github.com/barryvdh/laravel-debugbar/issues",
"source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.14.10"
},
"funding": [
{
"url": "https://fruitcake.nl",
"type": "custom"
},
{
"url": "https://github.com/barryvdh",
"type": "github"
}
],
"time": "2024-12-23T10:10:42+00:00"
},
{
"name": "fakerphp/faker",
"version": "v1.24.1",
@@ -8781,74 +8697,6 @@
},
"time": "2024-11-27T15:42:28+00:00"
},
{
"name": "maximebf/debugbar",
"version": "v1.23.5",
"source": {
"type": "git",
"url": "https://github.com/php-debugbar/php-debugbar.git",
"reference": "eeabd61a1f19ba5dcd5ac4585a477130ee03ce25"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/eeabd61a1f19ba5dcd5ac4585a477130ee03ce25",
"reference": "eeabd61a1f19ba5dcd5ac4585a477130ee03ce25",
"shasum": ""
},
"require": {
"php": "^7.2|^8",
"psr/log": "^1|^2|^3",
"symfony/var-dumper": "^4|^5|^6|^7"
},
"require-dev": {
"dbrekelmans/bdi": "^1",
"phpunit/phpunit": "^8|^9",
"symfony/panther": "^1|^2.1",
"twig/twig": "^1.38|^2.7|^3.0"
},
"suggest": {
"kriswallsmith/assetic": "The best way to manage assets",
"monolog/monolog": "Log using Monolog",
"predis/predis": "Redis storage"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.23-dev"
}
},
"autoload": {
"psr-4": {
"DebugBar\\": "src/DebugBar/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Maxime Bouroumeau-Fuseau",
"email": "maxime.bouroumeau@gmail.com",
"homepage": "http://maximebf.com"
},
{
"name": "Barry vd. Heuvel",
"email": "barryvdh@gmail.com"
}
],
"description": "Debug bar in the browser for php application",
"homepage": "https://github.com/maximebf/php-debugbar",
"keywords": [
"debug",
"debugbar"
],
"support": {
"issues": "https://github.com/php-debugbar/php-debugbar/issues",
"source": "https://github.com/php-debugbar/php-debugbar/tree/v1.23.5"
},
"time": "2024-12-15T19:20:42+00:00"
},
{
"name": "mockery/mockery",
"version": "1.6.12",
+224
View File
@@ -0,0 +1,224 @@
<?php
use Laravel\Octane\Contracts\OperationTerminated;
use Laravel\Octane\Events\RequestHandled;
use Laravel\Octane\Events\RequestReceived;
use Laravel\Octane\Events\RequestTerminated;
use Laravel\Octane\Events\TaskReceived;
use Laravel\Octane\Events\TaskTerminated;
use Laravel\Octane\Events\TickReceived;
use Laravel\Octane\Events\TickTerminated;
use Laravel\Octane\Events\WorkerErrorOccurred;
use Laravel\Octane\Events\WorkerStarting;
use Laravel\Octane\Events\WorkerStopping;
use Laravel\Octane\Listeners\CloseMonologHandlers;
use Laravel\Octane\Listeners\CollectGarbage;
use Laravel\Octane\Listeners\DisconnectFromDatabases;
use Laravel\Octane\Listeners\EnsureUploadedFilesAreValid;
use Laravel\Octane\Listeners\EnsureUploadedFilesCanBeMoved;
use Laravel\Octane\Listeners\FlushOnce;
use Laravel\Octane\Listeners\FlushTemporaryContainerInstances;
use Laravel\Octane\Listeners\FlushUploadedFiles;
use Laravel\Octane\Listeners\ReportException;
use Laravel\Octane\Listeners\StopWorkerIfNecessary;
use Laravel\Octane\Octane;
return [
/*
|--------------------------------------------------------------------------
| Octane Server
|--------------------------------------------------------------------------
|
| This value determines the default "server" that will be used by Octane
| when starting, restarting, or stopping your server via the CLI. You
| are free to change this to the supported server of your choosing.
|
| Supported: "roadrunner", "swoole", "frankenphp"
|
*/
'server' => env('OCTANE_SERVER', 'roadrunner'),
/*
|--------------------------------------------------------------------------
| Force HTTPS
|--------------------------------------------------------------------------
|
| When this configuration value is set to "true", Octane will inform the
| framework that all absolute links must be generated using the HTTPS
| protocol. Otherwise your links may be generated using plain HTTP.
|
*/
'https' => env('OCTANE_HTTPS', false),
/*
|--------------------------------------------------------------------------
| Octane Listeners
|--------------------------------------------------------------------------
|
| All of the event listeners for Octane's events are defined below. These
| listeners are responsible for resetting your application's state for
| the next request. You may even add your own listeners to the list.
|
*/
'listeners' => [
WorkerStarting::class => [
EnsureUploadedFilesAreValid::class,
EnsureUploadedFilesCanBeMoved::class,
],
RequestReceived::class => [
...Octane::prepareApplicationForNextOperation(),
...Octane::prepareApplicationForNextRequest(),
//
],
RequestHandled::class => [
//
],
RequestTerminated::class => [
// FlushUploadedFiles::class,
],
TaskReceived::class => [
...Octane::prepareApplicationForNextOperation(),
//
],
TaskTerminated::class => [
//
],
TickReceived::class => [
...Octane::prepareApplicationForNextOperation(),
//
],
TickTerminated::class => [
//
],
OperationTerminated::class => [
FlushOnce::class,
FlushTemporaryContainerInstances::class,
// DisconnectFromDatabases::class,
// CollectGarbage::class,
],
WorkerErrorOccurred::class => [
ReportException::class,
StopWorkerIfNecessary::class,
],
WorkerStopping::class => [
CloseMonologHandlers::class,
],
],
/*
|--------------------------------------------------------------------------
| Warm / Flush Bindings
|--------------------------------------------------------------------------
|
| The bindings listed below will either be pre-warmed when a worker boots
| or they will be flushed before every new request. Flushing a binding
| will force the container to resolve that binding again when asked.
|
*/
'warm' => [
...Octane::defaultServicesToWarm(),
],
'flush' => [
//
],
/*
|--------------------------------------------------------------------------
| Octane Swoole Tables
|--------------------------------------------------------------------------
|
| While using Swoole, you may define additional tables as required by the
| application. These tables can be used to store data that needs to be
| quickly accessed by other workers on the particular Swoole server.
|
*/
'tables' => [
'example:1000' => [
'name' => 'string:1000',
'votes' => 'int',
],
],
/*
|--------------------------------------------------------------------------
| Octane Swoole Cache Table
|--------------------------------------------------------------------------
|
| While using Swoole, you may leverage the Octane cache, which is powered
| by a Swoole table. You may set the maximum number of rows as well as
| the number of bytes per row using the configuration options below.
|
*/
'cache' => [
'rows' => 1000,
'bytes' => 10000,
],
/*
|--------------------------------------------------------------------------
| File Watching
|--------------------------------------------------------------------------
|
| The following list of files and directories will be watched when using
| the --watch option offered by Octane. If any of the directories and
| files are changed, Octane will automatically reload your workers.
|
*/
'watch' => [
'app',
'bootstrap',
'config/**/*.php',
'database/**/*.php',
'public/**/*.php',
'resources/**/*.php',
'routes',
'composer.lock',
'.env',
],
/*
|--------------------------------------------------------------------------
| Garbage Collection Threshold
|--------------------------------------------------------------------------
|
| When executing long-lived PHP scripts such as Octane, memory can build
| up before being cleared by PHP. You can force Octane to run garbage
| collection if your application consumes this amount of megabytes.
|
*/
'garbage' => 50,
/*
|--------------------------------------------------------------------------
| Maximum Execution Time
|--------------------------------------------------------------------------
|
| The following setting configures the maximum execution time for requests
| being handled by Octane. You may set this value to 0 to indicate that
| there isn't a specific time limit on Octane request execution time.
|
*/
'max_execution_time' => 30,
];
BIN
View File
Binary file not shown.
+4
View File
@@ -0,0 +1,4 @@
upload_max_filesize = 1024M
post_max_size = 1024M
memory_limit = 512M
max_execution_time = 300
+7
View File
@@ -0,0 +1,7 @@
<?php
// Set a default for the application base path and public path if they are missing...
$_SERVER['APP_BASE_PATH'] = $_ENV['APP_BASE_PATH'] ?? $_SERVER['APP_BASE_PATH'] ?? __DIR__.'/..';
$_SERVER['APP_PUBLIC_PATH'] = $_ENV['APP_PUBLIC_PATH'] ?? $_SERVER['APP_BASE_PATH'] ?? __DIR__;
require __DIR__.'/../vendor/laravel/octane/bin/frankenphp-worker.php';
+3
View File
@@ -0,0 +1,3 @@
<?php
phpinfo();
?>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

@@ -47,6 +47,7 @@
<th width="5%">{{ __('Sl') }}</th>
<th width="10%">{{ __('Name') }}</th>
<th width="10%">{{ __('Email') }}</th>
<th width="10%">{{ __('Phone') }}</th>
<th width="20%">{{ __('Roles') }}</th>
<th width="5%">Region</th>
<th width="5%">Cabang</th>
@@ -60,6 +61,7 @@
<td>{{ $loop->index + 1 }}</td>
<td>{{ $admin->name }}</td>
<td>{{ $admin->email }}</td>
<td>{{ $admin->phone }}</td>
<td>
@foreach ($admin->roles as $role)
<span class="badge badge-info mr-1">
@@ -56,9 +56,9 @@
</div>
<div class="mb-3">
<label class="form-label">Jenis <span class="font-italic font-weight-normal">(required)</span></label>
<select class="form-control form-control-md" name="jenis" required>
<option value="">Pilih Jenis</option>
<option value="entertainment" {{ old('jenis') == 'entertainment' ? 'selected' : '' }}>Entertainment</option>
<select class="form-control form-control-md" name="jenis" required >
<option value="">Pilih Jenis</option>
<option value="entertainment" {{ old('jenis') == 'entertainment' ? 'selected' : '' }} >Entertainment</option>
<option value="presentation" {{ old('jenis') == 'presentation' ? 'selected' : '' }}>Presentation</option>
<option value="sponsorship" {{ old('jenis') == 'sponsorship' ? 'selected' : '' }}>Sponsorship</option>
</select>
@@ -60,7 +60,7 @@
<select class="form-control form-control-md" name="jenis" required>
<option value="">Pilih Jenis</option>
<option value="entertainment" {{ $form->jenis == 'entertainment' ? 'selected' : '' }}>Entertainment</option>
<option value="presentation" {{ $form->jenis == 'presentation' ? 'selected' : '' }}>Presentation</option>
<option value="presentation" {{ $form->jenis == 'presentation' ? 'selected' : '' }}>Presentation</option>
<option value="sponsorship" {{ $form->jenis == 'sponsorship' ? 'selected' : '' }}>Sponsorship</option>
</select>
</div>
@@ -43,7 +43,7 @@
<select class="form-control form-control-md" name="jenis" disabled>
<option value="">Pilih Jenis</option>
<option value="entertainment" {{ $form->jenis == 'entertainment' ? 'selected' : '' }}>Entertainment</option>
<option value="presentation" {{ $form->jenis == 'presentation' ? 'selected' : '' }}>Presentation</option>
<option value="presentation" {{ $form->jenis == 'presentation' ? 'selected' : '' }}>Presentation</option>
<option value="sponsorship" {{ $form->jenis == 'sponsorship' ? 'selected' : '' }}>Sponsorship</option>
</select>
</div>
@@ -65,13 +65,35 @@
<label class="form-label">Tanggal <span class="font-italic font-weight-normal">(required)</span></label>
<input type="date" class="form-control" name="tanggal" id="tanggal" required value="{{ old('tanggal') }}">
</div>
<!-- Add field -->
<!-- <div class="mb-3">
<label class="form-label">Nama Penerima <span class="font-italic font-weight-normal">(required)</span></label>
<input type="text" class="form-control" name="name" required value="{{ old('name') }}">
</div>
<div class="mb-3">
<label class="form-label">NPWP / NIK <span class="font-italic font-weight-normal">(required)</span></label>
<input type="text" class="form-control" name="nik_or_npwp" id="nik_or_npwp" required value="{{ old('nik_or_npwp') }}">
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label class="form-label">Alamat <span class="font-italic font-weight-normal">(required)</span></label>
<input type="text" class="form-control" name="alamat" id="alamat" required value="{{ old('alamat') }}">
</div> -->
<div class="col-md-6">
<div class="mb-3">
<label class="form-label">Total <span class="font-italic font-weight-normal">(required)</span></label>
<input type="string" class="form-control" name="total" id="total" required value="{{ old('total') }}">
</div>
</div>
<div class="col-lg-6">
<div class="col-md-6">
<div class="mb-3">
<label class="form-label">Bukti Total <span class="font-italic font-weight-normal">(required)</span></label>
<input type="file" class="form-control" name="bukti_total" value="{{ old('bukti_total') }}" required>
@@ -81,9 +103,10 @@
<textarea class="form-control" name="keterangan" id="keterangan" required>{{ old('keterangan') }}</textarea>
</div>
</div>
<!-- </div> -->
<button type="submit" class="btn btn-primary ml-2">Submit</button>
</div>
</div>
</form>
<div id="loading-spinner-overlay" class="d-none">
@@ -112,5 +135,7 @@
spinnerOverlay.classList.remove('d-none'); // Show overlay
spinnerOverlay.classList.add('d-flex'); // Use flexbox for centering
});
</script>
@endsection
@@ -473,15 +473,18 @@
@endsection
@section('scripts')
<script>
<script>
$(document).ready(function () {
// Uncheck all checkboxes on page refresh
$('.custom-control-input').prop('checked', false);
if ($('#dataTable').length) {
$('#dataTable').DataTable({
responsive: false,
responsive: true,
dom: 'Blfrtip',
lengthMenu: [ [10, 50, 100, -1], [10, 50, 100, "All"] ], // Control the entries dropdown
buttons: [
{
@@ -507,9 +510,27 @@
},
'colvis'
]
});
}
// <script>
//$(document).ready(function () {
// Uncheck all checkboxes on page refresh
//$('.custom-control-input').prop('checked', false);
// new DataTable('#dataTable', {
// responsive: false,
// columnControl: [
// { extend: 'order' },
// [ { extend: 'colVis' },{ extend: 'search' }]
// ],
//});
// Handle Approve Button Click
$(document).on('click', '.open-approve-modal', function() {
const approveUrl = $(this).data('id');
@@ -235,6 +235,7 @@
if ($('#dataTable-table').length) {
$('#dataTable-table').DataTable({
responsive: false,
pagging: true,
dom: 'Blfrtip',
lengthMenu: [ [10, 25, 50, -1], [10, 25, 50, "All"] ], // Control the entries dropdown
buttons: [
@@ -70,6 +70,8 @@
$drFormatted = $drValue == 0 ? '' : number_format($drValue, 0, ',', ',');
$totalDr += $drValue;
@endphp
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $item->name }}</td>
@@ -77,9 +79,28 @@
<td>{{ $drFormatted }}</td>
<td></td>
</tr>
@endforeach
<!-- cash in advance -->
<tr>
<td>{{ $kategori->count() + 1 }}</td>
<td>Cash in Balance</td>
<td>170 600 00</td>
<td>@php
$crValue = $budget && $budget->amount != 0 ? $budget->amount : 0;
$crValue -= $totalDr ;
echo $crValue == 0 ? '' : number_format($crValue, 0, ',', ',');
@endphp</td>
<td>
</td>
</tr>
<!-- petty cash -->
<tr>
<td>{{ $kategori->count() + 1 }}</td>
<td>Petty Cash</td>
@@ -21,6 +21,14 @@
<script src="https://cdn.jsdelivr.net/gh/fiqhpratama/upsense-cdn@main/adminlte-blue/plugins/waitme/waitMe.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/autonumeric@4.6.0/dist/autoNumeric.min.js"></script>
{{-- New Datatables --}}
<!-- <script src="https://cdn.datatables.net/2.3.2/css/dataTables.dataTables.min.css"></script>
<script src="https://cdn.datatables.net/2.3.2/js/dataTables.min.js"></script>
<script src="https://cdn.datatables.net/columncontrol/1.0.6/js/dataTables.columnControl.min.js"></script> -->
<script>
$(document).ready(function() {
// Initialize Ladda button on click event
@@ -11,6 +11,9 @@
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/buttons/1.7.1/css/buttons.dataTables.min.css">
<!-- <link rel="stylesheet" href="https://cdn.datatables.net/2.3.2/css/dataTables.dataTables.css" />
<link href="https://cdn.datatables.net/columncontrol/1.0.6/css/columnControl.dataTables.min.css" rel="stylesheet"> -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fiqhpratama/upsense-cdn@main/adminlte-blue/plugins/materialdesignicon/css/materialdesignicons.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fiqhpratama/upsense-cdn@main/adminlte-blue/plugins/sweetalert2/sweetalert2.min.css">
View File