Compare commits

1 Commits

Author SHA1 Message Date
509f59ea45 Ajustes varios de permisos y visuales 2025-01-27 08:34:28 -03:00
17 changed files with 1606 additions and 1455 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@
/**
* A helper file for Laravel, to provide autocomplete information to your IDE
* Generated for Laravel 11.37.0.
* Generated for Laravel 11.40.0.
*
* This file should not be included in your code, only analyzed by your IDE!
*
@@ -4765,9 +4765,9 @@ namespace Illuminate\Support\Facades {
*
* @template TCacheValue
* @param string $key
* @param \Illuminate\Cache\array{ 0: \DateTimeInterface|\DateInterval|int, 1: \DateTimeInterface|\DateInterval|int } $ttl
* @param array{ 0: \DateTimeInterface|\DateInterval|int, 1: \DateTimeInterface|\DateInterval|int } $ttl
* @param (callable(): TCacheValue) $callback
* @param \Illuminate\Cache\array{ seconds?: int, owner?: string }|null $lock
* @param array{ seconds?: int, owner?: string }|null $lock
* @return TCacheValue
* @static
*/
@@ -4850,6 +4850,18 @@ namespace Illuminate\Support\Facades {
return $instance->tags($names);
}
/**
* Get the name of the cache store.
*
* @return string|null
* @static
*/
public static function getName()
{
/** @var \Illuminate\Cache\Repository $instance */
return $instance->getName();
}
/**
* Determine if the current store supports tags.
*
@@ -14322,7 +14334,7 @@ namespace Illuminate\Support\Facades {
*
*
* @internal
* @param \Symfony\Component\HttpFoundation\callable(): SessionInterface $factory
* @param callable(): SessionInterface $factory
* @static
*/
public static function setSessionFactory($factory)
@@ -15794,6 +15806,19 @@ namespace Illuminate\Support\Facades {
return $instance->enums($key, $enumClass);
}
/**
* Retrieve data from the instance as an array.
*
* @param array|string|null $key
* @return array
* @static
*/
public static function array($key = null)
{
/** @var \Illuminate\Http\Request $instance */
return $instance->array($key);
}
/**
* Retrieve data from the instance as a collection.
*
@@ -22161,7 +22186,7 @@ namespace Illuminate\Support\Facades {
/**
* Set the prefetching strategy.
*
* @param \Illuminate\Foundation\'waterfall'|\Illuminate\Foundation\'aggressive'|null $strategy
* @param 'waterfall'|'aggressive'|null $strategy
* @param array $config
* @return \Illuminate\Foundation\Vite
* @static
@@ -22640,7 +22665,7 @@ namespace Barryvdh\Debugbar\Facades {
/**
* Returns an array of all data collectors
*
* @return \DebugBar\array[DataCollectorInterface]
* @return array[DataCollectorInterface]
* @static
*/
public static function getCollectors()
@@ -24231,6 +24256,23 @@ namespace {
return $instance->updateOrCreate($attributes, $values);
}
/**
* Create a record matching the attributes, or increment the existing record.
*
* @param array $attributes
* @param string $column
* @param int|float $default
* @param int|float $step
* @param array $extra
* @return TModel
* @static
*/
public static function incrementOrCreate($attributes, $column = 'count', $default = 1, $step = 1, $extra = [])
{
/** @var \Illuminate\Database\Eloquent\Builder $instance */
return $instance->incrementOrCreate($attributes, $column, $default, $step, $extra);
}
/**
* Execute the query and get the first result or throw an exception.
*
@@ -24602,6 +24644,22 @@ namespace {
return $instance->newModelInstance($attributes);
}
/**
* Specify attributes that should be added to any new models created by this builder.
*
* The given key / value pairs will also be added as where conditions to the query.
*
* @param \Illuminate\Contracts\Database\Query\Expression|array|string $attributes
* @param mixed $value
* @return \Illuminate\Database\Eloquent\Builder<static>
* @static
*/
public static function withAttributes($attributes, $value = null)
{
/** @var \Illuminate\Database\Eloquent\Builder $instance */
return $instance->withAttributes($attributes, $value);
}
/**
* Apply query-time casts to the model instance.
*
@@ -24808,7 +24866,7 @@ namespace {
* Chunk the results of the query.
*
* @param int $count
* @param \Illuminate\Database\Eloquent\callable(\Illuminate\Support\Collection<int, TValue>, int): mixed $callback
* @param callable(\Illuminate\Support\Collection<int, TValue>, int): mixed $callback
* @return bool
* @static
*/
@@ -24822,7 +24880,7 @@ namespace {
* Run a map over each item while chunking.
*
* @template TReturn
* @param \Illuminate\Database\Eloquent\callable(TValue): TReturn $callback
* @param callable(TValue): TReturn $callback
* @param int $count
* @return \Illuminate\Support\Collection<int, TReturn>
* @static
@@ -24836,7 +24894,7 @@ namespace {
/**
* Execute a callback over each item while chunking.
*
* @param \Illuminate\Database\Eloquent\callable(TValue, int): mixed $callback
* @param callable(TValue, int): mixed $callback
* @param int $count
* @return bool
* @throws \RuntimeException
@@ -24852,7 +24910,7 @@ namespace {
* Chunk the results of a query by comparing IDs.
*
* @param int $count
* @param \Illuminate\Database\Eloquent\callable(\Illuminate\Support\Collection<int, TValue>, int): mixed $callback
* @param callable(\Illuminate\Support\Collection<int, TValue>, int): mixed $callback
* @param string|null $column
* @param string|null $alias
* @return bool
@@ -24868,7 +24926,7 @@ namespace {
* Chunk the results of a query by comparing IDs in descending order.
*
* @param int $count
* @param \Illuminate\Database\Eloquent\callable(\Illuminate\Support\Collection<int, TValue>, int): mixed $callback
* @param callable(\Illuminate\Support\Collection<int, TValue>, int): mixed $callback
* @param string|null $column
* @param string|null $alias
* @return bool
@@ -24884,7 +24942,7 @@ namespace {
* Chunk the results of a query by comparing IDs in a given order.
*
* @param int $count
* @param \Illuminate\Database\Eloquent\callable(\Illuminate\Support\Collection<int, TValue>, int): mixed $callback
* @param callable(\Illuminate\Support\Collection<int, TValue>, int): mixed $callback
* @param string|null $column
* @param string|null $alias
* @param bool $descending
@@ -24901,7 +24959,7 @@ namespace {
/**
* Execute a callback over each item while chunking by ID.
*
* @param \Illuminate\Database\Eloquent\callable(TValue, int): mixed $callback
* @param callable(TValue, int): mixed $callback
* @param int $count
* @param string|null $column
* @param string|null $alias
@@ -24991,7 +25049,7 @@ namespace {
/**
* Pass the query to a given callback.
*
* @param \Illuminate\Database\Eloquent\callable($this): mixed $callback
* @param callable($this): mixed $callback
* @return \Illuminate\Database\Eloquent\Builder<static>
* @static
*/
@@ -25438,7 +25496,7 @@ namespace {
* Add a morph-to relationship condition to the query.
*
* @param \Illuminate\Database\Eloquent\Relations\MorphTo<*, *>|string $relation
* @param \Illuminate\Database\Eloquent\Model|string|null $model
* @param \Illuminate\Database\Eloquent\Model|iterable<int, \Illuminate\Database\Eloquent\Model>|string|null $model
* @return \Illuminate\Database\Eloquent\Builder<static>
* @static
*/
@@ -25452,7 +25510,7 @@ namespace {
* Add a not morph-to relationship condition to the query.
*
* @param \Illuminate\Database\Eloquent\Relations\MorphTo<*, *>|string $relation
* @param \Illuminate\Database\Eloquent\Model|string $model
* @param \Illuminate\Database\Eloquent\Model|iterable<int, \Illuminate\Database\Eloquent\Model>|string $model
* @return \Illuminate\Database\Eloquent\Builder<static>
* @static
*/
@@ -25466,7 +25524,7 @@ namespace {
* Add a morph-to relationship condition to the query with an "or where" clause.
*
* @param \Illuminate\Database\Eloquent\Relations\MorphTo<*, *>|string $relation
* @param \Illuminate\Database\Eloquent\Model|string|null $model
* @param \Illuminate\Database\Eloquent\Model|iterable<int, \Illuminate\Database\Eloquent\Model>|string|null $model
* @return \Illuminate\Database\Eloquent\Builder<static>
* @static
*/
@@ -25480,7 +25538,7 @@ namespace {
* Add a not morph-to relationship condition to the query with an "or where" clause.
*
* @param \Illuminate\Database\Eloquent\Relations\MorphTo<*, *>|string $relation
* @param \Illuminate\Database\Eloquent\Model|string $model
* @param \Illuminate\Database\Eloquent\Model|iterable<int, \Illuminate\Database\Eloquent\Model>|string $model
* @return \Illuminate\Database\Eloquent\Builder<static>
* @static
*/

View File

@@ -0,0 +1,33 @@
<?php
namespace App\Console\Commands;
use App\Enums\RoleName;
use App\Models\Role;
use App\Models\User;
use Illuminate\Console\Command;
use Illuminate\Contracts\Console\PromptsForMissingInput;
use Illuminate\Support\Facades\Hash;
class CreateAdmin extends Command implements PromptsForMissingInput
{
protected $signature = 'app:create-admin {user : E-Mail for the admin account} {password : Password for the admin account}';
protected $description = 'Creates a super admin for the system';
public function handle(): void
{
$user = $this->argument('user');
$password = $this->argument('password');
$user = User::create([
'name' => $user,
'email' => $user,
'password' => Hash::make($password),
]);
$role = Role::where('name', RoleName::SuperAdmin)->first();
$user->roles()->attach($role);
$this->info("Admin account created");
}
}

View File

@@ -58,7 +58,7 @@ class ResetPassword extends Component
);
if ($status === Password::PASSWORD_RESET) {
Session::flash('toast', ['type' => 'success', 'message' => __($status)]);
$this->toast()->success("Éxito", __($status))->flash()->send();
$this->redirectRoute('login', navigate: true);
} else {
throw ValidationException::withMessages(['email' => __($status)]);

View File

@@ -82,7 +82,7 @@ class Index extends Component
'diez' => 0,
]);
Session::flash('toast', ['type' => 'success', 'message' => 'Caja registrada correctamente']);
$this->toast()->success("Éxito", "Caja registrada correctamente")->flash()->send();
$this->redirectRoute('cajas.edit', $turno, navigate: true);
}

View File

@@ -7,6 +7,7 @@ use App\Models\Role;
use App\Models\User;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Session;
use Illuminate\Validation\Rule;
@@ -53,7 +54,7 @@ class Edit extends Component
{
return [
'name' => 'required|string',
'email' => ['required', 'email', Rule::unique('users', 'email')->ignore($this->user->id)],
'email' => ['required', 'email', Rule::unique('users', 'email')->ignore($this->user?->id)],
'password' => $this->change_password ? 'required|string|min:8|confirmed' : 'nullable|string|min:8|confirmed',
'password_confirmation' => $this->change_password ? 'required' : 'nullable',
'roles' => 'nullable',
@@ -86,19 +87,26 @@ class Edit extends Component
$this->user->save();
$isSuperAdmin = $this->user->roles()->where('name', RoleName::SuperAdmin)->exists();
$this->user->roles()->sync($this->roles);
if ($isSuperAdmin) {
$this->user->roles()->attach(Role::where('name', RoleName::SuperAdmin)->first()->id);
$isSuperAdmin = $this->user->isAn(RoleName::SuperAdmin);
if($isSuperAdmin) {
$this->roles[] = Role::where('name', RoleName::SuperAdmin)->first()->id;
}
Session::flash('toast', ['type' => 'success', 'message' => 'Usuario modificado correctamente']);
$this->user->roles()->sync($this->roles);
$this->toast()->success("Éxito", "Usuario modificado correctamente")->flash()->send();
}
public function store(): void
{
$this->authorize('create', User::class);
$superadmin = Role::whereName(RoleName::SuperAdmin)->first();
if(collect($this->roles)->contains($superadmin->id)) {
Gate::authorize('create-super-admin', User::class);
}
$user = User::create([
'name' => $this->name,
'email' => $this->email,
@@ -107,12 +115,16 @@ class Edit extends Component
$user->roles()->sync($this->roles);
Session::flash('toast', ['type' => 'success', 'message' => 'Usuario registrado correctamente']);
$this->toast()->success("Éxito", "Usuario registrado correctamente")->flash()->send();
}
#[Computed]
public function availableRoles(): Collection
{
return Role::whereNot('name', RoleName::SuperAdmin)->get();
if(Gate::allows('create-super-admin', User::class)) {
return Role::all();
} else {
return Role::whereNot('name', RoleName::SuperAdmin)->get();
}
}
}

View File

@@ -51,6 +51,7 @@ class Index extends Component
return [
['index' => 'name', 'label' => 'Nombre'],
['index' => 'email', 'label' => 'Email'],
['index' => 'roles', 'label' => 'Roles'],
['index' => 'action', 'label' => 'Acciones'],
];
}
@@ -58,6 +59,6 @@ class Index extends Component
#[Computed]
public function rows(): LengthAwarePaginator
{
return User::paginate();
return User::filterSuperadmin()->with('roles')->paginate();
}
}

View File

@@ -2,6 +2,8 @@
namespace App\Models;
use App\Enums\RoleName;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
@@ -30,6 +32,23 @@ class User extends Authenticatable
return $this->belongsToMany(Role::class, 'user_roles', 'user_id', 'role_id');
}
public function isAn(...$roles): bool
{
return $this->roles()->whereIn('name', $roles)->exists();
}
public function scopeFilterSuperadmin(Builder $query) {
if(!auth()->check()) {
return;
}
if (!auth()->user()->isAn(RoleName::SuperAdmin)) {
$query->whereDoesntHave('roles', function (Builder $builder) {
$builder->where('name', RoleName::SuperAdmin);
});
}
}
protected function casts(): array
{
return [

View File

@@ -10,68 +10,65 @@ class UserPolicy
{
public function before(User $user, string $ability): bool|null
{
$isAdmin = $user->roles()->whereIn('name', [RoleName::SuperAdmin, RoleName::Admin])->exists();
if (!$isAdmin) {
if (!$user->isAn(RoleName::SuperAdmin, RoleName::Admin)) {
return false;
}
return null;
}
/**
* Determine whether the user can view any models.
*/
public function viewAny(User $user): bool
{
return true;
}
/**
* Determine whether the user can view the model.
*/
public function view(User $user, User $model): bool
{
if($model->isAn(RoleName::SuperAdmin)) {
return $user->isAn(RoleName::SuperAdmin);
}
return true;
}
/**
* Determine whether the user can create models.
*/
public function create(User $user): bool
{
return true;
}
/**
* Determine whether the user can update the model.
*/
public function createSuperAdmin(User $user): bool
{
return $user->isAn(RoleName::SuperAdmin);
}
public function update(User $user, User $model): bool
{
if($model->isAn(RoleName::SuperAdmin)) {
return $user->isAn(RoleName::SuperAdmin);
}
return true;
}
/**
* Determine whether the user can delete the model.
*/
public function delete(User $user, User $model): bool
{
if($model->isAn(RoleName::SuperAdmin)) {
return $user->isAn(RoleName::SuperAdmin);
}
return true;
}
/**
* Determine whether the user can restore the model.
*/
public function restore(User $user, User $model): bool
{
if($model->isAn(RoleName::SuperAdmin)) {
return $user->isAn(RoleName::SuperAdmin);
}
return true;
}
/**
* Determine whether the user can permanently delete the model.
*/
public function forceDelete(User $user, User $model): bool
{
if($model->isAn(RoleName::SuperAdmin)) {
return $user->isAn(RoleName::SuperAdmin);
}
return true;
}
}

186
composer.lock generated
View File

@@ -2563,16 +2563,16 @@
},
{
"name": "laravel-lang/publisher",
"version": "16.4.0",
"version": "16.4.1",
"source": {
"type": "git",
"url": "https://github.com/Laravel-Lang/publisher.git",
"reference": "7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c"
"reference": "fc33816edbb13e9fd032243afd565efec265926d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Laravel-Lang/publisher/zipball/7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c",
"reference": "7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c",
"url": "https://api.github.com/repos/Laravel-Lang/publisher/zipball/fc33816edbb13e9fd032243afd565efec265926d",
"reference": "fc33816edbb13e9fd032243afd565efec265926d",
"shasum": ""
},
"require": {
@@ -2657,7 +2657,7 @@
"issues": "https://github.com/Laravel-Lang/publisher/issues",
"source": "https://github.com/Laravel-Lang/publisher"
},
"time": "2024-06-02T00:22:33+00:00"
"time": "2025-01-17T10:45:02+00:00"
},
{
"name": "laravel-lang/routes",
@@ -2738,16 +2738,16 @@
},
{
"name": "laravel/framework",
"version": "v11.37.0",
"version": "v11.40.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "6cb103d2024b087eae207654b3f4b26646119ba5"
"reference": "599a28196d284fee158cc10086fd56ac625ad7a3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/6cb103d2024b087eae207654b3f4b26646119ba5",
"reference": "6cb103d2024b087eae207654b3f4b26646119ba5",
"url": "https://api.github.com/repos/laravel/framework/zipball/599a28196d284fee158cc10086fd56ac625ad7a3",
"reference": "599a28196d284fee158cc10086fd56ac625ad7a3",
"shasum": ""
},
"require": {
@@ -2773,7 +2773,7 @@
"league/flysystem-local": "^3.25.1",
"league/uri": "^7.5.1",
"monolog/monolog": "^3.0",
"nesbot/carbon": "^2.72.2|^3.4",
"nesbot/carbon": "^2.72.6|^3.8.4",
"nunomaduro/termwind": "^2.0",
"php": "^8.2",
"psr/container": "^1.1.1|^2.0.1",
@@ -2848,6 +2848,7 @@
"fakerphp/faker": "^1.24",
"guzzlehttp/promises": "^2.0.3",
"guzzlehttp/psr7": "^2.4",
"laravel/pint": "^1.18",
"league/flysystem-aws-s3-v3": "^3.25.1",
"league/flysystem-ftp": "^3.25.1",
"league/flysystem-path-prefixing": "^3.25.1",
@@ -2948,7 +2949,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2025-01-02T20:10:21+00:00"
"time": "2025-01-24T16:17:42+00:00"
},
{
"name": "laravel/octane",
@@ -3042,16 +3043,16 @@
},
{
"name": "laravel/prompts",
"version": "v0.3.2",
"version": "v0.3.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
"reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f"
"reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/prompts/zipball/0e0535747c6b8d6d10adca8b68293cf4517abb0f",
"reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f",
"url": "https://api.github.com/repos/laravel/prompts/zipball/749395fcd5f8f7530fe1f00dfa84eb22c83d94ea",
"reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea",
"shasum": ""
},
"require": {
@@ -3095,9 +3096,9 @@
"description": "Add beautiful and user-friendly forms to your command-line applications.",
"support": {
"issues": "https://github.com/laravel/prompts/issues",
"source": "https://github.com/laravel/prompts/tree/v0.3.2"
"source": "https://github.com/laravel/prompts/tree/v0.3.3"
},
"time": "2024-11-12T14:59:47+00:00"
"time": "2024-12-30T15:53:31+00:00"
},
{
"name": "laravel/serializable-closure",
@@ -3162,16 +3163,16 @@
},
{
"name": "laravel/telescope",
"version": "v5.2.6",
"version": "v5.3.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/telescope.git",
"reference": "7ee46fbea8e3b01108575c8edf7377abddfe8bb9"
"reference": "216fd8d41eb17b49469bea9359b4f0f711b882b3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/telescope/zipball/7ee46fbea8e3b01108575c8edf7377abddfe8bb9",
"reference": "7ee46fbea8e3b01108575c8edf7377abddfe8bb9",
"url": "https://api.github.com/repos/laravel/telescope/zipball/216fd8d41eb17b49469bea9359b4f0f711b882b3",
"reference": "216fd8d41eb17b49469bea9359b4f0f711b882b3",
"shasum": ""
},
"require": {
@@ -3225,9 +3226,9 @@
],
"support": {
"issues": "https://github.com/laravel/telescope/issues",
"source": "https://github.com/laravel/telescope/tree/v5.2.6"
"source": "https://github.com/laravel/telescope/tree/v5.3.0"
},
"time": "2024-11-25T20:34:58+00:00"
"time": "2024-12-26T21:37:35+00:00"
},
{
"name": "laravel/tinker",
@@ -8032,16 +8033,16 @@
},
{
"name": "barryvdh/laravel-ide-helper",
"version": "v3.5.3",
"version": "v3.5.4",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-ide-helper.git",
"reference": "271682a2a6d57691e1c7ff378f44e4ae6ac2aba0"
"reference": "980a87e250fc2a7558bc46e07f61c7594500ea53"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/271682a2a6d57691e1c7ff378f44e4ae6ac2aba0",
"reference": "271682a2a6d57691e1c7ff378f44e4ae6ac2aba0",
"url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/980a87e250fc2a7558bc46e07f61c7594500ea53",
"reference": "980a87e250fc2a7558bc46e07f61c7594500ea53",
"shasum": ""
},
"require": {
@@ -8110,7 +8111,7 @@
],
"support": {
"issues": "https://github.com/barryvdh/laravel-ide-helper/issues",
"source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.5.3"
"source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.5.4"
},
"funding": [
{
@@ -8122,20 +8123,20 @@
"type": "github"
}
],
"time": "2025-01-08T10:01:30+00:00"
"time": "2025-01-14T09:07:00+00:00"
},
{
"name": "barryvdh/reflection-docblock",
"version": "v2.3.0",
"version": "v2.3.1",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/ReflectionDocBlock.git",
"reference": "818be8de6af4d16ef3ad51ea9234b3d37026ee5f"
"reference": "b6ff9f93603561f50e53b64310495d20b8dff5d8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/818be8de6af4d16ef3ad51ea9234b3d37026ee5f",
"reference": "818be8de6af4d16ef3ad51ea9234b3d37026ee5f",
"url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/b6ff9f93603561f50e53b64310495d20b8dff5d8",
"reference": "b6ff9f93603561f50e53b64310495d20b8dff5d8",
"shasum": ""
},
"require": {
@@ -8172,9 +8173,9 @@
}
],
"support": {
"source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.3.0"
"source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.3.1"
},
"time": "2024-12-30T10:35:04+00:00"
"time": "2025-01-18T19:26:32+00:00"
},
{
"name": "brianium/paratest",
@@ -8440,16 +8441,16 @@
},
{
"name": "filp/whoops",
"version": "2.16.0",
"version": "2.17.0",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
"reference": "befcdc0e5dce67252aa6322d82424be928214fa2"
"reference": "075bc0c26631110584175de6523ab3f1652eb28e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2",
"reference": "befcdc0e5dce67252aa6322d82424be928214fa2",
"url": "https://api.github.com/repos/filp/whoops/zipball/075bc0c26631110584175de6523ab3f1652eb28e",
"reference": "075bc0c26631110584175de6523ab3f1652eb28e",
"shasum": ""
},
"require": {
@@ -8499,7 +8500,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
"source": "https://github.com/filp/whoops/tree/2.16.0"
"source": "https://github.com/filp/whoops/tree/2.17.0"
},
"funding": [
{
@@ -8507,7 +8508,7 @@
"type": "github"
}
],
"time": "2024-09-25T12:00:00+00:00"
"time": "2025-01-25T12:00:00+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@@ -8621,16 +8622,16 @@
},
{
"name": "laravel/pint",
"version": "v1.19.0",
"version": "v1.20.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
"reference": "8169513746e1bac70c85d6ea1524d9225d4886f0"
"reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/pint/zipball/8169513746e1bac70c85d6ea1524d9225d4886f0",
"reference": "8169513746e1bac70c85d6ea1524d9225d4886f0",
"url": "https://api.github.com/repos/laravel/pint/zipball/53072e8ea22213a7ed168a8a15b96fbb8b82d44b",
"reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b",
"shasum": ""
},
"require": {
@@ -8683,7 +8684,7 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
"time": "2024-12-30T16:20:10+00:00"
"time": "2025-01-14T16:20:53+00:00"
},
{
"name": "maximebf/debugbar",
@@ -8898,37 +8899,37 @@
},
{
"name": "nunomaduro/collision",
"version": "v8.5.0",
"version": "v8.6.1",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/collision.git",
"reference": "f5c101b929c958e849a633283adff296ed5f38f5"
"reference": "86f003c132143d5a2ab214e19933946409e0cae7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nunomaduro/collision/zipball/f5c101b929c958e849a633283adff296ed5f38f5",
"reference": "f5c101b929c958e849a633283adff296ed5f38f5",
"url": "https://api.github.com/repos/nunomaduro/collision/zipball/86f003c132143d5a2ab214e19933946409e0cae7",
"reference": "86f003c132143d5a2ab214e19933946409e0cae7",
"shasum": ""
},
"require": {
"filp/whoops": "^2.16.0",
"nunomaduro/termwind": "^2.1.0",
"nunomaduro/termwind": "^2.3.0",
"php": "^8.2.0",
"symfony/console": "^7.1.5"
"symfony/console": "^7.2.1"
},
"conflict": {
"laravel/framework": "<11.0.0 || >=12.0.0",
"phpunit/phpunit": "<10.5.1 || >=12.0.0"
"laravel/framework": "<11.39.1 || >=13.0.0",
"phpunit/phpunit": "<11.5.3 || >=12.0.0"
},
"require-dev": {
"larastan/larastan": "^2.9.8",
"laravel/framework": "^11.28.0",
"laravel/pint": "^1.18.1",
"laravel/sail": "^1.36.0",
"laravel/sanctum": "^4.0.3",
"larastan/larastan": "^2.9.12",
"laravel/framework": "^11.39.1",
"laravel/pint": "^1.20.0",
"laravel/sail": "^1.40.0",
"laravel/sanctum": "^4.0.7",
"laravel/tinker": "^2.10.0",
"orchestra/testbench-core": "^9.5.3",
"pestphp/pest": "^2.36.0 || ^3.4.0",
"orchestra/testbench-core": "^9.9.2",
"pestphp/pest": "^3.7.3",
"sebastian/environment": "^6.1.0 || ^7.2.0"
},
"type": "library",
@@ -8966,6 +8967,7 @@
"cli",
"command-line",
"console",
"dev",
"error",
"handling",
"laravel",
@@ -8991,41 +8993,41 @@
"type": "patreon"
}
],
"time": "2024-10-15T16:06:32+00:00"
"time": "2025-01-23T13:41:43+00:00"
},
{
"name": "pestphp/pest",
"version": "v3.7.1",
"version": "v3.7.4",
"source": {
"type": "git",
"url": "https://github.com/pestphp/pest.git",
"reference": "bf3178473dcaa53b0458f21dfdb271306ea62512"
"reference": "4a987d3d5c4e3ba36c76fecbf56113baac2d1b2b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/pestphp/pest/zipball/bf3178473dcaa53b0458f21dfdb271306ea62512",
"reference": "bf3178473dcaa53b0458f21dfdb271306ea62512",
"url": "https://api.github.com/repos/pestphp/pest/zipball/4a987d3d5c4e3ba36c76fecbf56113baac2d1b2b",
"reference": "4a987d3d5c4e3ba36c76fecbf56113baac2d1b2b",
"shasum": ""
},
"require": {
"brianium/paratest": "^7.7.0",
"nunomaduro/collision": "^8.5.0",
"nunomaduro/collision": "^8.6.1",
"nunomaduro/termwind": "^2.3.0",
"pestphp/pest-plugin": "^3.0.0",
"pestphp/pest-plugin-arch": "^3.0.0",
"pestphp/pest-plugin-mutate": "^3.0.5",
"php": "^8.2.0",
"phpunit/phpunit": "^11.5.1"
"phpunit/phpunit": "^11.5.3"
},
"conflict": {
"filp/whoops": "<2.16.0",
"phpunit/phpunit": ">11.5.1",
"phpunit/phpunit": ">11.5.3",
"sebastian/exporter": "<6.0.0",
"webmozart/assert": "<1.11.0"
},
"require-dev": {
"pestphp/pest-dev-tools": "^3.3.0",
"pestphp/pest-plugin-type-coverage": "^3.2.0",
"pestphp/pest-plugin-type-coverage": "^3.2.3",
"symfony/process": "^7.2.0"
},
"bin": [
@@ -9091,7 +9093,7 @@
],
"support": {
"issues": "https://github.com/pestphp/pest/issues",
"source": "https://github.com/pestphp/pest/tree/v3.7.1"
"source": "https://github.com/pestphp/pest/tree/v3.7.4"
},
"funding": [
{
@@ -9103,7 +9105,7 @@
"type": "github"
}
],
"time": "2024-12-12T11:52:01+00:00"
"time": "2025-01-23T14:03:29+00:00"
},
{
"name": "pestphp/pest-plugin",
@@ -9247,27 +9249,27 @@
},
{
"name": "pestphp/pest-plugin-laravel",
"version": "v3.0.0",
"version": "v3.1.0",
"source": {
"type": "git",
"url": "https://github.com/pestphp/pest-plugin-laravel.git",
"reference": "7dd98c0c3b3542970ec21fce80ec5c88916ac469"
"reference": "1c4e994476375c72aa7aebaaa97aa98f5d5378cd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/7dd98c0c3b3542970ec21fce80ec5c88916ac469",
"reference": "7dd98c0c3b3542970ec21fce80ec5c88916ac469",
"url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/1c4e994476375c72aa7aebaaa97aa98f5d5378cd",
"reference": "1c4e994476375c72aa7aebaaa97aa98f5d5378cd",
"shasum": ""
},
"require": {
"laravel/framework": "^11.22.0",
"pestphp/pest": "^3.0.0",
"laravel/framework": "^11.39.1|^12.0.0",
"pestphp/pest": "^3.7.4",
"php": "^8.2.0"
},
"require-dev": {
"laravel/dusk": "^8.2.5",
"orchestra/testbench": "^9.4.0",
"pestphp/pest-dev-tools": "^3.0.0"
"laravel/dusk": "^8.2.13|dev-develop",
"orchestra/testbench": "^9.9.0|^10.0.0",
"pestphp/pest-dev-tools": "^3.3.0"
},
"type": "library",
"extra": {
@@ -9305,7 +9307,7 @@
"unit"
],
"support": {
"source": "https://github.com/pestphp/pest-plugin-laravel/tree/v3.0.0"
"source": "https://github.com/pestphp/pest-plugin-laravel/tree/v3.1.0"
},
"funding": [
{
@@ -9317,7 +9319,7 @@
"type": "github"
}
],
"time": "2024-09-08T23:32:52+00:00"
"time": "2025-01-24T13:22:39+00:00"
},
{
"name": "pestphp/pest-plugin-mutate",
@@ -10056,16 +10058,16 @@
},
{
"name": "phpunit/phpunit",
"version": "11.5.1",
"version": "11.5.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "2b94d4f2450b9869fa64a46fd8a6a41997aef56a"
"reference": "30e319e578a7b5da3543073e30002bf82042f701"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2b94d4f2450b9869fa64a46fd8a6a41997aef56a",
"reference": "2b94d4f2450b9869fa64a46fd8a6a41997aef56a",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/30e319e578a7b5da3543073e30002bf82042f701",
"reference": "30e319e578a7b5da3543073e30002bf82042f701",
"shasum": ""
},
"require": {
@@ -10079,14 +10081,14 @@
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
"php": ">=8.2",
"phpunit/php-code-coverage": "^11.0.7",
"phpunit/php-code-coverage": "^11.0.8",
"phpunit/php-file-iterator": "^5.1.0",
"phpunit/php-invoker": "^5.0.1",
"phpunit/php-text-template": "^4.0.1",
"phpunit/php-timer": "^7.0.1",
"sebastian/cli-parser": "^3.0.2",
"sebastian/code-unit": "^3.0.1",
"sebastian/comparator": "^6.2.1",
"sebastian/code-unit": "^3.0.2",
"sebastian/comparator": "^6.3.0",
"sebastian/diff": "^6.0.2",
"sebastian/environment": "^7.2.0",
"sebastian/exporter": "^6.3.0",
@@ -10137,7 +10139,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
"source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.1"
"source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.3"
},
"funding": [
{
@@ -10153,7 +10155,7 @@
"type": "tidelift"
}
],
"time": "2024-12-11T10:52:48+00:00"
"time": "2025-01-13T09:36:00+00:00"
},
{
"name": "sebastian/cli-parser",

View File

@@ -19,9 +19,8 @@
<body class="flex flex-col min-h-screen">
<x-dialog/>
<x-toast/>
<x-flash/>
<x-navbar/>
<div class="flex-1 bg-secondary-50 overflow-x-auto">
<main class="container mx-auto px-4 py-8">
{{ $slot }}

View File

@@ -4,7 +4,7 @@
<x-input label="Total" wire:model="valor" invalidate/>
<x-input label="Descripción" wire:model="descripcion" invalidate/>
<x-button type="submit">
<x-button type="submit" icon="{{$this->currentCalculo ? 'device-floppy' : 'plus'}}">
@if($this->currentCalculo)
Guardar
@else
@@ -25,8 +25,12 @@
{{Number::currency($row->valor)}}
@endinteract
@interact('column_action', $row)
<x-button.circle icon="edit" wire:click="edit('{{$row->id}}')" :key="uniqid()"/>
<x-button.circle icon="trash" color="red" wire:click="confirmDelete('{{$row->id}}')" :key="uniqid()"/>
<x-button sm wire:click="edit('{{$row->id}}')" :key="uniqid()">
Editar
</x-button>
<x-button sm color="red" wire:click="confirmDelete('{{$row->id}}')" :key="uniqid()">
Eliminar
</x-button>
@endinteract
</x-table>

View File

@@ -6,7 +6,7 @@
<x-input label="Descripción" wire:model="descripcion" invalidate/>
<x-input label="Total" wire:model="valor" invalidate/>
<x-button type="submit">
<x-button type="submit" icon="{{$this->currentDocumento ? 'device-floppy' : 'plus'}}">
@if($this->currentDocumento)
Guardar
@else
@@ -31,8 +31,12 @@
{{Number::currency($row->valor)}}
@endinteract
@interact('column_action', $row)
<x-button.circle icon="edit" wire:click="edit('{{$row->id}}')" :key="uniqid()"/>
<x-button.circle icon="trash" color="red" wire:click="confirmDelete('{{$row->id}}')" :key="uniqid()"/>
<x-button sm wire:click="edit('{{$row->id}}')" :key="uniqid()">
Editar
</x-button>
<x-button sm color="red" wire:click="confirmDelete('{{$row->id}}')" :key="uniqid()">
Eliminar
</x-button>
@endinteract
</x-table>

View File

@@ -7,7 +7,7 @@
<x-input label="Descripción" wire:model="descripcion" invalidate/>
<x-input label="Total" wire:model="valor" invalidate/>
<x-button type="submit">
<x-button type="submit" icon="{{$this->currentEgreso ? 'device-floppy' : 'plus'}}">
@if($this->currentEgreso)
Guardar
@else
@@ -35,8 +35,12 @@
{{Number::currency($row->valor)}}
@endinteract
@interact('column_action', $row)
<x-button.circle icon="edit" wire:click="edit('{{$row->id}}')" :key="uniqid()"/>
<x-button.circle icon="trash" color="red" wire:click="confirmDelete('{{$row->id}}')" :key="uniqid()"/>
<x-button sm wire:click="edit('{{$row->id}}')" :key="uniqid()">
Editar
</x-button>
<x-button sm color="red" wire:click="confirmDelete('{{$row->id}}')" :key="uniqid()">
Eliminar
</x-button>
@endinteract
</x-table>

View File

@@ -6,7 +6,7 @@
<x-input type="number" label="Documento Final" wire:model="ingreso_final" min="0" invalidate/>
<x-input type="number" label="Total" wire:model="total" min="0" invalidate/>
<x-button type="submit">
<x-button type="submit" icon="{{$this->currentIngreso ? 'device-floppy' : 'plus'}}">
@if($this->currentIngreso)
Guardar
@else
@@ -40,8 +40,12 @@
{{\Illuminate\Support\Number::currency($row->total)}}
@endinteract
@interact('column_action', $row)
<x-button.circle icon="edit" wire:click="edit('{{$row->id}}')" :key="uniqid()"/>
<x-button.circle icon="trash" color="red" wire:click="confirmDelete('{{$row->id}}')" :key="uniqid()"/>
<x-button sm wire:click="edit('{{$row->id}}')" :key="uniqid()">
Editar
</x-button>
<x-button sm color="red" wire:click="confirmDelete('{{$row->id}}')" :key="uniqid()">
Eliminar
</x-button>
@endinteract
</x-table>

View File

@@ -27,8 +27,12 @@
</span>
@endinteract
@interact('column_action', $row)
<x-button.circle icon="edit" :href="route('cajas.edit', $row->id)" wire:navigate :key="uniqid()"/>
<x-button.circle icon="trash" color="red" wire:click="confirmDelete('{{$row->id}}')" :key="uniqid()"/>
<x-button sm :href="route('cajas.edit', $row->id)" wire:navigate :key="uniqid()">
Editar
</x-button>
<x-button sm color="red" wire:click="confirmDelete('{{$row->id}}')" :key="uniqid()">
Eliminar
</x-button>
@endinteract
</x-table>
</div>

View File

@@ -9,12 +9,19 @@
<div class="mt-4">
<x-table striped :headers="$this->headers" :rows="$this->rows" paginate>
@interact('column_roles', $row)
{{$row->roles->pluck('title')->join(', ')}}
@endinteract
@interact('column_action', $row)
@can('update', $row)
<x-button.circle icon="edit" :href="route('usuarios.edit', $row->id)" wire:navigate :key="uniqid()"/>
<x-button sm :href="route('usuarios.edit', $row->id)" wire:navigate :key="uniqid()">
Editar
</x-button>
@endcan
@can('delete', $row)
<x-button.circle icon="trash" color="red" wire:click="confirmDelete('{{$row->id}}')" :key="uniqid()"/>
<x-button sm color="red" wire:click="confirmDelete('{{$row->id}}')" :key="uniqid()">
Eliminar
</x-button>
@endcan
@endinteract
</x-table>