Compare commits
14 Commits
5158c888d2
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
509f59ea45
|
|||
|
90bbc3ac7b
|
|||
|
5fc8e2bda1
|
|||
|
ee19e479f4
|
|||
|
e5e040a53b
|
|||
|
d4f65832f0
|
|||
|
332467f767
|
|||
|
7bb61017de
|
|||
|
e3fb7259b9
|
|||
|
b87ae08b9a
|
|||
|
07b62a07a0
|
|||
|
6ec3344c17
|
|||
|
fd5298b990
|
|||
|
c576bd836e
|
@@ -1,6 +1,9 @@
|
||||
./vendor/
|
||||
./node_modules/
|
||||
./git
|
||||
./public/hot
|
||||
./public/build
|
||||
deploy/
|
||||
.env
|
||||
compose.yml
|
||||
Makefile
|
||||
|
||||
@@ -16,3 +16,6 @@ indent_size = 2
|
||||
|
||||
[docker-compose.yml]
|
||||
indent_size = 4
|
||||
|
||||
[Makefile]
|
||||
indent_style = tab
|
||||
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -21,3 +21,8 @@ yarn-error.log
|
||||
/.nova
|
||||
/.vscode
|
||||
/.zed
|
||||
.npm
|
||||
|
||||
**/caddy
|
||||
frankenphp
|
||||
frankenphp-worker.php
|
||||
|
||||
4765
.phpstorm.meta.php
Normal file
4765
.phpstorm.meta.php
Normal file
File diff suppressed because it is too large
Load Diff
42
Dockerfile
42
Dockerfile
@@ -1,6 +1,27 @@
|
||||
FROM php:8.4-fpm-alpine
|
||||
RUN apk add --no-cache nginx git curl zip unzip supervisor postgresql17-dev \
|
||||
&& docker-php-ext-install pdo_pgsql
|
||||
FROM php:8.4-fpm
|
||||
|
||||
ARG UID=1000
|
||||
ARG GID=1000
|
||||
|
||||
RUN apt update && apt install -y nginx git curl zip unzip supervisor libpq-dev libzip-dev libicu-dev; \
|
||||
curl -fsSL https://deb.nodesource.com/setup_23.x -o nodesource_setup.sh; \
|
||||
bash nodesource_setup.sh; \
|
||||
apt install nodejs; \
|
||||
pecl install xdebug; \
|
||||
pecl install redis; \
|
||||
docker-php-ext-install pdo_pgsql; \
|
||||
docker-php-ext-install zip; \
|
||||
docker-php-ext-install bcmath; \
|
||||
docker-php-ext-install intl; \
|
||||
docker-php-ext-enable xdebug; \
|
||||
docker-php-ext-enable pcntl; \
|
||||
docker-php-ext-enable redis; \
|
||||
usermod -u $UID www-data; \
|
||||
groupmod -g $GID www-data; \
|
||||
apt clean; \
|
||||
rm -rf /var/lib/{apt,dpkg,cache,log}/; \
|
||||
apt clean autoclean; \
|
||||
apt autoremove --yes
|
||||
|
||||
WORKDIR /var/www/html
|
||||
|
||||
@@ -8,14 +29,21 @@ COPY --from=composer:lts /usr/bin/composer /usr/local/bin/composer
|
||||
COPY composer.json composer.lock ./
|
||||
RUN composer install --no-dev --prefer-dist --no-autoloader --optimize-autoloader && rm -rf /root/.composer/cache/*
|
||||
|
||||
COPY nginx.conf /etc/nginx/http.d/default.conf
|
||||
COPY nginx.conf /etc/nginx/sites-enabled/default
|
||||
COPY supervisord.conf /etc/supervisord.conf
|
||||
COPY entrypoint.sh /etc/entrypoint.sh
|
||||
COPY ./ ./
|
||||
RUN chown -R www-data:www-data /var/www
|
||||
|
||||
RUN chown -R www-data:www-data /var/www/html \
|
||||
&& composer dump-autoload \
|
||||
&& rm -rf /tmp/* /var/tmp/*
|
||||
USER www-data
|
||||
RUN composer dump-autoload; \
|
||||
npm install; \
|
||||
npm run build; \
|
||||
npm cache clean --force; \
|
||||
rm -rf node_modules
|
||||
|
||||
USER root
|
||||
RUN rm -rf /tmp/* /var/tmp/*
|
||||
|
||||
EXPOSE 80
|
||||
ENTRYPOINT [ "sh", "/etc/entrypoint.sh" ]
|
||||
|
||||
14
Makefile
Normal file
14
Makefile
Normal file
@@ -0,0 +1,14 @@
|
||||
build:
|
||||
docker compose build
|
||||
|
||||
start:
|
||||
docker compose up -d --remove-orphans
|
||||
|
||||
stop:
|
||||
docker compose stop
|
||||
|
||||
down:
|
||||
docker compose down
|
||||
|
||||
shell:
|
||||
docker compose exec -u www-data laravel bash
|
||||
28281
_ide_helper.php
Normal file
28281
_ide_helper.php
Normal file
File diff suppressed because it is too large
Load Diff
330
_ide_helper_models.php
Normal file
330
_ide_helper_models.php
Normal file
@@ -0,0 +1,330 @@
|
||||
<?php
|
||||
|
||||
// @formatter:off
|
||||
// phpcs:ignoreFile
|
||||
/**
|
||||
* A helper file for your Eloquent Models
|
||||
* Copy the phpDocs from this file to the correct Model,
|
||||
* And remove them from this file, to prevent double declarations.
|
||||
*
|
||||
* @author Barry vd. Heuvel <barryvdh@gmail.com>
|
||||
*/
|
||||
|
||||
|
||||
namespace App\Models{
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @property string $id
|
||||
* @property int $valor
|
||||
* @property string|null $descripcion
|
||||
* @property string $turno_id
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|CalculoFondo newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|CalculoFondo newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|CalculoFondo query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|CalculoFondo whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|CalculoFondo whereDescripcion($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|CalculoFondo whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|CalculoFondo whereTurnoId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|CalculoFondo whereUpdatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|CalculoFondo whereValor($value)
|
||||
*/
|
||||
class CalculoFondo extends \Eloquent {}
|
||||
}
|
||||
|
||||
namespace App\Models{
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @property string $id
|
||||
* @property string|null $descripcion
|
||||
* @property int $valor
|
||||
* @property \App\Enums\TipoDocumento $tipo_documento
|
||||
* @property string $turno_id
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Documento newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Documento newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Documento query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Documento whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Documento whereDescripcion($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Documento whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Documento whereTipoDocumento($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Documento whereTurnoId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Documento whereUpdatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Documento whereValor($value)
|
||||
*/
|
||||
class Documento extends \Eloquent {}
|
||||
}
|
||||
|
||||
namespace App\Models{
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @property string $id
|
||||
* @property int $veinte_mil
|
||||
* @property int $diez_mil
|
||||
* @property int $cinco_mil
|
||||
* @property int $dos_mil
|
||||
* @property int $mil
|
||||
* @property int $quinientos
|
||||
* @property int $cien
|
||||
* @property int $cincuenta
|
||||
* @property int $diez
|
||||
* @property string $turno_id
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||
* @property-read mixed $total
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo whereCien($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo whereCincoMil($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo whereCincuenta($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo whereDiez($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo whereDiezMil($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo whereDosMil($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo whereMil($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo whereQuinientos($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo whereTurnoId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo whereUpdatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Efectivo whereVeinteMil($value)
|
||||
*/
|
||||
class Efectivo extends \Eloquent {}
|
||||
}
|
||||
|
||||
namespace App\Models{
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @property string $id
|
||||
* @property string|null $numero
|
||||
* @property string|null $descripcion
|
||||
* @property int $valor
|
||||
* @property \App\Enums\TipoEgreso $tipo_egreso
|
||||
* @property string $turno_id
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Egreso newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Egreso newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Egreso query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Egreso whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Egreso whereDescripcion($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Egreso whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Egreso whereNumero($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Egreso whereTipoEgreso($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Egreso whereTurnoId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Egreso whereUpdatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Egreso whereValor($value)
|
||||
*/
|
||||
class Egreso extends \Eloquent {}
|
||||
}
|
||||
|
||||
namespace App\Models{
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @property string $id
|
||||
* @property string $mes
|
||||
* @property int $costo_venta
|
||||
* @property int $cuenta_corriente_factura
|
||||
* @property int $cuenta_corriente_boleta
|
||||
* @property int $cuenta_corriente_sin_respaldo
|
||||
* @property int $cuenta_corriente_partime
|
||||
* @property int $remuneraciones
|
||||
* @property int $finiquitos
|
||||
* @property int $aguinaldo
|
||||
* @property int $bonos_personal
|
||||
* @property int $honorarios_contador
|
||||
* @property int $arriendo
|
||||
* @property int $agua
|
||||
* @property int $luz
|
||||
* @property int $gas
|
||||
* @property int $telefono
|
||||
* @property int $otro_servicio
|
||||
* @property string $ppm
|
||||
* @property int $iva_a_favor
|
||||
* @property int $dias_habiles
|
||||
* @property int $dias_trabajados
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereAgua($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereAguinaldo($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereArriendo($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereBonosPersonal($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereCostoVenta($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereCuentaCorrienteBoleta($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereCuentaCorrienteFactura($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereCuentaCorrientePartime($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereCuentaCorrienteSinRespaldo($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereDiasHabiles($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereDiasTrabajados($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereFiniquitos($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereGas($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereHonorariosContador($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereIvaAFavor($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereLuz($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereMes($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereOtroServicio($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado wherePpm($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereRemuneraciones($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereTelefono($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|EstadoResultado whereUpdatedAt($value)
|
||||
*/
|
||||
class EstadoResultado extends \Eloquent {}
|
||||
}
|
||||
|
||||
namespace App\Models{
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @property string $id
|
||||
* @property int $valor
|
||||
* @property string $descripcion
|
||||
* @property \App\Enums\TipoGastoCuentaCorriente $tipo_gasto
|
||||
* @property string $estado_resultado_id
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|GastoCuentaCorriente newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|GastoCuentaCorriente newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|GastoCuentaCorriente query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|GastoCuentaCorriente whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|GastoCuentaCorriente whereDescripcion($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|GastoCuentaCorriente whereEstadoResultadoId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|GastoCuentaCorriente whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|GastoCuentaCorriente whereTipoGasto($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|GastoCuentaCorriente whereUpdatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|GastoCuentaCorriente whereValor($value)
|
||||
*/
|
||||
class GastoCuentaCorriente extends \Eloquent {}
|
||||
}
|
||||
|
||||
namespace App\Models{
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @property string $id
|
||||
* @property int $numero
|
||||
* @property int $numero_z
|
||||
* @property int $ingreso_inicial
|
||||
* @property int $ingreso_final
|
||||
* @property int $total
|
||||
* @property \App\Enums\TipoIngreso $tipo_ingreso
|
||||
* @property string $turno_id
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Ingreso newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Ingreso newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Ingreso query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Ingreso whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Ingreso whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Ingreso whereIngresoFinal($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Ingreso whereIngresoInicial($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Ingreso whereNumero($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Ingreso whereNumeroZ($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Ingreso whereTipoIngreso($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Ingreso whereTotal($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Ingreso whereTurnoId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Ingreso whereUpdatedAt($value)
|
||||
*/
|
||||
class Ingreso extends \Eloquent {}
|
||||
}
|
||||
|
||||
namespace App\Models{
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @property int $id
|
||||
* @property string $name
|
||||
* @property string|null $title
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Role newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Role newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Role query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Role whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Role whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Role whereName($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Role whereTitle($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Role whereUpdatedAt($value)
|
||||
*/
|
||||
class Role extends \Eloquent {}
|
||||
}
|
||||
|
||||
namespace App\Models{
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @property string $id
|
||||
* @property \Illuminate\Support\Carbon $fecha
|
||||
* @property int $numero_caja
|
||||
* @property int $numero_turno
|
||||
* @property int $fondo
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||
* @property-read mixed $arqueo
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CalculoFondo> $calculosFondo
|
||||
* @property-read int|null $calculos_fondo_count
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Documento> $documentos
|
||||
* @property-read int|null $documentos_count
|
||||
* @property-read \App\Models\Efectivo|null $efectivo
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Egreso> $egresos
|
||||
* @property-read int|null $egresos_count
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Ingreso> $ingresos
|
||||
* @property-read int|null $ingresos_count
|
||||
* @property-read mixed $rendido
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Turno newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Turno newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Turno query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Turno whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Turno whereFecha($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Turno whereFondo($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Turno whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Turno whereNumeroCaja($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Turno whereNumeroTurno($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|Turno whereUpdatedAt($value)
|
||||
*/
|
||||
class Turno extends \Eloquent {}
|
||||
}
|
||||
|
||||
namespace App\Models{
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @property string $id
|
||||
* @property string $name
|
||||
* @property string $email
|
||||
* @property \Illuminate\Support\Carbon|null $email_verified_at
|
||||
* @property string $password
|
||||
* @property string|null $remember_token
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||
* @property-read \Illuminate\Notifications\DatabaseNotificationCollection<int, \Illuminate\Notifications\DatabaseNotification> $notifications
|
||||
* @property-read int|null $notifications_count
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Role> $roles
|
||||
* @property-read int|null $roles_count
|
||||
* @method static \Database\Factories\UserFactory factory($count = null, $state = [])
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|User newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|User newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|User query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|User whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|User whereEmail($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|User whereEmailVerifiedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|User whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|User whereName($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|User wherePassword($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|User whereRememberToken($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder<static>|User whereUpdatedAt($value)
|
||||
*/
|
||||
class User extends \Eloquent {}
|
||||
}
|
||||
|
||||
33
app/Console/Commands/CreateAdmin.php
Normal file
33
app/Console/Commands/CreateAdmin.php
Normal 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");
|
||||
}
|
||||
}
|
||||
10
app/Enums/RoleName.php
Normal file
10
app/Enums/RoleName.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
|
||||
enum RoleName: string
|
||||
{
|
||||
case SuperAdmin = 'superadmin';
|
||||
case Admin = 'admin';
|
||||
case User = 'user';
|
||||
}
|
||||
11
app/Enums/TipoDocumento.php
Normal file
11
app/Enums/TipoDocumento.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
|
||||
enum TipoDocumento: string
|
||||
{
|
||||
case TarjetasCredito = 'Tarjetas de Credito';
|
||||
case TarjetasDebito = 'Tarjetas de Debito';
|
||||
case ChequesDia = 'Cheques al Dia';
|
||||
case Retiro = 'Retiro';
|
||||
}
|
||||
19
app/Enums/TipoEgreso.php
Normal file
19
app/Enums/TipoEgreso.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
|
||||
enum TipoEgreso: string
|
||||
{
|
||||
case FacturaMateriaPrima = 'Factura Materia Prima';
|
||||
case FacturaGastosGenerales = 'Factura Gastos Generales';
|
||||
case BoletaMateriaPrima = 'Boleta Materia Prima';
|
||||
case BoletaGastosGenerales = 'Boleta Gastos Generales';
|
||||
case ValeMateriaPrima = 'Vale Materia Prima';
|
||||
case ValeGastosGenerales = 'Vale Gastos Generales';
|
||||
case GuiaMateriaPrima = 'Guía Materia Prima';
|
||||
case AnticipoArriendo = 'Anticipo Arriendo';
|
||||
case AnticipoPersonal = 'Anticipo Personal';
|
||||
case PagoPartime = 'Pago Partime';
|
||||
case RetirosGerencia = 'Retiros Gerencia';
|
||||
case Otro = 'Otro';
|
||||
}
|
||||
11
app/Enums/TipoGastoCuentaCorriente.php
Normal file
11
app/Enums/TipoGastoCuentaCorriente.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
|
||||
enum TipoGastoCuentaCorriente: string
|
||||
{
|
||||
case Factura = 'Factura';
|
||||
case Boleta = 'Boleta';
|
||||
case SinRespaldo = 'Sin Respaldo';
|
||||
case Guias = 'Guias';
|
||||
}
|
||||
13
app/Enums/TipoIngreso.php
Normal file
13
app/Enums/TipoIngreso.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
|
||||
enum TipoIngreso: string
|
||||
{
|
||||
case BoletasElectronicas = 'Boletas Electrónicas';
|
||||
case BoletasFiscales = 'Boletas Fiscales';
|
||||
case BoletasManuales = 'Boletas Manuales';
|
||||
case Facturas = 'Facturas';
|
||||
case Guias = 'Guias';
|
||||
case BoletaExenta = 'Boleta Exenta';
|
||||
}
|
||||
20
app/Http/Controllers/Auth/LogoutController.php
Normal file
20
app/Http/Controllers/Auth/LogoutController.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class LogoutController extends Controller
|
||||
{
|
||||
public function __invoke(Request $request)
|
||||
{
|
||||
Auth::logout();
|
||||
|
||||
$request->session()->invalidate();
|
||||
$request->session()->regenerateToken();
|
||||
|
||||
return redirect('/');
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Auth\Events\Verified;
|
||||
use Illuminate\Foundation\Auth\EmailVerificationRequest;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
|
||||
class VerifyEmailController extends Controller
|
||||
{
|
||||
/**
|
||||
* Mark the authenticated user's email address as verified.
|
||||
*/
|
||||
public function __invoke(EmailVerificationRequest $request): RedirectResponse
|
||||
{
|
||||
if ($request->user()->hasVerifiedEmail()) {
|
||||
return redirect()->intended(route('dashboard', absolute: false).'?verified=1');
|
||||
}
|
||||
|
||||
if ($request->user()->markEmailAsVerified()) {
|
||||
event(new Verified($request->user()));
|
||||
}
|
||||
|
||||
return redirect()->intended(route('dashboard', absolute: false).'?verified=1');
|
||||
}
|
||||
}
|
||||
@@ -4,9 +4,9 @@ namespace App\Jobs;
|
||||
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Queue\Queueable;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Log;
|
||||
|
||||
class QueueTest implements ShouldQueue
|
||||
class PruebaJob implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
@@ -16,6 +16,6 @@ class QueueTest implements ShouldQueue
|
||||
|
||||
public function handle(): void
|
||||
{
|
||||
Log::info("Probando que la queue funciona correctamente");
|
||||
Log::info("Prueba de un JOB!");
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Actions;
|
||||
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
|
||||
class Logout
|
||||
{
|
||||
/**
|
||||
* Log the current user out of the application.
|
||||
*/
|
||||
public function __invoke(): void
|
||||
{
|
||||
Auth::guard('web')->logout();
|
||||
|
||||
Session::invalidate();
|
||||
Session::regenerateToken();
|
||||
}
|
||||
}
|
||||
44
app/Livewire/Auth/ForgotPassword.php
Normal file
44
app/Livewire/Auth/ForgotPassword.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Auth;
|
||||
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Component;
|
||||
use TallStackUi\Traits\Interactions;
|
||||
|
||||
#[Layout('components.layouts.login')]
|
||||
class ForgotPassword extends Component
|
||||
{
|
||||
use Interactions;
|
||||
|
||||
#[Validate('required|email')]
|
||||
public $email = '';
|
||||
|
||||
public function render(): View
|
||||
{
|
||||
return view('livewire.auth.forgot-password');
|
||||
}
|
||||
|
||||
public function recover(): void
|
||||
{
|
||||
$this->validate();
|
||||
|
||||
$status = Password::sendResetLink(['email' => $this->email]);
|
||||
|
||||
if ($status === Password::RESET_LINK_SENT) {
|
||||
$this->dialog()->success('Correo enviado', __($status))
|
||||
->confirm(method: 'redirectToLogin')
|
||||
->send();
|
||||
} else {
|
||||
$this->dialog()->error('Error', __($status))->send();
|
||||
}
|
||||
}
|
||||
|
||||
public function redirectToLogin(): void
|
||||
{
|
||||
$this->redirect(route('login'));
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Forms;
|
||||
namespace App\Livewire\Auth;
|
||||
|
||||
use Illuminate\Auth\Events\Lockout;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\RateLimiter;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Form;
|
||||
use Livewire\Component;
|
||||
|
||||
class LoginForm extends Form
|
||||
#[Layout('components.layouts.login')]
|
||||
class Login extends Component
|
||||
{
|
||||
#[Validate('required|string|email')]
|
||||
public string $email = '';
|
||||
public $email = '';
|
||||
|
||||
#[Validate('required|string')]
|
||||
public string $password = '';
|
||||
@@ -21,29 +25,36 @@ class LoginForm extends Form
|
||||
#[Validate('boolean')]
|
||||
public bool $remember = false;
|
||||
|
||||
/**
|
||||
* Attempt to authenticate the request's credentials.
|
||||
*
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
public function render(): View
|
||||
{
|
||||
return view('livewire.auth.login');
|
||||
}
|
||||
|
||||
public function login(): void
|
||||
{
|
||||
Session::invalidate();
|
||||
|
||||
$this->authenticate();
|
||||
Session::regenerate();
|
||||
|
||||
$this->redirectIntended(route('home.index'));
|
||||
}
|
||||
|
||||
public function authenticate(): void
|
||||
{
|
||||
$this->validate();
|
||||
$this->ensureIsNotRateLimited();
|
||||
|
||||
if (! Auth::attempt($this->only(['email', 'password']), $this->remember)) {
|
||||
if (! Auth::attempt($this->only('email', 'password'), $this->remember)) {
|
||||
RateLimiter::hit($this->throttleKey());
|
||||
|
||||
throw ValidationException::withMessages([
|
||||
'form.email' => trans('auth.failed'),
|
||||
'email' => __('auth.failed'),
|
||||
]);
|
||||
}
|
||||
|
||||
RateLimiter::clear($this->throttleKey());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure the authentication request is not rate limited.
|
||||
*/
|
||||
protected function ensureIsNotRateLimited(): void
|
||||
{
|
||||
if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) {
|
||||
@@ -55,16 +66,13 @@ class LoginForm extends Form
|
||||
$seconds = RateLimiter::availableIn($this->throttleKey());
|
||||
|
||||
throw ValidationException::withMessages([
|
||||
'form.email' => trans('auth.throttle', [
|
||||
'email' => trans('auth.throttle', [
|
||||
'seconds' => $seconds,
|
||||
'minutes' => ceil($seconds / 60),
|
||||
]),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the authentication rate limiting throttle key.
|
||||
*/
|
||||
protected function throttleKey(): string
|
||||
{
|
||||
return Str::transliterate(Str::lower($this->email).'|'.request()->ip());
|
||||
67
app/Livewire/Auth/ResetPassword.php
Normal file
67
app/Livewire/Auth/ResetPassword.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Auth;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Auth\Events\PasswordReset;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Component;
|
||||
use TallStackUi\Traits\Interactions;
|
||||
|
||||
#[Layout('components.layouts.login')]
|
||||
class ResetPassword extends Component
|
||||
{
|
||||
use Interactions;
|
||||
|
||||
#[Url]
|
||||
#[Validate('required|email')]
|
||||
public $email;
|
||||
|
||||
#[Validate('required')]
|
||||
public $token;
|
||||
|
||||
#[Validate('required|min:8|confirmed')]
|
||||
public $password;
|
||||
|
||||
#[Validate('required')]
|
||||
public $password_confirmation;
|
||||
|
||||
public function render(): View
|
||||
{
|
||||
return view('livewire.auth.reset-password');
|
||||
}
|
||||
|
||||
public function resetPassword(): void
|
||||
{
|
||||
$this->validate();
|
||||
|
||||
$status = Password::reset(
|
||||
[
|
||||
'email' => $this->email,
|
||||
'token' => $this->token,
|
||||
'password' => $this->password,
|
||||
'password_confirmation' => $this->password_confirmation,
|
||||
],
|
||||
function (User $user, string $password) {
|
||||
$user->forceFill(['password' => Hash::make($password)])->setRememberToken(Str::random(60));
|
||||
$user->save();
|
||||
event(new PasswordReset($user));
|
||||
}
|
||||
);
|
||||
|
||||
if ($status === Password::PASSWORD_RESET) {
|
||||
$this->toast()->success("Éxito", __($status))->flash()->send();
|
||||
$this->redirectRoute('login', navigate: true);
|
||||
} else {
|
||||
throw ValidationException::withMessages(['email' => __($status)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
131
app/Livewire/Cajas/Components/CalculoFondoComponent.php
Normal file
131
app/Livewire/Cajas/Components/CalculoFondoComponent.php
Normal file
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Cajas\Components;
|
||||
|
||||
use App\Enums\TipoDocumento;
|
||||
use App\Models\CalculoFondo;
|
||||
use App\Models\Documento;
|
||||
use App\Models\Turno;
|
||||
use Exception;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Number;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Livewire\Attributes\Computed;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Component;
|
||||
use Log;
|
||||
use TallStackUi\Traits\Interactions;
|
||||
|
||||
class CalculoFondoComponent extends Component
|
||||
{
|
||||
use Interactions;
|
||||
|
||||
public Turno $turno;
|
||||
|
||||
#[Validate('required|numeric')]
|
||||
public $fondo = null;
|
||||
|
||||
#[Validate('nullable')]
|
||||
public $descripcion = null;
|
||||
|
||||
#[Validate('required|numeric')]
|
||||
public $valor = null;
|
||||
|
||||
public $currentCalculo = null;
|
||||
|
||||
public function mount()
|
||||
{
|
||||
$this->fondo = $this->turno->fondo;
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
{
|
||||
return view('livewire.cajas.components.calculo-fondo-component');
|
||||
}
|
||||
|
||||
public function updatedFondo(): void
|
||||
{
|
||||
$this->validateOnly('fondo');
|
||||
$this->turno->update(['fondo' => $this->fondo]);
|
||||
}
|
||||
|
||||
public function save(): void
|
||||
{
|
||||
$this->validateOnly('descripcion');
|
||||
$this->validateOnly('valor');
|
||||
|
||||
if ($this->currentCalculo) {
|
||||
CalculoFondo::where('id', $this->currentCalculo)->update([
|
||||
'descripcion' => $this->descripcion,
|
||||
'valor' => $this->valor,
|
||||
]);
|
||||
} else {
|
||||
$this->turno->calculosFondo()->create([
|
||||
'descripcion' => $this->descripcion,
|
||||
'valor' => $this->valor,
|
||||
]);
|
||||
}
|
||||
|
||||
if ($this->currentCalculo) {
|
||||
$this->toast()->success('Exito!', 'Registro modificado correctamente')->send();
|
||||
} else {
|
||||
$this->toast()->success('Exito!', 'Registro guardado correctamente')->send();
|
||||
}
|
||||
|
||||
$this->currentCalculo = null;
|
||||
$this->descripcion = null;
|
||||
$this->valor = null;
|
||||
|
||||
$this->dispatch('updated_totals');
|
||||
}
|
||||
|
||||
public function edit($id): void
|
||||
{
|
||||
$this->currentCalculo = $id;
|
||||
$calculo = CalculoFondo::find($id);
|
||||
|
||||
$this->descripcion = $calculo->descripcion;
|
||||
$this->valor = $calculo->valor;
|
||||
}
|
||||
|
||||
public function confirmDelete($id): void
|
||||
{
|
||||
$this->dialog()->question('¿Esta seguro de eliminar este registro?', 'No podrá recuperarlo')
|
||||
->confirm('Eliminar Registro', method: 'delete', params: $id)
|
||||
->cancel()
|
||||
->send();
|
||||
}
|
||||
|
||||
public function delete($id): void
|
||||
{
|
||||
CalculoFondo::where('id', $id)->delete();
|
||||
|
||||
$this->toast()->success('Registro eliminado correctamente')->send();
|
||||
$this->dispatch('updated_totals');
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function headers(): array
|
||||
{
|
||||
return [
|
||||
['index' => 'valor', 'label' => 'Total'],
|
||||
['index' => 'descripcion', 'label' => 'Descripción'],
|
||||
['index' => 'action', 'label' => 'Acciones'],
|
||||
];
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function rows(): Collection
|
||||
{
|
||||
return $this->turno->calculosFondo()
|
||||
->orderBy('created_at', 'asc')
|
||||
->get();
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function totalCalculo(): int
|
||||
{
|
||||
return $this->turno->calculosFondo()->sum('valor');
|
||||
}
|
||||
}
|
||||
130
app/Livewire/Cajas/Components/DocumentosComponent.php
Normal file
130
app/Livewire/Cajas/Components/DocumentosComponent.php
Normal file
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Cajas\Components;
|
||||
|
||||
use App\Enums\TipoDocumento;
|
||||
use App\Models\Documento;
|
||||
use App\Models\Turno;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Number;
|
||||
use Livewire\Attributes\Computed;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Component;
|
||||
use TallStackUi\Traits\Interactions;
|
||||
|
||||
class DocumentosComponent extends Component
|
||||
{
|
||||
use Interactions;
|
||||
|
||||
public Turno $turno;
|
||||
|
||||
#[Validate('required')]
|
||||
public $tipo = null;
|
||||
|
||||
#[Validate('nullable')]
|
||||
public $descripcion = null;
|
||||
|
||||
#[Validate('required|numeric')]
|
||||
public $valor = null;
|
||||
|
||||
public $currentDocumento = null;
|
||||
|
||||
public function mount(): void
|
||||
{
|
||||
$this->tipo = TipoDocumento::cases()[0];
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
{
|
||||
return view('livewire.cajas.components.documentos-component');
|
||||
}
|
||||
|
||||
public function save(): void
|
||||
{
|
||||
$this->validate();
|
||||
|
||||
if ($this->currentDocumento) {
|
||||
Documento::where('id', $this->currentDocumento)->update([
|
||||
'tipo_documento' => $this->tipo,
|
||||
'descripcion' => $this->descripcion,
|
||||
'valor' => $this->valor,
|
||||
]);
|
||||
} else {
|
||||
$this->turno->documentos()->create([
|
||||
'tipo_documento' => $this->tipo,
|
||||
'descripcion' => $this->descripcion,
|
||||
'valor' => $this->valor,
|
||||
]);
|
||||
}
|
||||
|
||||
if ($this->currentDocumento) {
|
||||
$this->toast()->success('Exito!', 'Documento modificado correctamente')->send();
|
||||
} else {
|
||||
$this->toast()->success('Exito!', 'Documento guardado correctamente')->send();
|
||||
}
|
||||
|
||||
$this->currentDocumento = null;
|
||||
$this->descripcion = null;
|
||||
$this->valor = null;
|
||||
|
||||
$this->dispatch('updated_totals');
|
||||
}
|
||||
|
||||
public function edit($id): void
|
||||
{
|
||||
$this->currentDocumento = $id;
|
||||
$documento = Documento::find($id);
|
||||
|
||||
$this->tipo = $documento->tipo_documento;
|
||||
$this->descripcion = $documento->descripcion;
|
||||
$this->valor = $documento->valor;
|
||||
}
|
||||
|
||||
public function confirmDelete($id): void
|
||||
{
|
||||
$this->dialog()->question('¿Esta seguro de eliminar este documento?', 'No podrá recuperarlo')
|
||||
->confirm('Eliminar Documento', method: 'delete', params: $id)
|
||||
->cancel()
|
||||
->send();
|
||||
}
|
||||
|
||||
public function delete($id): void
|
||||
{
|
||||
Documento::where('id', $id)->delete();
|
||||
|
||||
$this->toast()->success('Documento eliminado correctamente')->send();
|
||||
$this->dispatch('updated_totals');
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function headers(): array
|
||||
{
|
||||
return [
|
||||
['index' => 'tipo_documento', 'label' => 'Tipo Documento'],
|
||||
['index' => 'descripcion', 'label' => 'Descripción'],
|
||||
['index' => 'valor', 'label' => 'Total'],
|
||||
['index' => 'action', 'label' => 'Acciones'],
|
||||
];
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function rows(): Collection
|
||||
{
|
||||
return $this->turno->documentos()
|
||||
->orderBy('created_at', 'asc')
|
||||
->get();
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function tipos(): array
|
||||
{
|
||||
return TipoDocumento::cases();
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function totalDocumentos(): string
|
||||
{
|
||||
return Number::currency($this->turno->documentos()->sum('valor'));
|
||||
}
|
||||
}
|
||||
96
app/Livewire/Cajas/Components/EfectivoComponent.php
Normal file
96
app/Livewire/Cajas/Components/EfectivoComponent.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Cajas\Components;
|
||||
|
||||
use App\Enums\TipoDocumento;
|
||||
use App\Models\CalculoFondo;
|
||||
use App\Models\Documento;
|
||||
use App\Models\Turno;
|
||||
use Exception;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Number;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Livewire\Attributes\Computed;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Component;
|
||||
use Log;
|
||||
use TallStackUi\Traits\Interactions;
|
||||
|
||||
class EfectivoComponent extends Component
|
||||
{
|
||||
use Interactions;
|
||||
|
||||
public Turno $turno;
|
||||
|
||||
#[Validate('required|numeric')]
|
||||
public $veinte_mil = 0;
|
||||
#[Validate('required|numeric')]
|
||||
public $diez_mil = 0;
|
||||
#[Validate('required|numeric')]
|
||||
public $cinco_mil = 0;
|
||||
#[Validate('required|numeric')]
|
||||
public $dos_mil = 0;
|
||||
#[Validate('required|numeric')]
|
||||
public $mil = 0;
|
||||
#[Validate('required|numeric')]
|
||||
public $quinientos = 0;
|
||||
#[Validate('required|numeric')]
|
||||
public $cien = 0;
|
||||
#[Validate('required|numeric')]
|
||||
public $cincuenta = 0;
|
||||
#[Validate('required|numeric')]
|
||||
public $diez = 0;
|
||||
|
||||
public function mount(): void
|
||||
{
|
||||
$efectivo = $this->turno->efectivo()->first();
|
||||
$this->veinte_mil = $efectivo->veinte_mil;
|
||||
$this->diez_mil = $efectivo->diez_mil;
|
||||
$this->cinco_mil = $efectivo->cinco_mil;
|
||||
$this->dos_mil = $efectivo->dos_mil;
|
||||
$this->mil = $efectivo->mil;
|
||||
$this->quinientos = $efectivo->quinientos;
|
||||
$this->cien = $efectivo->cien;
|
||||
$this->cincuenta = $efectivo->cincuenta;
|
||||
$this->diez = $efectivo->diez;
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
{
|
||||
return view('livewire.cajas.components.efectivo-component');
|
||||
}
|
||||
|
||||
public function updated($attribute): void
|
||||
{
|
||||
$this->validateOnly($attribute);
|
||||
|
||||
if ($attribute === 'veinte_mil') {
|
||||
$this->turno->efectivo()->first()->update(['veinte_mil' => $this->veinte_mil]);
|
||||
} elseif ($attribute === 'diez_mil') {
|
||||
$this->turno->efectivo()->first()->update(['diez_mil' => $this->diez_mil]);
|
||||
} elseif ($attribute === 'cinco_mil') {
|
||||
$this->turno->efectivo()->first()->update(['cinco_mil' => $this->cinco_mil]);
|
||||
} elseif ($attribute === 'dos_mil') {
|
||||
$this->turno->efectivo()->first()->update(['dos_mil' => $this->dos_mil]);
|
||||
} elseif ($attribute === 'mil') {
|
||||
$this->turno->efectivo()->first()->update(['mil' => $this->mil]);
|
||||
} elseif ($attribute === 'quinientos') {
|
||||
$this->turno->efectivo()->first()->update(['quinientos' => $this->quinientos]);
|
||||
} elseif ($attribute === 'cien') {
|
||||
$this->turno->efectivo()->first()->update(['cien' => $this->cien]);
|
||||
} elseif ($attribute === 'cincuenta') {
|
||||
$this->turno->efectivo()->first()->update(['cincuenta' => $this->cincuenta]);
|
||||
} elseif ($attribute === 'diez') {
|
||||
$this->turno->efectivo()->first()->update(['diez' => $this->diez]);
|
||||
}
|
||||
|
||||
$this->dispatch('updated_totals');
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function totalEfectivo(): int
|
||||
{
|
||||
return $this->turno->efectivo()->first()->total;
|
||||
}
|
||||
}
|
||||
141
app/Livewire/Cajas/Components/EgresosComponent.php
Normal file
141
app/Livewire/Cajas/Components/EgresosComponent.php
Normal file
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Cajas\Components;
|
||||
|
||||
use App\Enums\TipoEgreso;
|
||||
use App\Enums\TipoIngreso;
|
||||
use App\Models\Egreso;
|
||||
use App\Models\Ingreso;
|
||||
use App\Models\Turno;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Number;
|
||||
use Livewire\Attributes\Computed;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Component;
|
||||
use TallStackUi\Traits\Interactions;
|
||||
|
||||
class EgresosComponent extends Component
|
||||
{
|
||||
use Interactions;
|
||||
|
||||
public Turno $turno;
|
||||
|
||||
#[Validate('required')]
|
||||
public $tipo = null;
|
||||
|
||||
#[Validate('nullable')]
|
||||
public $numero = null;
|
||||
|
||||
#[Validate('nullable')]
|
||||
public $descripcion = null;
|
||||
|
||||
#[Validate('required|numeric')]
|
||||
public $valor = null;
|
||||
|
||||
public $currentEgreso = null;
|
||||
|
||||
public function mount(): void
|
||||
{
|
||||
$this->tipo = TipoEgreso::cases()[0];
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
{
|
||||
return view('livewire.cajas.components.egresos-component');
|
||||
}
|
||||
|
||||
public function save(): void
|
||||
{
|
||||
$this->validate();
|
||||
|
||||
if ($this->currentEgreso) {
|
||||
Egreso::where('id', $this->currentEgreso)->update([
|
||||
'tipo_egreso' => $this->tipo,
|
||||
'numero' => $this->numero,
|
||||
'descripcion' => $this->descripcion,
|
||||
'valor' => $this->valor,
|
||||
]);
|
||||
} else {
|
||||
$this->turno->egresos()->create([
|
||||
'tipo_egreso' => $this->tipo,
|
||||
'numero' => $this->numero,
|
||||
'descripcion' => $this->descripcion,
|
||||
'valor' => $this->valor,
|
||||
]);
|
||||
}
|
||||
|
||||
if ($this->currentEgreso) {
|
||||
$this->toast()->success('Exito!', 'Egreso modificado correctamente')->send();
|
||||
} else {
|
||||
$this->toast()->success('Exito!', 'Egreso guardado correctamente')->send();
|
||||
}
|
||||
|
||||
$this->currentEgreso = null;
|
||||
$this->numero = null;
|
||||
$this->descripcion = null;
|
||||
$this->valor = null;
|
||||
|
||||
$this->dispatch('updated_totals');
|
||||
}
|
||||
|
||||
public function edit($id): void
|
||||
{
|
||||
$this->currentEgreso = $id;
|
||||
$egreso = Egreso::find($id);
|
||||
|
||||
$this->tipo = $egreso->tipo_egreso;
|
||||
$this->numero = $egreso->numero;
|
||||
$this->descripcion = $egreso->descripcion;
|
||||
$this->valor = $egreso->valor;
|
||||
}
|
||||
|
||||
public function confirmDelete($id): void
|
||||
{
|
||||
$this->dialog()->question('¿Esta seguro de eliminar este egreso?', 'No podrá recuperarlo')
|
||||
->confirm('Eliminar Egreso', method: 'delete', params: $id)
|
||||
->cancel()
|
||||
->send();
|
||||
}
|
||||
|
||||
public function delete($id): void
|
||||
{
|
||||
Egreso::where('id', $id)->delete();
|
||||
|
||||
$this->toast()->success('Egreso eliminado correctamente')->send();
|
||||
$this->dispatch('updated_totals');
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function headers(): array
|
||||
{
|
||||
return [
|
||||
['index' => 'tipo_egreso', 'label' => 'Tipo Egreso'],
|
||||
['index' => 'numero', 'label' => 'Numero Documento'],
|
||||
['index' => 'descripcion', 'label' => 'Descripción'],
|
||||
['index' => 'valor', 'label' => 'Total'],
|
||||
['index' => 'action', 'label' => 'Acciones'],
|
||||
];
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function rows(): Collection
|
||||
{
|
||||
return $this->turno->egresos()
|
||||
->orderBy('created_at', 'asc')
|
||||
->get();
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function tipos(): array
|
||||
{
|
||||
return TipoEgreso::cases();
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function totalEgresos(): string
|
||||
{
|
||||
return Number::currency($this->turno->egresos()->sum('valor'));
|
||||
}
|
||||
}
|
||||
143
app/Livewire/Cajas/Components/IngresosComponent.php
Normal file
143
app/Livewire/Cajas/Components/IngresosComponent.php
Normal file
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Cajas\Components;
|
||||
|
||||
use App\Enums\TipoIngreso;
|
||||
use App\Models\Ingreso;
|
||||
use App\Models\Turno;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Number;
|
||||
use Livewire\Attributes\Computed;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Component;
|
||||
use TallStackUi\Traits\Interactions;
|
||||
|
||||
class IngresosComponent extends Component
|
||||
{
|
||||
use Interactions;
|
||||
|
||||
public Turno $turno;
|
||||
|
||||
#[Validate('required')]
|
||||
public $tipo = null;
|
||||
|
||||
#[Validate('required|numeric')]
|
||||
public $ingreso_inicial = null;
|
||||
|
||||
#[Validate('required|numeric')]
|
||||
public $ingreso_final = null;
|
||||
|
||||
#[Validate('required|numeric')]
|
||||
public $total = null;
|
||||
|
||||
public $currentIngreso = null;
|
||||
|
||||
public function mount(): void
|
||||
{
|
||||
$this->tipo = TipoIngreso::cases()[0];
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
{
|
||||
return view('livewire.cajas.components.ingresos-component');
|
||||
}
|
||||
|
||||
public function save(): void
|
||||
{
|
||||
$this->validate();
|
||||
|
||||
if ($this->currentIngreso) {
|
||||
Ingreso::where('id', $this->currentIngreso)->update([
|
||||
'tipo_ingreso' => $this->tipo,
|
||||
'numero' => 0,
|
||||
'numero_z' => 0,
|
||||
'ingreso_inicial' => $this->ingreso_inicial,
|
||||
'ingreso_final' => $this->ingreso_final,
|
||||
'total' => $this->total,
|
||||
]);
|
||||
} else {
|
||||
$this->turno->ingresos()->create([
|
||||
'tipo_ingreso' => $this->tipo,
|
||||
'numero' => 0,
|
||||
'numero_z' => 0,
|
||||
'ingreso_inicial' => $this->ingreso_inicial,
|
||||
'ingreso_final' => $this->ingreso_final,
|
||||
'total' => $this->total,
|
||||
]);
|
||||
}
|
||||
|
||||
if ($this->currentIngreso) {
|
||||
$this->toast()->success('Exito!', 'Ingreso modificado correctamente')->send();
|
||||
} else {
|
||||
$this->toast()->success('Exito!', 'Ingreso guardado correctamente')->send();
|
||||
}
|
||||
|
||||
$this->currentIngreso = null;
|
||||
$this->ingreso_inicial = null;
|
||||
$this->ingreso_final = null;
|
||||
$this->total = null;
|
||||
|
||||
$this->dispatch('updated_totals');
|
||||
}
|
||||
|
||||
public function edit($id): void
|
||||
{
|
||||
$this->currentIngreso = $id;
|
||||
$ingreso = Ingreso::find($id);
|
||||
|
||||
$this->tipo = $ingreso->tipo_ingreso;
|
||||
$this->ingreso_inicial = $ingreso->ingreso_inicial;
|
||||
$this->ingreso_final = $ingreso->ingreso_final;
|
||||
$this->total = $ingreso->total;
|
||||
}
|
||||
|
||||
public function confirmDelete($id): void
|
||||
{
|
||||
$this->dialog()->question('¿Esta seguro de eliminar este ingreso?', 'No podrá recuperarlo')
|
||||
->confirm('Eliminar Ingreso', method: 'delete', params: $id)
|
||||
->cancel()
|
||||
->send();
|
||||
}
|
||||
|
||||
public function delete($id): void
|
||||
{
|
||||
Ingreso::where('id', $id)->delete();
|
||||
|
||||
$this->toast()->success('Ingreso eliminado correctamente')->send();
|
||||
$this->dispatch('updated_totals');
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function headers(): array
|
||||
{
|
||||
return [
|
||||
['index' => 'tipo_ingreso', 'label' => 'Tipo Documento'],
|
||||
['index' => 'ingreso_inicial', 'label' => 'Documento Inicial'],
|
||||
['index' => 'ingreso_final', 'label' => 'Documento Final'],
|
||||
['index' => 'total', 'label' => 'Total'],
|
||||
['index' => 'action', 'label' => 'Acciones'],
|
||||
];
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function rows(): Collection
|
||||
{
|
||||
return $this->turno->ingresos()
|
||||
->orderBy('created_at', 'desc')
|
||||
->get();
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function tipos(): array
|
||||
{
|
||||
return TipoIngreso::cases();
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function totalIngresos(): string
|
||||
{
|
||||
return Number::currency($this->turno->ingresos()->sum('total'));
|
||||
}
|
||||
}
|
||||
68
app/Livewire/Cajas/Edit.php
Normal file
68
app/Livewire/Cajas/Edit.php
Normal file
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Cajas;
|
||||
|
||||
use App\Models\Turno;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Number;
|
||||
use Livewire\Attributes\Computed;
|
||||
use Livewire\Attributes\On;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Component;
|
||||
|
||||
class Edit extends Component
|
||||
{
|
||||
public Turno $turno;
|
||||
|
||||
#[Url]
|
||||
public $tab = 'Ingresos';
|
||||
|
||||
public function render(): View
|
||||
{
|
||||
return view('livewire.cajas.edit');
|
||||
}
|
||||
|
||||
#[On('updated_totals')]
|
||||
public function recalculateTotals(): void
|
||||
{
|
||||
unset($this->totalIngresos);
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function totalEfectivo()
|
||||
{
|
||||
return $this->turno->efectivo()->first()?->total ?? 0;
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function totalEgresos()
|
||||
{
|
||||
return $this->turno->egresos()->sum('valor');
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function totalDocumentos()
|
||||
{
|
||||
return $this->turno->documentos()->sum('valor');
|
||||
}
|
||||
|
||||
|
||||
#[Computed]
|
||||
public function rendido()
|
||||
{
|
||||
return $this->turno->rendido;
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function debeRendir()
|
||||
{
|
||||
return $this->turno->ingresos()->sum('total');
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function diferencia()
|
||||
{
|
||||
return $this->turno->arqueo;
|
||||
}
|
||||
|
||||
}
|
||||
150
app/Livewire/Cajas/Index.php
Normal file
150
app/Livewire/Cajas/Index.php
Normal file
@@ -0,0 +1,150 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Cajas;
|
||||
|
||||
use App\Models\Turno;
|
||||
use Carbon\Carbon;
|
||||
use Exception;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Pagination\LengthAwarePaginator;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Livewire\Attributes\Computed;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
use Log;
|
||||
use TallStackUi\Traits\Interactions;
|
||||
|
||||
class Index extends Component
|
||||
{
|
||||
use Interactions, WithPagination;
|
||||
|
||||
public $searchFecha = null;
|
||||
|
||||
public $modal = false;
|
||||
|
||||
public $fecha = null;
|
||||
|
||||
public $caja = null;
|
||||
|
||||
public $turno = null;
|
||||
|
||||
public function render(): View
|
||||
{
|
||||
return view('livewire.cajas.index');
|
||||
}
|
||||
|
||||
public function createTurno(): void
|
||||
{
|
||||
$this->modal = true;
|
||||
$this->fecha = now()->format('Y-m-d');
|
||||
$this->caja = 1;
|
||||
|
||||
if (Turno::where('fecha', $this->fecha)->exists()) {
|
||||
$this->turno = Turno::where('fecha', $this->fecha)->max('numero_turno') + 1;
|
||||
} else {
|
||||
$this->turno = 1;
|
||||
}
|
||||
}
|
||||
|
||||
public function storeTurno(): void
|
||||
{
|
||||
$this->validate([
|
||||
'fecha' => 'required|date',
|
||||
'caja' => 'required|gte:1|lte:10',
|
||||
'turno' => 'required|gte:1|lte:10',
|
||||
]);
|
||||
|
||||
$exists = Turno::where('fecha', $this->fecha)
|
||||
->where('numero_caja', $this->caja)
|
||||
->where('numero_turno', $this->turno)
|
||||
->exists();
|
||||
|
||||
if ($exists) {
|
||||
throw ValidationException::withMessages(['fecha' => 'Ya hay un registro para esta fecha, caja y turno']);
|
||||
}
|
||||
|
||||
$turno = Turno::create([
|
||||
'fecha' => $this->fecha,
|
||||
'numero_caja' => $this->caja,
|
||||
'numero_turno' => $this->turno,
|
||||
]);
|
||||
|
||||
$turno->efectivo()->create([
|
||||
'veinte_mil' => 0,
|
||||
'diez_mil' => 0,
|
||||
'cinco_mil' => 0,
|
||||
'dos_mil' => 0,
|
||||
'mil' => 0,
|
||||
'quinientos' => 0,
|
||||
'cien' => 0,
|
||||
'cincuenta' => 0,
|
||||
'diez' => 0,
|
||||
]);
|
||||
|
||||
$this->toast()->success("Éxito", "Caja registrada correctamente")->flash()->send();
|
||||
|
||||
$this->redirectRoute('cajas.edit', $turno, navigate: true);
|
||||
}
|
||||
|
||||
public function closeTurnoModal(): void
|
||||
{
|
||||
$this->modal = false;
|
||||
$this->fecha = null;
|
||||
$this->caja = null;
|
||||
$this->turno = null;
|
||||
|
||||
$this->clearValidation();
|
||||
}
|
||||
|
||||
public function confirmDelete($id): void
|
||||
{
|
||||
$this->dialog()->question('¿Esta seguro de eliminar este turno?',
|
||||
'Se eliminara este junto a los ingresos y egresos registrados')
|
||||
->confirm('Eliminar Turno', method: 'doDelete', params: $id)
|
||||
->cancel()
|
||||
->send();
|
||||
}
|
||||
|
||||
public function doDelete($id): void
|
||||
{
|
||||
Turno::find($id)->delete();
|
||||
|
||||
$this->toast()->success('Turno eliminado correctamente')->send();
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function headers(): array
|
||||
{
|
||||
return [
|
||||
['index' => 'fecha', 'label' => 'Fecha'],
|
||||
['index' => 'numero_caja', 'label' => 'Caja'],
|
||||
['index' => 'numero_turno', 'label' => 'Turno'],
|
||||
['index' => 'ingresos', 'label' => 'Ingresos'],
|
||||
['index' => 'egresos', 'label' => 'Egresos'],
|
||||
['index' => 'arqueo', 'label' => 'Arqueo'],
|
||||
['index' => 'action', 'label' => 'Acciones'],
|
||||
];
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function rows(): LengthAwarePaginator
|
||||
{
|
||||
return Turno::orderBy('fecha', 'desc')
|
||||
->orderBy('numero_caja', 'asc')
|
||||
->orderBy('numero_turno', 'asc')
|
||||
->when($this->searchFecha, function ($query) {
|
||||
if (!$this->searchFecha) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
$fecha = Carbon::parse($this->searchFecha);
|
||||
$query->whereDate('fecha', $fecha);
|
||||
} catch (Exception $exception) {
|
||||
// Pass nada que hacer
|
||||
}
|
||||
})
|
||||
->paginate();
|
||||
}
|
||||
}
|
||||
13
app/Livewire/Configuracion/Index.php
Normal file
13
app/Livewire/Configuracion/Index.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Configuracion;
|
||||
|
||||
use Livewire\Component;
|
||||
|
||||
class Index extends Component
|
||||
{
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.configuracion.index');
|
||||
}
|
||||
}
|
||||
13
app/Livewire/Home/Index.php
Normal file
13
app/Livewire/Home/Index.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Home;
|
||||
|
||||
use Livewire\Component;
|
||||
|
||||
class Index extends Component
|
||||
{
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.home.index');
|
||||
}
|
||||
}
|
||||
13
app/Livewire/Reportes/Index.php
Normal file
13
app/Livewire/Reportes/Index.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Reportes;
|
||||
|
||||
use Livewire\Component;
|
||||
|
||||
class Index extends Component
|
||||
{
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.reportes.index');
|
||||
}
|
||||
}
|
||||
130
app/Livewire/Usuarios/Edit.php
Normal file
130
app/Livewire/Usuarios/Edit.php
Normal file
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Usuarios;
|
||||
|
||||
use App\Enums\RoleName;
|
||||
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;
|
||||
use Livewire\Attributes\Computed;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Component;
|
||||
use TallStackUi\Traits\Interactions;
|
||||
|
||||
class Edit extends Component
|
||||
{
|
||||
use Interactions;
|
||||
|
||||
#[Locked]
|
||||
public ?User $user = null;
|
||||
|
||||
public $name = null;
|
||||
|
||||
public $email = null;
|
||||
|
||||
public $password = null;
|
||||
|
||||
public $password_confirmation = null;
|
||||
|
||||
public $roles = [];
|
||||
|
||||
public $change_password = false;
|
||||
|
||||
public function mount(): void
|
||||
{
|
||||
if ($this->user) {
|
||||
$this->name = $this->user->name;
|
||||
$this->email = $this->user->email;
|
||||
$this->roles = $this->user->roles()->pluck('id')->toArray();
|
||||
}
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
{
|
||||
return view('livewire.usuarios.edit');
|
||||
}
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'name' => 'required|string',
|
||||
'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',
|
||||
];
|
||||
}
|
||||
|
||||
public function save(): void
|
||||
{
|
||||
$this->validate();
|
||||
|
||||
if ($this->user) {
|
||||
$this->update();
|
||||
} else {
|
||||
$this->store();
|
||||
}
|
||||
|
||||
$this->redirectRoute('usuarios.index', navigate: true);
|
||||
}
|
||||
|
||||
public function update(): void
|
||||
{
|
||||
$this->authorize('update', $this->user);
|
||||
|
||||
$this->user->name = $this->name;
|
||||
$this->user->email = $this->email;
|
||||
|
||||
if ($this->change_password) {
|
||||
$this->user->password = Hash::make($this->password);
|
||||
}
|
||||
|
||||
$this->user->save();
|
||||
|
||||
$isSuperAdmin = $this->user->isAn(RoleName::SuperAdmin);
|
||||
if($isSuperAdmin) {
|
||||
$this->roles[] = Role::where('name', RoleName::SuperAdmin)->first()->id;
|
||||
}
|
||||
|
||||
$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,
|
||||
'password' => Hash::make($this->password),
|
||||
]);
|
||||
|
||||
$user->roles()->sync($this->roles);
|
||||
|
||||
$this->toast()->success("Éxito", "Usuario registrado correctamente")->flash()->send();
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function availableRoles(): Collection
|
||||
{
|
||||
if(Gate::allows('create-super-admin', User::class)) {
|
||||
return Role::all();
|
||||
} else {
|
||||
return Role::whereNot('name', RoleName::SuperAdmin)->get();
|
||||
}
|
||||
}
|
||||
}
|
||||
64
app/Livewire/Usuarios/Index.php
Normal file
64
app/Livewire/Usuarios/Index.php
Normal file
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire\Usuarios;
|
||||
|
||||
use App\Enums\RoleName;
|
||||
use App\Models\User;
|
||||
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Livewire\Attributes\Computed;
|
||||
use Livewire\Component;
|
||||
use TallStackUi\Traits\Interactions;
|
||||
|
||||
class Index extends Component
|
||||
{
|
||||
use Interactions;
|
||||
|
||||
public function render(): View
|
||||
{
|
||||
return view('livewire.usuarios.index');
|
||||
}
|
||||
|
||||
public function confirmDelete($id): void
|
||||
{
|
||||
$user = User::find($id);
|
||||
$this->authorize('delete', $user);
|
||||
|
||||
if ($user->roles()->where('name', RoleName::SuperAdmin)->exists()) {
|
||||
$this->toast()->error('Error', 'No se puede eliminar un super administrador')->send();
|
||||
return;
|
||||
}
|
||||
|
||||
$this->dialog()->question('¿Esta seguro de eliminar este usuario?', 'No podrá ser recuperado')
|
||||
->confirm('Eliminar Usuario', method: 'doDelete', params: $id)
|
||||
->cancel()
|
||||
->send();
|
||||
}
|
||||
|
||||
public function doDelete($id): void
|
||||
{
|
||||
$user = User::find($id);
|
||||
$this->authorize('delete', $user);
|
||||
|
||||
$user->delete();
|
||||
|
||||
$this->toast()->success('Usuario eliminado correctamente')->send();
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function headers(): array
|
||||
{
|
||||
return [
|
||||
['index' => 'name', 'label' => 'Nombre'],
|
||||
['index' => 'email', 'label' => 'Email'],
|
||||
['index' => 'roles', 'label' => 'Roles'],
|
||||
['index' => 'action', 'label' => 'Acciones'],
|
||||
];
|
||||
}
|
||||
|
||||
#[Computed]
|
||||
public function rows(): LengthAwarePaginator
|
||||
{
|
||||
return User::filterSuperadmin()->with('roles')->paginate();
|
||||
}
|
||||
}
|
||||
15
app/Models/CalculoFondo.php
Normal file
15
app/Models/CalculoFondo.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Concerns\HasUlids;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class CalculoFondo extends Model
|
||||
{
|
||||
use HasUlids;
|
||||
|
||||
protected $table = 'calculo_fondos';
|
||||
|
||||
protected $fillable = ['valor', 'descripcion'];
|
||||
}
|
||||
24
app/Models/Documento.php
Normal file
24
app/Models/Documento.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Enums\TipoDocumento;
|
||||
use Illuminate\Database\Eloquent\Concerns\HasUlids;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Documento extends Model
|
||||
{
|
||||
use HasUlids;
|
||||
|
||||
protected $table = 'documentos';
|
||||
|
||||
protected $casts = [
|
||||
'tipo_documento' => TipoDocumento::class,
|
||||
];
|
||||
|
||||
protected $fillable = [
|
||||
'tipo_documento',
|
||||
'valor',
|
||||
'descripcion'
|
||||
];
|
||||
}
|
||||
41
app/Models/Efectivo.php
Normal file
41
app/Models/Efectivo.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||
use Illuminate\Database\Eloquent\Concerns\HasUlids;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Efectivo extends Model
|
||||
{
|
||||
use HasUlids;
|
||||
|
||||
protected $table = 'efectivos';
|
||||
|
||||
protected $fillable = [
|
||||
'veinte_mil',
|
||||
'diez_mil',
|
||||
'cinco_mil',
|
||||
'dos_mil',
|
||||
'mil',
|
||||
'quinientos',
|
||||
'cien',
|
||||
'cincuenta',
|
||||
'diez',
|
||||
];
|
||||
|
||||
public function total(): Attribute
|
||||
{
|
||||
return Attribute::get(function () {
|
||||
return $this->veinte_mil
|
||||
+ $this->diez_mil
|
||||
+ $this->cinco_mil
|
||||
+ $this->dos_mil
|
||||
+ $this->mil
|
||||
+ $this->quinientos
|
||||
+ $this->cien
|
||||
+ $this->cincuenta
|
||||
+ $this->diez;
|
||||
});
|
||||
}
|
||||
}
|
||||
22
app/Models/Egreso.php
Normal file
22
app/Models/Egreso.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Enums\TipoEgreso;
|
||||
use Illuminate\Database\Eloquent\Concerns\HasUlids;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Egreso extends Model
|
||||
{
|
||||
use HasUlids;
|
||||
|
||||
protected $table = 'egresos';
|
||||
|
||||
protected $casts = [
|
||||
'tipo_egreso' => TipoEgreso::class,
|
||||
];
|
||||
|
||||
protected $fillable = [
|
||||
'tipo_egreso', 'numero', 'descripcion', 'valor'
|
||||
];
|
||||
}
|
||||
13
app/Models/EstadoResultado.php
Normal file
13
app/Models/EstadoResultado.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Concerns\HasUlids;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class EstadoResultado extends Model
|
||||
{
|
||||
use HasUlids;
|
||||
|
||||
protected $table = 'estados_resultado';
|
||||
}
|
||||
18
app/Models/GastoCuentaCorriente.php
Normal file
18
app/Models/GastoCuentaCorriente.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Enums\TipoGastoCuentaCorriente;
|
||||
use Illuminate\Database\Eloquent\Concerns\HasUlids;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class GastoCuentaCorriente extends Model
|
||||
{
|
||||
use HasUlids;
|
||||
|
||||
protected $table = 'gastos_cuenta_corriente';
|
||||
|
||||
protected $casts = [
|
||||
'tipo_gasto' => TipoGastoCuentaCorriente::class,
|
||||
];
|
||||
}
|
||||
22
app/Models/Ingreso.php
Normal file
22
app/Models/Ingreso.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Enums\TipoIngreso;
|
||||
use Illuminate\Database\Eloquent\Concerns\HasUlids;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Ingreso extends Model
|
||||
{
|
||||
use HasUlids;
|
||||
|
||||
protected $table = 'ingresos';
|
||||
|
||||
protected $casts = [
|
||||
'tipo_ingreso' => TipoIngreso::class,
|
||||
];
|
||||
|
||||
protected $fillable = [
|
||||
'numero', 'numero_z', 'ingreso_inicial', 'ingreso_final', 'total', 'tipo_ingreso', 'turno_id',
|
||||
];
|
||||
}
|
||||
22
app/Models/Role.php
Normal file
22
app/Models/Role.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Enums\RoleName;
|
||||
use Illuminate\Database\Eloquent\Concerns\HasUlids;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
|
||||
class Role extends Model
|
||||
{
|
||||
use HasUlids;
|
||||
|
||||
protected $table = 'roles';
|
||||
protected $fillable = ['name', 'title'];
|
||||
protected $casts = ['name' => RoleName::class];
|
||||
|
||||
public function users(): BelongsToMany
|
||||
{
|
||||
return $this->belongsToMany(User::class, 'user_roles', 'role_id', 'user_id');
|
||||
}
|
||||
}
|
||||
65
app/Models/Turno.php
Normal file
65
app/Models/Turno.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||
use Illuminate\Database\Eloquent\Concerns\HasUlids;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||
|
||||
class Turno extends Model
|
||||
{
|
||||
use HasUlids;
|
||||
|
||||
protected $table = 'turnos';
|
||||
|
||||
protected $fillable = ['fecha', 'numero_caja', 'numero_turno', 'fondo'];
|
||||
|
||||
protected $casts = [
|
||||
'fecha' => 'date',
|
||||
];
|
||||
|
||||
public function calculosFondo(): HasMany
|
||||
{
|
||||
return $this->hasMany(CalculoFondo::class, 'turno_id');
|
||||
}
|
||||
|
||||
public function rendido(): Attribute
|
||||
{
|
||||
return Attribute::get(function () {
|
||||
$documentos = $this->documentos()->sum('valor');
|
||||
$egresos = $this->egresos()->sum('valor');
|
||||
$efectivo = $this->efectivo()->first()?->total ?? 0;
|
||||
|
||||
return $documentos + $efectivo + $egresos;
|
||||
});
|
||||
}
|
||||
|
||||
public function documentos(): HasMany
|
||||
{
|
||||
return $this->hasMany(Documento::class, 'turno_id');
|
||||
}
|
||||
|
||||
public function egresos(): HasMany
|
||||
{
|
||||
return $this->hasMany(Egreso::class, 'turno_id');
|
||||
}
|
||||
|
||||
public function efectivo(): HasOne
|
||||
{
|
||||
return $this->hasOne(Efectivo::class, 'turno_id');
|
||||
}
|
||||
|
||||
public function arqueo(): Attribute
|
||||
{
|
||||
return Attribute::get(function () {
|
||||
return $this->rendido - $this->ingresos()->sum('total');
|
||||
});
|
||||
}
|
||||
|
||||
public function ingresos(): HasMany
|
||||
{
|
||||
return $this->hasMany(Ingreso::class, 'turno_id');
|
||||
}
|
||||
}
|
||||
@@ -2,42 +2,53 @@
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
// use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
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;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
|
||||
class User extends Authenticatable
|
||||
{
|
||||
/** @use HasFactory<\Database\Factories\UserFactory> */
|
||||
use HasFactory, Notifiable;
|
||||
use HasFactory, HasUlids, Notifiable;
|
||||
|
||||
protected $table = 'users';
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var list<string>
|
||||
*/
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'email',
|
||||
'password',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var list<string>
|
||||
*/
|
||||
protected $hidden = [
|
||||
'password',
|
||||
'remember_token',
|
||||
];
|
||||
|
||||
/**
|
||||
* Get the attributes that should be cast.
|
||||
*
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function roles(): BelongsToMany
|
||||
{
|
||||
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 [
|
||||
|
||||
74
app/Policies/UserPolicy.php
Normal file
74
app/Policies/UserPolicy.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Enums\RoleName;
|
||||
use App\Models\User;
|
||||
use Log;
|
||||
|
||||
class UserPolicy
|
||||
{
|
||||
public function before(User $user, string $ability): bool|null
|
||||
{
|
||||
if (!$user->isAn(RoleName::SuperAdmin, RoleName::Admin)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function viewAny(User $user): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function view(User $user, User $model): bool
|
||||
{
|
||||
if($model->isAn(RoleName::SuperAdmin)) {
|
||||
return $user->isAn(RoleName::SuperAdmin);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function create(User $user): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
public function delete(User $user, User $model): bool
|
||||
{
|
||||
if($model->isAn(RoleName::SuperAdmin)) {
|
||||
return $user->isAn(RoleName::SuperAdmin);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function restore(User $user, User $model): bool
|
||||
{
|
||||
if($model->isAn(RoleName::SuperAdmin)) {
|
||||
return $user->isAn(RoleName::SuperAdmin);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function forceDelete(User $user, User $model): bool
|
||||
{
|
||||
if($model->isAn(RoleName::SuperAdmin)) {
|
||||
return $user->isAn(RoleName::SuperAdmin);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -2,23 +2,31 @@
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Number;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use TallStackUi\Facades\TallStackUi;
|
||||
|
||||
class AppServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register any application services.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap any application services.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
//
|
||||
Model::shouldBeStrict(!app()->isProduction());
|
||||
Number::useLocale('es-CL');
|
||||
Number::useCurrency('CLP');
|
||||
|
||||
$this->personalize();
|
||||
}
|
||||
|
||||
public function personalize()
|
||||
{
|
||||
TallStackUi::personalize()
|
||||
->table()
|
||||
->block('table.td', 'dark:text-dark-300 whitespace-nowrap px-3 py-1 text-sm text-gray-500');
|
||||
}
|
||||
}
|
||||
|
||||
64
app/Providers/TelescopeServiceProvider.php
Normal file
64
app/Providers/TelescopeServiceProvider.php
Normal file
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Laravel\Telescope\IncomingEntry;
|
||||
use Laravel\Telescope\Telescope;
|
||||
use Laravel\Telescope\TelescopeApplicationServiceProvider;
|
||||
|
||||
class TelescopeServiceProvider extends TelescopeApplicationServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register any application services.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
// Telescope::night();
|
||||
|
||||
$this->hideSensitiveRequestDetails();
|
||||
|
||||
$isLocal = $this->app->environment('local');
|
||||
|
||||
Telescope::filter(function (IncomingEntry $entry) use ($isLocal) {
|
||||
return $isLocal ||
|
||||
$entry->isReportableException() ||
|
||||
$entry->isFailedRequest() ||
|
||||
$entry->isFailedJob() ||
|
||||
$entry->isScheduledTask() ||
|
||||
$entry->hasMonitoredTag();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent sensitive request details from being logged by Telescope.
|
||||
*/
|
||||
protected function hideSensitiveRequestDetails(): void
|
||||
{
|
||||
if ($this->app->environment('local')) {
|
||||
return;
|
||||
}
|
||||
|
||||
Telescope::hideRequestParameters(['_token']);
|
||||
|
||||
Telescope::hideRequestHeaders([
|
||||
'cookie',
|
||||
'x-csrf-token',
|
||||
'x-xsrf-token',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the Telescope gate.
|
||||
*
|
||||
* This gate determines who can access Telescope in non-local environments.
|
||||
*/
|
||||
protected function gate(): void
|
||||
{
|
||||
Gate::define('viewTelescope', function ($user) {
|
||||
return in_array($user->email, [
|
||||
//
|
||||
]);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Livewire\Volt\Volt;
|
||||
|
||||
class VoltServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register services.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap services.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
Volt::mount([
|
||||
config('livewire.view_path', resource_path('views/livewire')),
|
||||
resource_path('views/pages'),
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components;
|
||||
|
||||
use Illuminate\View\Component;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class AppLayout extends Component
|
||||
{
|
||||
/**
|
||||
* Get the view / contents that represents the component.
|
||||
*/
|
||||
public function render(): View
|
||||
{
|
||||
return view('layouts.app');
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components;
|
||||
|
||||
use Illuminate\View\Component;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class GuestLayout extends Component
|
||||
{
|
||||
/**
|
||||
* Get the view / contents that represents the component.
|
||||
*/
|
||||
public function render(): View
|
||||
{
|
||||
return view('layouts.guest');
|
||||
}
|
||||
}
|
||||
@@ -2,5 +2,5 @@
|
||||
|
||||
return [
|
||||
App\Providers\AppServiceProvider::class,
|
||||
App\Providers\VoltServiceProvider::class,
|
||||
App\Providers\TelescopeServiceProvider::class,
|
||||
];
|
||||
|
||||
76
compose.yml
76
compose.yml
@@ -1,10 +1,74 @@
|
||||
services:
|
||||
app:
|
||||
build: .
|
||||
laravel:
|
||||
build:
|
||||
context: .
|
||||
args:
|
||||
UID: 1000
|
||||
GID: 1000
|
||||
ports:
|
||||
- "80:80"
|
||||
volumes:
|
||||
- ./:/var/www/html
|
||||
|
||||
scheduler:
|
||||
build:
|
||||
context: .
|
||||
args:
|
||||
UID: 1000
|
||||
GID: 1000
|
||||
volumes:
|
||||
- .:/var/www/html
|
||||
user: www-data
|
||||
entrypoint: [ "php", "artisan", "schedule:work", "-v" ]
|
||||
|
||||
worker:
|
||||
build:
|
||||
context: .
|
||||
args:
|
||||
UID: 1000
|
||||
GID: 1000
|
||||
volumes:
|
||||
- .:/var/www/html
|
||||
user: www-data
|
||||
entrypoint: [ "php", "artisan", "queue:work", "-v" ]
|
||||
|
||||
vite:
|
||||
image: node:23
|
||||
ports:
|
||||
- "5173:5173"
|
||||
volumes:
|
||||
- ./:/app
|
||||
user: "1000:1000"
|
||||
working_dir: /app
|
||||
entrypoint: [ "npm", "run", "dev", "--", "--host" ]
|
||||
|
||||
mailpit:
|
||||
image: "axllent/mailpit:latest"
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "1025:1025"
|
||||
- "8025:8025"
|
||||
|
||||
postgres:
|
||||
image: postgres:17
|
||||
ports:
|
||||
- "5432:5432"
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
environment:
|
||||
DB_CONNECTION: sqlite
|
||||
DB_DATABASE: /var/www/html/database/database.sqlite
|
||||
APP_DEBUG: true
|
||||
APP_KEY: base64:T2XkMDMUm234YlwL6G7J3I9+5MXfkPwasdvgp10JjnU=
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: laravel
|
||||
POSTGRES_PASSWORD: secret
|
||||
|
||||
redis:
|
||||
image: redis:alpine
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "6379:6379"
|
||||
healthcheck:
|
||||
test: [ "CMD", "redis-cli", "ping" ]
|
||||
retries: 3
|
||||
timeout: 5s
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
|
||||
@@ -10,17 +10,19 @@
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^8.2",
|
||||
"laravel-lang/common": "^6.4",
|
||||
"laravel/framework": "^11.31",
|
||||
"laravel/octane": "^2.6",
|
||||
"laravel/telescope": "^5.2",
|
||||
"laravel/tinker": "^2.9",
|
||||
"livewire/livewire": "^3.4",
|
||||
"livewire/volt": "^1.0"
|
||||
"tallstackui/tallstackui": "^1.37"
|
||||
},
|
||||
"require-dev": {
|
||||
"barryvdh/laravel-debugbar": "^3.14",
|
||||
"barryvdh/laravel-ide-helper": "^3.4",
|
||||
"fakerphp/faker": "^1.23",
|
||||
"laravel/breeze": "^2.3",
|
||||
"laravel/pail": "^1.1",
|
||||
"laravel/pint": "^1.13",
|
||||
"laravel/sail": "^1.26",
|
||||
"mockery/mockery": "^1.6",
|
||||
"nunomaduro/collision": "^8.1",
|
||||
"pestphp/pest": "^3.7",
|
||||
@@ -44,7 +46,10 @@
|
||||
"@php artisan package:discover --ansi"
|
||||
],
|
||||
"post-update-cmd": [
|
||||
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
|
||||
"@php artisan vendor:publish --tag=laravel-assets --ansi --force",
|
||||
"@php artisan ide-helper:generate",
|
||||
"@php artisan ide-helper:meta",
|
||||
"@php artisan tallstackui:setup-icon --force --ansi"
|
||||
],
|
||||
"post-root-package-install": [
|
||||
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
||||
@@ -75,4 +80,4 @@
|
||||
},
|
||||
"minimum-stability": "stable",
|
||||
"prefer-stable": true
|
||||
}
|
||||
}
|
||||
|
||||
2893
composer.lock
generated
2893
composer.lock
generated
File diff suppressed because it is too large
Load Diff
337
config/ide-helper.php
Normal file
337
config/ide-helper.php
Normal file
@@ -0,0 +1,337 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Filename
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The default filename.
|
||||
|
|
||||
*/
|
||||
|
||||
'filename' => '_ide_helper.php',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Models filename
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The default filename for the models helper file.
|
||||
|
|
||||
*/
|
||||
|
||||
'models_filename' => '_ide_helper_models.php',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| PhpStorm meta filename
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| PhpStorm also supports the directory `.phpstorm.meta.php/` with arbitrary
|
||||
| files in it, should you need additional files for your project; e.g.
|
||||
| `.phpstorm.meta.php/laravel_ide_Helper.php'.
|
||||
|
|
||||
*/
|
||||
'meta_filename' => '.phpstorm.meta.php',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Fluent helpers
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Set to true to generate commonly used Fluent methods.
|
||||
|
|
||||
*/
|
||||
|
||||
'include_fluent' => false,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Factory builders
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Set to true to generate factory generators for better factory()
|
||||
| method auto-completion.
|
||||
|
|
||||
| Deprecated for Laravel 8 or latest.
|
||||
|
|
||||
*/
|
||||
|
||||
'include_factory_builders' => false,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Write model magic methods
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Set to false to disable write magic methods of model.
|
||||
|
|
||||
*/
|
||||
|
||||
'write_model_magic_where' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Write model external Eloquent builder methods
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Set to false to disable write external Eloquent builder methods.
|
||||
|
|
||||
*/
|
||||
|
||||
'write_model_external_builder_methods' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Write model relation count properties
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Set to false to disable writing of relation count properties to model DocBlocks.
|
||||
|
|
||||
*/
|
||||
|
||||
'write_model_relation_count_properties' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Write Eloquent model mixins
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This will add the necessary DocBlock mixins to the model class
|
||||
| contained in the Laravel framework. This helps the IDE with
|
||||
| auto-completion.
|
||||
|
|
||||
| Please be aware that this setting changes a file within the /vendor directory.
|
||||
|
|
||||
*/
|
||||
|
||||
'write_eloquent_model_mixins' => false,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Helper files to include
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Include helper files. By default not included, but can be toggled with the
|
||||
| -- helpers (-H) option. Extra helper files can be included.
|
||||
|
|
||||
*/
|
||||
|
||||
'include_helpers' => false,
|
||||
|
||||
'helper_files' => [
|
||||
base_path().'/vendor/laravel/framework/src/Illuminate/Support/helpers.php',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Model locations to include
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Define in which directories the ide-helper:models command should look
|
||||
| for models.
|
||||
|
|
||||
| glob patterns are supported to easier reach models in sub-directories,
|
||||
| e.g. `app/Services/* /Models` (without the space).
|
||||
|
|
||||
*/
|
||||
|
||||
'model_locations' => [
|
||||
'app',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Models to ignore
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Define which models should be ignored.
|
||||
|
|
||||
*/
|
||||
|
||||
'ignored_models' => [
|
||||
// App\MyModel::class,
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Models hooks
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Define which hook classes you want to run for models to add custom information.
|
||||
|
|
||||
| Hooks should implement Barryvdh\LaravelIdeHelper\Contracts\ModelHookInterface.
|
||||
|
|
||||
*/
|
||||
|
||||
'model_hooks' => [
|
||||
// App\Support\IdeHelper\MyModelHook::class
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Extra classes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| These implementations are not really extended, but called with magic functions.
|
||||
|
|
||||
*/
|
||||
|
||||
'extra' => [
|
||||
'Eloquent' => ['Illuminate\Database\Eloquent\Builder', 'Illuminate\Database\Query\Builder'],
|
||||
'Session' => ['Illuminate\Session\Store'],
|
||||
],
|
||||
|
||||
'magic' => [],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Interface implementations
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| These interfaces will be replaced with the implementing class. Some interfaces
|
||||
| are detected by the helpers, others can be listed below.
|
||||
|
|
||||
*/
|
||||
|
||||
'interfaces' => [
|
||||
// App\MyInterface::class => App\MyImplementation::class,
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Support for camel cased models
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| There are some Laravel packages (such as Eloquence) that allow for accessing
|
||||
| Eloquent model properties via camel case, instead of snake case.
|
||||
|
|
||||
| Enabling this option will support these packages by saving all model
|
||||
| properties as camel case, instead of snake case.
|
||||
|
|
||||
| For example, normally you would see this:
|
||||
|
|
||||
| * @property \Illuminate\Support\Carbon $created_at
|
||||
| * @property \Illuminate\Support\Carbon $updated_at
|
||||
|
|
||||
| With this enabled, the properties will be this:
|
||||
|
|
||||
| * @property \Illuminate\Support\Carbon $createdAt
|
||||
| * @property \Illuminate\Support\Carbon $updatedAt
|
||||
|
|
||||
| Note, it is currently an all-or-nothing option.
|
||||
|
|
||||
*/
|
||||
'model_camel_case_properties' => false,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Property casts
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Cast the given "real type" to the given "type".
|
||||
|
|
||||
*/
|
||||
'type_overrides' => [
|
||||
'integer' => 'int',
|
||||
'boolean' => 'bool',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Include DocBlocks from classes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Include DocBlocks from classes to allow additional code inspection for
|
||||
| magic methods and properties.
|
||||
|
|
||||
*/
|
||||
'include_class_docblocks' => false,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Force FQN usage
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Use the fully qualified (class) name in DocBlocks,
|
||||
| even if the class exists in the same namespace
|
||||
| or there is an import (use className) of the class.
|
||||
|
|
||||
*/
|
||||
'force_fqn' => false,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Use generics syntax
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Use generics syntax within DocBlocks,
|
||||
| e.g. `Collection<User>` instead of `Collection|User[]`.
|
||||
|
|
||||
*/
|
||||
'use_generics_annotations' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Additional relation types
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Sometimes it's needed to create custom relation types. The key of the array
|
||||
| is the relationship method name. The value of the array is the fully-qualified
|
||||
| class name of the relationship, e.g. `'relationName' => RelationShipClass::class`.
|
||||
|
|
||||
*/
|
||||
'additional_relation_types' => [],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Additional relation return types
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When using custom relation types its possible for the class name to not contain
|
||||
| the proper return type of the relation. The key of the array is the relationship
|
||||
| method name. The value of the array is the return type of the relation ('many'
|
||||
| or 'morphTo').
|
||||
| e.g. `'relationName' => 'many'`.
|
||||
|
|
||||
*/
|
||||
'additional_relation_return_types' => [],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Enforce nullable Eloquent relationships on not null columns
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When set to true (default), this option enforces nullable Eloquent relationships.
|
||||
| However, in cases where the application logic ensures the presence of related
|
||||
| records it may be desirable to set this option to false to avoid unwanted null warnings.
|
||||
|
|
||||
| Default: true
|
||||
| A not null column with no foreign key constraint will have a "nullable" relationship.
|
||||
| * @property int $not_null_column_with_no_foreign_key_constraint
|
||||
| * @property-read BelongsToVariation|null $notNullColumnWithNoForeignKeyConstraint
|
||||
|
|
||||
| Option: false
|
||||
| A not null column with no foreign key constraint will have a "not nullable" relationship.
|
||||
| * @property int $not_null_column_with_no_foreign_key_constraint
|
||||
| * @property-read BelongsToVariation $notNullColumnWithNoForeignKeyConstraint
|
||||
|
|
||||
*/
|
||||
|
||||
'enforce_nullable_relationships' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Run artisan commands after migrations to generate model helpers
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The specified commands should run after migrations are finished running.
|
||||
|
|
||||
*/
|
||||
'post_migrate' => [
|
||||
'ide-helper:models --nowrite',
|
||||
],
|
||||
|
||||
];
|
||||
225
config/octane.php
Normal file
225
config/octane.php
Normal file
@@ -0,0 +1,225 @@
|
||||
<?php
|
||||
|
||||
use Barryvdh\Debugbar\LaravelDebugbar;
|
||||
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' => [
|
||||
LaravelDebugbar::class,
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| 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,
|
||||
|
||||
];
|
||||
267
config/tallstackui.php
Normal file
267
config/tallstackui.php
Normal file
@@ -0,0 +1,267 @@
|
||||
<?php
|
||||
|
||||
use TallStackUi\View\Components;
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Prefix
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Control a prefix for the TallStackUI components. The term here will be used
|
||||
| to prefix all TallStackUI components. This is useful to avoid conflicts
|
||||
| with other components registered by other libraries or created by yourself.
|
||||
|
|
||||
| For example: prefixing as 'ts-', the `alert` usage will be: '<x-ts-alert />'
|
||||
*/
|
||||
'prefix' => env('TALLSTACKUI_PREFIX'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Debug Mode
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Control the debug mode for TallStackUI components.
|
||||
*/
|
||||
'debug' => [
|
||||
'status' => env('TALLSTACKUI_DEBUG_MODE', false),
|
||||
/*
|
||||
|----------------------------------------------------------------------
|
||||
| You can control in which environments the debug mode is enabled.
|
||||
|----------------------------------------------------------------------
|
||||
*/
|
||||
'environments' => [
|
||||
'local',
|
||||
'sandbox',
|
||||
'staging',
|
||||
],
|
||||
/*
|
||||
|----------------------------------------------------------------------
|
||||
| You can ignore debug mode for certain specific components
|
||||
| by setting the exact component name in this array.
|
||||
|----------------------------------------------------------------------
|
||||
*/
|
||||
'ignore' => [
|
||||
//
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Icon Style
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| MAKE SURE TO READ THE DOCS BEFORE CHANGE THIS CONFIGURATION HERE.
|
||||
*/
|
||||
'icons' => [
|
||||
/*
|
||||
|----------------------------------
|
||||
| Default and in-use icon type.
|
||||
|----------------------------------
|
||||
| Allowed: heroicons, phosphoricons, google, tablericons.
|
||||
*/
|
||||
'type' => env('TALLSTACKUI_ICON_TYPE', 'tablericons'),
|
||||
|
||||
/*
|
||||
|----------------------------------
|
||||
| Default and in-use icon style.
|
||||
|----------------------------------
|
||||
| Allowed:
|
||||
|
|
||||
| Heroicons: solid, outline
|
||||
| Phosphoricons: thin, light, regular, bold, duotone
|
||||
| Google: default
|
||||
| Tablericons: default
|
||||
*/
|
||||
'style' => env('TALLSTACKUI_ICON_STYLE', 'default'),
|
||||
|
||||
/*
|
||||
|----------------------------------
|
||||
| Flush unused icons pack.
|
||||
|----------------------------------
|
||||
|
|
||||
| To avoid the accumulation of unused files, the icon packs that are
|
||||
| not in use can be deleted automatically when new icons are set.
|
||||
*/
|
||||
'flush' => true,
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Component Settings
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| General components settings.
|
||||
*/
|
||||
'settings' => [
|
||||
/*
|
||||
|----------------------------------------------------------------------
|
||||
| Dialog
|
||||
|----------------------------------------------------------------------
|
||||
| z-index: controls the default z-index.
|
||||
| overflow: avoids hiding the overflow, allowing the scroll of the page.
|
||||
| blur: enables the background blur effect by default.
|
||||
| persistent: enables the dialog to not be closed by clicking outside by default.
|
||||
*/
|
||||
'dialog' => [
|
||||
'z-index' => 'z-50',
|
||||
'overflow' => false,
|
||||
'blur' => false,
|
||||
'persistent' => false,
|
||||
],
|
||||
|
||||
/*
|
||||
|----------------------------------------------------------------------
|
||||
| Form
|
||||
|----------------------------------------------------------------------
|
||||
*/
|
||||
'form' => [
|
||||
/*
|
||||
|----------------------------------------------------------------------
|
||||
| Color
|
||||
|----------------------------------------------------------------------
|
||||
| colors: array of custom colors to be used in the color picker.
|
||||
*/
|
||||
'color' => [
|
||||
'colors' => null,
|
||||
],
|
||||
],
|
||||
/*
|
||||
|----------------------------------------------------------------------
|
||||
| Modal
|
||||
|----------------------------------------------------------------------
|
||||
|
|
||||
| z-index: controls the default z-index.
|
||||
| overflow: avoids hiding the overflow, allowing the scroll of the page.
|
||||
| blur: enables the background blur effect by default (Allowed: false, sm, md, lg, xl).
|
||||
| persistent: enables the modal to not be closed by clicking outside by default.
|
||||
| size: controls the default modal size (Allowed: sm, md, lg, xl, 2xl, 3xl, 4xl, 5xl, 6xl, 7xl).
|
||||
| center: controls if the modal is centered by default.
|
||||
*/
|
||||
'modal' => [
|
||||
'z-index' => 'z-50',
|
||||
'overflow' => false,
|
||||
'blur' => false,
|
||||
'persistent' => false,
|
||||
'size' => '2xl',
|
||||
'center' => false,
|
||||
],
|
||||
/*
|
||||
|----------------------------------------------------------------------
|
||||
| Loading
|
||||
|----------------------------------------------------------------------
|
||||
|
|
||||
| z-index: controls the default z-index.
|
||||
| overflow: avoids hiding the overflow, allowing the scroll of the page.
|
||||
| blur: enables the background blur effect by default.
|
||||
| opacity: enables the background opacity by default.
|
||||
*/
|
||||
'loading' => [
|
||||
'z-index' => 'z-50',
|
||||
'overflow' => false,
|
||||
'blur' => false,
|
||||
'opacity' => true,
|
||||
],
|
||||
/*
|
||||
|----------------------------------------------------------------------
|
||||
| Slide
|
||||
|----------------------------------------------------------------------
|
||||
|
|
||||
| z-index: controls the default z-index.
|
||||
| overflow: avoids hiding the overflow, allowing the scroll of the page.
|
||||
| blur: enables the background blur effect by default (Allowed: false, sm, md, lg, xl).
|
||||
| persistent: enables the slide to not be closed by clicking outside by default.
|
||||
| size: controls the default modal size (Allowed: sm, md, lg, xl, 2xl, 3xl, 4xl, 5xl, 6xl, 7xl, full).
|
||||
| position: controls the default slide position (Allowed: right, left).
|
||||
*/
|
||||
'slide' => [
|
||||
'z-index' => 'z-50',
|
||||
'overflow' => false,
|
||||
'blur' => false,
|
||||
'persistent' => false,
|
||||
'size' => 'lg',
|
||||
'position' => 'right',
|
||||
],
|
||||
/*
|
||||
|----------------------------------------------------------------------
|
||||
| Toast
|
||||
|----------------------------------------------------------------------
|
||||
|
|
||||
| z-index: controls the default z-index.
|
||||
| progress: enables the progress bar.
|
||||
| expandable: enables the expand effect by default.
|
||||
| position: controls the default toast position (Allowed: top-right, top-left, bottom-right, bottom-left).
|
||||
| timeout: controls the default timeout in seconds.
|
||||
*/
|
||||
'toast' => [
|
||||
'z-index' => 'z-50',
|
||||
'progress' => true,
|
||||
'expandable' => false,
|
||||
'position' => 'top-right',
|
||||
'timeout' => 3,
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Component List
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| List of all TallStackUI components.
|
||||
*/
|
||||
'components' => [
|
||||
'alert' => Components\Alert::class,
|
||||
'avatar' => Components\Avatar::class,
|
||||
'badge' => Components\Badge::class,
|
||||
'banner' => Components\Banner::class,
|
||||
'boolean' => Components\Boolean::class,
|
||||
'button' => Components\Button\Button::class,
|
||||
'button.circle' => Components\Button\Circle::class,
|
||||
'card' => Components\Card::class,
|
||||
'checkbox' => Components\Form\Checkbox::class,
|
||||
'color' => Components\Form\Color::class,
|
||||
'clipboard' => Components\Clipboard::class,
|
||||
'date' => Components\Form\Date::class,
|
||||
'dialog' => Components\Interaction\Dialog::class,
|
||||
'dropdown' => Components\Dropdown\Dropdown::class,
|
||||
'dropdown.items' => Components\Dropdown\Items::class,
|
||||
'error' => Components\Form\Error::class,
|
||||
'errors' => Components\Errors::class,
|
||||
'floating' => Components\Floating::class,
|
||||
'upload' => Components\Form\Upload::class,
|
||||
'hint' => Components\Form\Hint::class,
|
||||
'icon' => Components\Icon::class,
|
||||
'input' => Components\Form\Input::class,
|
||||
'label' => Components\Form\Label::class,
|
||||
'link' => Components\Link::class,
|
||||
'loading' => Components\Loading::class,
|
||||
'modal' => Components\Modal::class,
|
||||
'number' => Components\Form\Number::class,
|
||||
'password' => Components\Form\Password::class,
|
||||
'pin' => Components\Form\Pin::class,
|
||||
'progress' => Components\Progress\Progress::class,
|
||||
'progress.circle' => Components\Progress\Circle::class,
|
||||
'radio' => Components\Form\Radio::class,
|
||||
'range' => Components\Form\Range::class,
|
||||
'rating' => Components\Rating::class,
|
||||
'select.native' => Components\Select\Native::class,
|
||||
'select.styled' => Components\Select\Styled::class,
|
||||
'slide' => Components\Slide::class,
|
||||
'stats' => Components\Stats::class,
|
||||
'step' => Components\Step\Step::class,
|
||||
'step.items' => Components\Step\Items::class,
|
||||
'tab' => Components\Tab\Tab::class,
|
||||
'tag' => Components\Form\Tag::class,
|
||||
'table' => Components\Table::class,
|
||||
'tab.items' => Components\Tab\Items::class,
|
||||
'textarea' => Components\Form\Textarea::class,
|
||||
'theme-switch' => Components\ThemeSwitch::class,
|
||||
'time' => Components\Form\Time::class,
|
||||
'toast' => Components\Interaction\Toast::class,
|
||||
'toggle' => Components\Form\Toggle::class,
|
||||
'tooltip' => Components\Tooltip::class,
|
||||
'reaction' => Components\Reaction::class,
|
||||
'wrapper.input' => Components\Wrapper\Input::class,
|
||||
'wrapper.radio' => Components\Wrapper\Radio::class,
|
||||
],
|
||||
];
|
||||
205
config/telescope.php
Normal file
205
config/telescope.php
Normal file
@@ -0,0 +1,205 @@
|
||||
<?php
|
||||
|
||||
use Laravel\Telescope\Http\Middleware\Authorize;
|
||||
use Laravel\Telescope\Watchers;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Telescope Master Switch
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option may be used to disable all Telescope watchers regardless
|
||||
| of their individual configuration, which simply provides a single
|
||||
| and convenient way to enable or disable Telescope data storage.
|
||||
|
|
||||
*/
|
||||
|
||||
'enabled' => env('TELESCOPE_ENABLED', true),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Telescope Domain
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This is the subdomain where Telescope will be accessible from. If the
|
||||
| setting is null, Telescope will reside under the same domain as the
|
||||
| application. Otherwise, this value will be used as the subdomain.
|
||||
|
|
||||
*/
|
||||
|
||||
'domain' => env('TELESCOPE_DOMAIN'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Telescope Path
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This is the URI path where Telescope will be accessible from. Feel free
|
||||
| to change this path to anything you like. Note that the URI will not
|
||||
| affect the paths of its internal API that aren't exposed to users.
|
||||
|
|
||||
*/
|
||||
|
||||
'path' => env('TELESCOPE_PATH', 'telescope'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Telescope Storage Driver
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This configuration options determines the storage driver that will
|
||||
| be used to store Telescope's data. In addition, you may set any
|
||||
| custom options as needed by the particular driver you choose.
|
||||
|
|
||||
*/
|
||||
|
||||
'driver' => env('TELESCOPE_DRIVER', 'database'),
|
||||
|
||||
'storage' => [
|
||||
'database' => [
|
||||
'connection' => env('DB_CONNECTION', 'mysql'),
|
||||
'chunk' => 1000,
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Telescope Queue
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This configuration options determines the queue connection and queue
|
||||
| which will be used to process ProcessPendingUpdate jobs. This can
|
||||
| be changed if you would prefer to use a non-default connection.
|
||||
|
|
||||
*/
|
||||
|
||||
'queue' => [
|
||||
'connection' => env('TELESCOPE_QUEUE_CONNECTION', null),
|
||||
'queue' => env('TELESCOPE_QUEUE', null),
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Telescope Route Middleware
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| These middleware will be assigned to every Telescope route, giving you
|
||||
| the chance to add your own middleware to this list or change any of
|
||||
| the existing middleware. Or, you can simply stick with this list.
|
||||
|
|
||||
*/
|
||||
|
||||
'middleware' => [
|
||||
'web',
|
||||
Authorize::class,
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Allowed / Ignored Paths & Commands
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following array lists the URI paths and Artisan commands that will
|
||||
| not be watched by Telescope. In addition to this list, some Laravel
|
||||
| commands, like migrations and queue commands, are always ignored.
|
||||
|
|
||||
*/
|
||||
|
||||
'only_paths' => [
|
||||
// 'api/*'
|
||||
],
|
||||
|
||||
'ignore_paths' => [
|
||||
'livewire*',
|
||||
'nova-api*',
|
||||
'pulse*',
|
||||
],
|
||||
|
||||
'ignore_commands' => [
|
||||
//
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Telescope Watchers
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following array lists the "watchers" that will be registered with
|
||||
| Telescope. The watchers gather the application's profile data when
|
||||
| a request or task is executed. Feel free to customize this list.
|
||||
|
|
||||
*/
|
||||
|
||||
'watchers' => [
|
||||
Watchers\BatchWatcher::class => env('TELESCOPE_BATCH_WATCHER', true),
|
||||
|
||||
Watchers\CacheWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_CACHE_WATCHER', true),
|
||||
'hidden' => [],
|
||||
],
|
||||
|
||||
Watchers\ClientRequestWatcher::class => env('TELESCOPE_CLIENT_REQUEST_WATCHER', true),
|
||||
|
||||
Watchers\CommandWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_COMMAND_WATCHER', true),
|
||||
'ignore' => [],
|
||||
],
|
||||
|
||||
Watchers\DumpWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_DUMP_WATCHER', true),
|
||||
'always' => env('TELESCOPE_DUMP_WATCHER_ALWAYS', false),
|
||||
],
|
||||
|
||||
Watchers\EventWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_EVENT_WATCHER', true),
|
||||
'ignore' => [],
|
||||
],
|
||||
|
||||
Watchers\ExceptionWatcher::class => env('TELESCOPE_EXCEPTION_WATCHER', true),
|
||||
|
||||
Watchers\GateWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_GATE_WATCHER', true),
|
||||
'ignore_abilities' => [],
|
||||
'ignore_packages' => true,
|
||||
'ignore_paths' => [],
|
||||
],
|
||||
|
||||
Watchers\JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true),
|
||||
|
||||
Watchers\LogWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_LOG_WATCHER', true),
|
||||
'level' => 'error',
|
||||
],
|
||||
|
||||
Watchers\MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true),
|
||||
|
||||
Watchers\ModelWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_MODEL_WATCHER', true),
|
||||
'events' => ['eloquent.*'],
|
||||
'hydrations' => true,
|
||||
],
|
||||
|
||||
Watchers\NotificationWatcher::class => env('TELESCOPE_NOTIFICATION_WATCHER', true),
|
||||
|
||||
Watchers\QueryWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_QUERY_WATCHER', true),
|
||||
'ignore_packages' => true,
|
||||
'ignore_paths' => [],
|
||||
'slow' => 100,
|
||||
],
|
||||
|
||||
Watchers\RedisWatcher::class => env('TELESCOPE_REDIS_WATCHER', true),
|
||||
|
||||
Watchers\RequestWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_REQUEST_WATCHER', true),
|
||||
'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64),
|
||||
'ignore_http_methods' => [],
|
||||
'ignore_status_codes' => [],
|
||||
],
|
||||
|
||||
Watchers\ScheduleWatcher::class => env('TELESCOPE_SCHEDULE_WATCHER', true),
|
||||
Watchers\ViewWatcher::class => env('TELESCOPE_VIEW_WATCHER', true),
|
||||
],
|
||||
];
|
||||
@@ -12,7 +12,7 @@ return new class extends Migration
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('users', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->ulid('id')->primary();
|
||||
$table->string('name');
|
||||
$table->string('email')->unique();
|
||||
$table->timestamp('email_verified_at')->nullable();
|
||||
@@ -29,7 +29,7 @@ return new class extends Migration
|
||||
|
||||
Schema::create('sessions', function (Blueprint $table) {
|
||||
$table->string('id')->primary();
|
||||
$table->foreignId('user_id')->nullable()->index();
|
||||
$table->foreignUlid('user_id')->nullable()->index();
|
||||
$table->string('ip_address', 45)->nullable();
|
||||
$table->text('user_agent')->nullable();
|
||||
$table->longText('payload');
|
||||
|
||||
126
database/migrations/2025_01_05_052506_create_base_tables.php
Normal file
126
database/migrations/2025_01_05_052506_create_base_tables.php
Normal file
@@ -0,0 +1,126 @@
|
||||
<?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('turnos', function (Blueprint $table) {
|
||||
$table->ulid('id')->primary();
|
||||
$table->date('fecha');
|
||||
$table->integer('numero_caja');
|
||||
$table->integer('numero_turno');
|
||||
$table->integer('fondo')->default(0);
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create('calculo_fondos', function (Blueprint $table) {
|
||||
$table->ulid('id')->primary();
|
||||
$table->bigInteger('valor');
|
||||
$table->text('descripcion')->nullable();
|
||||
$table->foreignUlid('turno_id')->constrained('turnos')->cascadeOnDelete();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create('documentos', function (Blueprint $table) {
|
||||
$table->ulid('id')->primary();
|
||||
$table->text('descripcion')->nullable();
|
||||
$table->bigInteger('valor');
|
||||
$table->text('tipo_documento');
|
||||
$table->foreignUlid('turno_id')->constrained('turnos')->cascadeOnDelete();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create('efectivos', function (Blueprint $table) {
|
||||
$table->ulid('id')->primary();
|
||||
$table->bigInteger('veinte_mil')->default(0);
|
||||
$table->bigInteger('diez_mil')->default(0);
|
||||
$table->bigInteger('cinco_mil')->default(0);
|
||||
$table->bigInteger('dos_mil')->default(0);
|
||||
$table->bigInteger('mil')->default(0);
|
||||
$table->bigInteger('quinientos')->default(0);
|
||||
$table->bigInteger('cien')->default(0);
|
||||
$table->bigInteger('cincuenta')->default(0);
|
||||
$table->bigInteger('diez')->default(0);
|
||||
$table->foreignUlid('turno_id')->constrained('turnos')->cascadeOnDelete();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create('egresos', function (Blueprint $table) {
|
||||
$table->ulid('id')->primary();
|
||||
$table->text('numero')->nullable();
|
||||
$table->text('descripcion')->nullable();
|
||||
$table->bigInteger('valor');
|
||||
$table->text('tipo_egreso');
|
||||
$table->foreignUlid('turno_id')->constrained('turnos')->cascadeOnDelete();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create('estados_resultado', function (Blueprint $table) {
|
||||
$table->ulid('id')->primary();
|
||||
$table->date('mes');
|
||||
$table->bigInteger('costo_venta');
|
||||
$table->bigInteger('cuenta_corriente_factura');
|
||||
$table->bigInteger('cuenta_corriente_boleta');
|
||||
$table->bigInteger('cuenta_corriente_sin_respaldo');
|
||||
$table->bigInteger('cuenta_corriente_partime');
|
||||
$table->bigInteger('remuneraciones');
|
||||
$table->bigInteger('finiquitos');
|
||||
$table->bigInteger('aguinaldo');
|
||||
$table->bigInteger('bonos_personal');
|
||||
$table->bigInteger('honorarios_contador');
|
||||
$table->bigInteger('arriendo');
|
||||
$table->bigInteger('agua');
|
||||
$table->bigInteger('luz');
|
||||
$table->bigInteger('gas');
|
||||
$table->bigInteger('telefono');
|
||||
$table->bigInteger('otro_servicio');
|
||||
$table->decimal('ppm', 15, 2);
|
||||
$table->bigInteger('iva_a_favor');
|
||||
$table->bigInteger('dias_habiles');
|
||||
$table->bigInteger('dias_trabajados');
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create('gastos_cuenta_corriente', function (Blueprint $table) {
|
||||
$table->ulid('id')->primary();
|
||||
$table->bigInteger('valor');
|
||||
$table->text('descripcion');
|
||||
$table->text('tipo_gasto');
|
||||
$table->foreignUlid('estado_resultado_id')->constrained('estados_resultado')->cascadeOnDelete();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create('ingresos', function (Blueprint $table) {
|
||||
$table->ulid('id')->primary();
|
||||
$table->bigInteger('numero');
|
||||
$table->bigInteger('numero_z');
|
||||
$table->bigInteger('ingreso_inicial');
|
||||
$table->bigInteger('ingreso_final');
|
||||
$table->bigInteger('total');
|
||||
$table->text('tipo_ingreso');
|
||||
$table->foreignUlid('turno_id')->constrained('turnos')->cascadeOnDelete();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('ingresos');
|
||||
Schema::dropIfExists('gastos_cuenta_corriente');
|
||||
Schema::dropIfExists('estados_resultado');
|
||||
Schema::dropIfExists('egresos');
|
||||
Schema::dropIfExists('efectivos');
|
||||
Schema::dropIfExists('documentos');
|
||||
Schema::dropIfExists('calculo_fondos');
|
||||
Schema::dropIfExists('turnos');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Get the migration connection name.
|
||||
*/
|
||||
public function getConnection(): ?string
|
||||
{
|
||||
return config('telescope.storage.database.connection');
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
$schema = Schema::connection($this->getConnection());
|
||||
|
||||
$schema->create('telescope_entries', function (Blueprint $table) {
|
||||
$table->bigIncrements('sequence');
|
||||
$table->uuid('uuid');
|
||||
$table->uuid('batch_id');
|
||||
$table->string('family_hash')->nullable();
|
||||
$table->boolean('should_display_on_index')->default(true);
|
||||
$table->string('type', 20);
|
||||
$table->longText('content');
|
||||
$table->dateTime('created_at')->nullable();
|
||||
|
||||
$table->unique('uuid');
|
||||
$table->index('batch_id');
|
||||
$table->index('family_hash');
|
||||
$table->index('created_at');
|
||||
$table->index(['type', 'should_display_on_index']);
|
||||
});
|
||||
|
||||
$schema->create('telescope_entries_tags', function (Blueprint $table) {
|
||||
$table->uuid('entry_uuid');
|
||||
$table->string('tag');
|
||||
|
||||
$table->primary(['entry_uuid', 'tag']);
|
||||
$table->index('tag');
|
||||
|
||||
$table->foreign('entry_uuid')
|
||||
->references('uuid')
|
||||
->on('telescope_entries')
|
||||
->onDelete('cascade');
|
||||
});
|
||||
|
||||
$schema->create('telescope_monitoring', function (Blueprint $table) {
|
||||
$table->string('tag')->primary();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
$schema = Schema::connection($this->getConnection());
|
||||
|
||||
$schema->dropIfExists('telescope_entries_tags');
|
||||
$schema->dropIfExists('telescope_entries');
|
||||
$schema->dropIfExists('telescope_monitoring');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration {
|
||||
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('roles', function (Blueprint $table) {
|
||||
$table->ulid('id')->primary();
|
||||
$table->text('name');
|
||||
$table->text('title')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create('user_roles', function (Blueprint $table) {
|
||||
$table->foreignUlid('role_id')->constrained('roles')->cascadeOnDelete();
|
||||
$table->foreignUlid('user_id')->constrained('users')->cascadeOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('user_roles');
|
||||
Schema::dropIfExists('roles');
|
||||
}
|
||||
};
|
||||
@@ -2,22 +2,14 @@
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\User;
|
||||
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class DatabaseSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Seed the application's database.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
// User::factory(10)->create();
|
||||
|
||||
User::factory()->create([
|
||||
'name' => 'Test User',
|
||||
'email' => 'test@example.com',
|
||||
$this->call([
|
||||
RolesSeeder::class
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
30
database/seeders/RolesSeeder.php
Normal file
30
database/seeders/RolesSeeder.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\Role;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class RolesSeeder extends Seeder
|
||||
{
|
||||
public function run(): void
|
||||
{
|
||||
Role::firstOrCreate([
|
||||
'name' => 'superadmin'
|
||||
], [
|
||||
'title' => 'Super Administrador'
|
||||
]);
|
||||
|
||||
Role::firstOrCreate([
|
||||
'name' => 'admin',
|
||||
], [
|
||||
'title' => 'Administrador'
|
||||
]);
|
||||
|
||||
Role::firstOrCreate([
|
||||
'name' => 'user',
|
||||
], [
|
||||
'title' => 'Usuario'
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,9 @@ kind: ConfigMap
|
||||
metadata:
|
||||
name: laravel-configmap
|
||||
data:
|
||||
APP_KEY: base64:6R8+UR+AyBhv9HTlVW7qP+DCAdq6XP8r+uqEE1ahtqI=
|
||||
APP_KEY: "base64:6R8+UR+AyBhv9HTlVW7qP+DCAdq6XP8r+uqEE1ahtqI="
|
||||
APP_DEBUG: "true"
|
||||
DB_CONNECTION: pgsql
|
||||
DB_HOST: postgres-service
|
||||
DB_USERNAME: postgres
|
||||
DB_PASSWORD: secret
|
||||
DB_CONNECTION: "pgsql"
|
||||
DB_HOST: "postgres-service"
|
||||
DB_USERNAME: "postgres"
|
||||
DB_PASSWORD: "secret"
|
||||
|
||||
@@ -4,4 +4,4 @@ metadata:
|
||||
name: laravel-secret
|
||||
type: Opaque
|
||||
stringData:
|
||||
DB_PASSWORD: l#Scim@HiebS3U
|
||||
DB_PASSWORD: "l#Scim@HiebS3U"
|
||||
|
||||
12
ide.json
Normal file
12
ide.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"$schema": "https://laravel-ide.com/schema/laravel-ide-v2.json",
|
||||
"blade": {
|
||||
"components": {
|
||||
"list": [
|
||||
{
|
||||
"name": "x-card"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
263
lang/en.json
Normal file
263
lang/en.json
Normal file
@@ -0,0 +1,263 @@
|
||||
{
|
||||
"(and :count more error)": "(and :count more error)",
|
||||
"(and :count more errors)": "(and :count more error)|(and :count more errors)|(and :count more errors)",
|
||||
"A decryption key is required.": "A decryption key is required.",
|
||||
"A new verification link has been sent to the email address you provided during registration.": "A new verification link has been sent to the email address you provided during registration.",
|
||||
"A new verification link has been sent to your email address.": "A new verification link has been sent to your email address.",
|
||||
"A Timeout Occurred": "A Timeout Occurred",
|
||||
"Accept": "Accept",
|
||||
"Accepted": "Accepted",
|
||||
"Action": "Action",
|
||||
"Actions": "Actions",
|
||||
"Add": "Add",
|
||||
"Add :name": "Add :name",
|
||||
"Admin": "Admin",
|
||||
"Agree": "Agree",
|
||||
"All rights reserved.": "All rights reserved.",
|
||||
"Already registered?": "Already registered?",
|
||||
"Already Reported": "Already Reported",
|
||||
"Archive": "Archive",
|
||||
"Are you sure you want to delete your account?": "Are you sure you want to delete your account?",
|
||||
"Assign": "Assign",
|
||||
"Associate": "Associate",
|
||||
"Attach": "Attach",
|
||||
"Bad Gateway": "Bad Gateway",
|
||||
"Bad Request": "Bad Request",
|
||||
"Bandwidth Limit Exceeded": "Bandwidth Limit Exceeded",
|
||||
"Browse": "Browse",
|
||||
"Cancel": "Cancel",
|
||||
"Choose": "Choose",
|
||||
"Choose :name": "Choose :name",
|
||||
"Choose File": "Choose File",
|
||||
"Choose Image": "Choose Image",
|
||||
"Click here to re-send the verification email.": "Click here to re-send the verification email.",
|
||||
"Click to copy": "Click to copy",
|
||||
"Client Closed Request": "Client Closed Request",
|
||||
"Close": "Close",
|
||||
"Collapse": "Collapse",
|
||||
"Collapse All": "Collapse All",
|
||||
"Comment": "Comment",
|
||||
"Confirm": "Confirm",
|
||||
"Confirm Password": "Confirm Password",
|
||||
"Conflict": "Conflict",
|
||||
"Connect": "Connect",
|
||||
"Connection Closed Without Response": "Connection Closed Without Response",
|
||||
"Connection Timed Out": "Connection Timed Out",
|
||||
"Continue": "Continue",
|
||||
"Create": "Create",
|
||||
"Create :name": "Create :name",
|
||||
"Created": "Created",
|
||||
"Current Password": "Current Password",
|
||||
"Dashboard": "Dashboard",
|
||||
"Delete": "Delete",
|
||||
"Delete :name": "Delete :name",
|
||||
"Delete Account": "Delete Account",
|
||||
"Detach": "Detach",
|
||||
"Details": "Details",
|
||||
"Disable": "Disable",
|
||||
"Discard": "Discard",
|
||||
"Done": "Done",
|
||||
"Down": "Down",
|
||||
"Duplicate": "Duplicate",
|
||||
"Duplicate :name": "Duplicate :name",
|
||||
"Edit": "Edit",
|
||||
"Edit :name": "Edit :name",
|
||||
"Email": "Email",
|
||||
"email": "The :attribute field must be a valid email address.",
|
||||
"Email Password Reset Link": "Email Password Reset Link",
|
||||
"Enable": "Enable",
|
||||
"Encrypted environment file already exists.": "Encrypted environment file already exists.",
|
||||
"Encrypted environment file not found.": "Encrypted environment file not found.",
|
||||
"Ensure your account is using a long, random password to stay secure.": "Ensure your account is using a long, random password to stay secure.",
|
||||
"Environment file already exists.": "Environment file already exists.",
|
||||
"Environment file not found.": "Environment file not found.",
|
||||
"errors": "errors",
|
||||
"Expand": "Expand",
|
||||
"Expand All": "Expand All",
|
||||
"Expectation Failed": "Expectation Failed",
|
||||
"Explanation": "Explanation",
|
||||
"Export": "Export",
|
||||
"Export :name": "Export :name",
|
||||
"Failed Dependency": "Failed Dependency",
|
||||
"File": "File",
|
||||
"Files": "Files",
|
||||
"Forbidden": "Forbidden",
|
||||
"Forgot your password?": "Forgot your password?",
|
||||
"Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.": "Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.",
|
||||
"Found": "Found",
|
||||
"Gateway Timeout": "Gateway Timeout",
|
||||
"Go Home": "Go Home",
|
||||
"Go to page :page": "Go to page :page",
|
||||
"Gone": "Gone",
|
||||
"Hello!": "Hello!",
|
||||
"Hide": "Hide",
|
||||
"Hide :name": "Hide :name",
|
||||
"Home": "Home",
|
||||
"HTTP Version Not Supported": "HTTP Version Not Supported",
|
||||
"I'm a teapot": "I'm a teapot",
|
||||
"If you did not create an account, no further action is required.": "If you did not create an account, no further action is required.",
|
||||
"If you did not request a password reset, no further action is required.": "If you did not request a password reset, no further action is required.",
|
||||
"If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:",
|
||||
"IM Used": "IM Used",
|
||||
"Image": "Image",
|
||||
"Impersonate": "Impersonate",
|
||||
"Impersonation": "Impersonation",
|
||||
"Import": "Import",
|
||||
"Import :name": "Import :name",
|
||||
"Insufficient Storage": "Insufficient Storage",
|
||||
"Internal Server Error": "Internal Server Error",
|
||||
"Introduction": "Introduction",
|
||||
"Invalid filename.": "Invalid filename.",
|
||||
"Invalid JSON was returned from the route.": "Invalid JSON was returned from the route.",
|
||||
"Invalid SSL Certificate": "Invalid SSL Certificate",
|
||||
"length": "length",
|
||||
"Length Required": "Length Required",
|
||||
"Like": "Like",
|
||||
"Load": "Load",
|
||||
"Localize": "Localize",
|
||||
"Location": "Location",
|
||||
"Locked": "Locked",
|
||||
"Log In": "Log In",
|
||||
"Log in": "Log in",
|
||||
"Log Out": "Log Out",
|
||||
"Login": "Login",
|
||||
"Logout": "Logout",
|
||||
"Loop Detected": "Loop Detected",
|
||||
"Maintenance Mode": "Maintenance Mode",
|
||||
"Method Not Allowed": "Method Not Allowed",
|
||||
"Misdirected Request": "Misdirected Request",
|
||||
"Moved Permanently": "Moved Permanently",
|
||||
"Multi-Status": "Multi-Status",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"Name": "Name",
|
||||
"name": "name",
|
||||
"Network Authentication Required": "Network Authentication Required",
|
||||
"Network Connect Timeout Error": "Network Connect Timeout Error",
|
||||
"Network Read Timeout Error": "Network Read Timeout Error",
|
||||
"New": "New",
|
||||
"New :name": "New :name",
|
||||
"New Password": "New Password",
|
||||
"No": "No",
|
||||
"No Content": "No Content",
|
||||
"Non-Authoritative Information": "Non-Authoritative Information",
|
||||
"Not Acceptable": "Not Acceptable",
|
||||
"Not Extended": "Not Extended",
|
||||
"Not Found": "Not Found",
|
||||
"Not Implemented": "Not Implemented",
|
||||
"Not Modified": "Not Modified",
|
||||
"of": "of",
|
||||
"OK": "OK",
|
||||
"Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.",
|
||||
"Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.",
|
||||
"Open": "Open",
|
||||
"Open in a current window": "Open in a current window",
|
||||
"Open in a new window": "Open in a new window",
|
||||
"Open in a parent frame": "Open in a parent frame",
|
||||
"Open in the topmost frame": "Open in the topmost frame",
|
||||
"Open on the website": "Open on the website",
|
||||
"Origin Is Unreachable": "Origin Is Unreachable",
|
||||
"Page Expired": "Page Expired",
|
||||
"Pagination Navigation": "Pagination Navigation",
|
||||
"Partial Content": "Partial Content",
|
||||
"Password": "Password",
|
||||
"password": "The provided password is incorrect.",
|
||||
"Payload Too Large": "Payload Too Large",
|
||||
"Payment Required": "Payment Required",
|
||||
"Permanent Redirect": "Permanent Redirect",
|
||||
"Please click the button below to verify your email address.": "Please click the button below to verify your email address.",
|
||||
"Precondition Failed": "Precondition Failed",
|
||||
"Precondition Required": "Precondition Required",
|
||||
"Preview": "Preview",
|
||||
"Price": "Price",
|
||||
"Processing": "Processing",
|
||||
"Profile": "Profile",
|
||||
"Profile Information": "Profile Information",
|
||||
"Proxy Authentication Required": "Proxy Authentication Required",
|
||||
"Railgun Error": "Railgun Error",
|
||||
"Range Not Satisfiable": "Range Not Satisfiable",
|
||||
"Record": "Record",
|
||||
"Regards,": "Regards,",
|
||||
"Register": "Register",
|
||||
"Remember me": "Remember me",
|
||||
"Request Header Fields Too Large": "Request Header Fields Too Large",
|
||||
"Request Timeout": "Request Timeout",
|
||||
"Resend Verification Email": "Resend Verification Email",
|
||||
"Reset Content": "Reset Content",
|
||||
"Reset Password": "Reset Password",
|
||||
"Reset Password Notification": "Reset Password Notification",
|
||||
"Restore": "Restore",
|
||||
"Restore :name": "Restore :name",
|
||||
"results": "results",
|
||||
"Retry With": "Retry With",
|
||||
"Save": "Save",
|
||||
"Save & Close": "Save & Close",
|
||||
"Save & Return": "Save & Return",
|
||||
"Save :name": "Save :name",
|
||||
"Saved.": "Saved.",
|
||||
"Search": "Search",
|
||||
"Search :name": "Search :name",
|
||||
"See Other": "See Other",
|
||||
"Select": "Select",
|
||||
"Select All": "Select All",
|
||||
"Send": "Send",
|
||||
"Server Error": "Server Error",
|
||||
"Service Unavailable": "Service Unavailable",
|
||||
"Session Has Expired": "Session Has Expired",
|
||||
"Settings": "Settings",
|
||||
"Show": "Show",
|
||||
"Show :name": "Show :name",
|
||||
"Show All": "Show All",
|
||||
"Showing": "Showing",
|
||||
"Sign In": "Sign In",
|
||||
"Solve": "Solve",
|
||||
"SSL Handshake Failed": "SSL Handshake Failed",
|
||||
"Start": "Start",
|
||||
"Stop": "Stop",
|
||||
"Submit": "Submit",
|
||||
"Subscribe": "Subscribe",
|
||||
"Switch": "Switch",
|
||||
"Switch To Role": "Switch To Role",
|
||||
"Switching Protocols": "Switching Protocols",
|
||||
"Tag": "Tag",
|
||||
"Tags": "Tags",
|
||||
"Temporary Redirect": "Temporary Redirect",
|
||||
"Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.": "Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.",
|
||||
"The given data was invalid.": "The given data was invalid.",
|
||||
"The response is not a streamed response.": "The response is not a streamed response.",
|
||||
"The response is not a view.": "The response is not a view.",
|
||||
"This action is unauthorized.": "This action is unauthorized.",
|
||||
"This is a secure area of the application. Please confirm your password before continuing.": "This is a secure area of the application. Please confirm your password before continuing.",
|
||||
"This password reset link will expire in :count minutes.": "This password reset link will expire in :count minutes.",
|
||||
"to": "to",
|
||||
"Toggle navigation": "Toggle navigation",
|
||||
"Too Early": "Too Early",
|
||||
"Too Many Requests": "Too Many Requests",
|
||||
"Translate": "Translate",
|
||||
"Translate It": "Translate It",
|
||||
"Unauthorized": "Unauthorized",
|
||||
"Unavailable For Legal Reasons": "Unavailable For Legal Reasons",
|
||||
"Unknown Error": "Unknown Error",
|
||||
"Unpack": "Unpack",
|
||||
"Unprocessable Entity": "Unprocessable Entity",
|
||||
"Unsubscribe": "Unsubscribe",
|
||||
"Unsupported Media Type": "Unsupported Media Type",
|
||||
"Up": "Up",
|
||||
"Update": "Update",
|
||||
"Update :name": "Update :name",
|
||||
"Update Password": "Update Password",
|
||||
"Update your account's profile information and email address.": "Update your account's profile information and email address.",
|
||||
"Upgrade Required": "Upgrade Required",
|
||||
"URI Too Long": "URI Too Long",
|
||||
"Use Proxy": "Use Proxy",
|
||||
"User": "User",
|
||||
"Variant Also Negotiates": "Variant Also Negotiates",
|
||||
"Verify Email Address": "Verify Email Address",
|
||||
"View": "View",
|
||||
"View :name": "View :name",
|
||||
"Web Server is Down": "Web Server is Down",
|
||||
"Whoops!": "Whoops!",
|
||||
"Yes": "Yes",
|
||||
"You are receiving this email because we received a password reset request for your account.": "You are receiving this email because we received a password reset request for your account.",
|
||||
"You're logged in!": "You're logged in!",
|
||||
"Your email address is unverified.": "Your email address is unverified."
|
||||
}
|
||||
119
lang/en/actions.php
Normal file
119
lang/en/actions.php
Normal file
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'accept' => 'Accept',
|
||||
'action' => 'Action',
|
||||
'actions' => 'Actions',
|
||||
'add' => 'Add',
|
||||
'admin' => 'Admin',
|
||||
'agree' => 'Agree',
|
||||
'archive' => 'Archive',
|
||||
'assign' => 'Assign',
|
||||
'associate' => 'Associate',
|
||||
'attach' => 'Attach',
|
||||
'browse' => 'Browse',
|
||||
'cancel' => 'Cancel',
|
||||
'choose' => 'Choose',
|
||||
'choose_file' => 'Choose File',
|
||||
'choose_image' => 'Choose Image',
|
||||
'click_to_copy' => 'Click to copy',
|
||||
'close' => 'Close',
|
||||
'collapse' => 'Collapse',
|
||||
'collapse_all' => 'Collapse All',
|
||||
'comment' => 'Comment',
|
||||
'confirm' => 'Confirm',
|
||||
'connect' => 'Connect',
|
||||
'create' => 'Create',
|
||||
'delete' => 'Delete',
|
||||
'detach' => 'Detach',
|
||||
'details' => 'Details',
|
||||
'disable' => 'Disable',
|
||||
'discard' => 'Discard',
|
||||
'done' => 'Done',
|
||||
'down' => 'Down',
|
||||
'duplicate' => 'Duplicate',
|
||||
'edit' => 'Edit',
|
||||
'enable' => 'Enable',
|
||||
'expand' => 'Expand',
|
||||
'expand_all' => 'Expand All',
|
||||
'explanation' => 'Explanation',
|
||||
'export' => 'Export',
|
||||
'file' => 'File',
|
||||
'files' => 'Files',
|
||||
'go_home' => 'Go Home',
|
||||
'hide' => 'Hide',
|
||||
'home' => 'Home',
|
||||
'image' => 'Image',
|
||||
'impersonate' => 'Impersonate',
|
||||
'impersonation' => 'Impersonation',
|
||||
'import' => 'Import',
|
||||
'introduction' => 'Introduction',
|
||||
'like' => 'Like',
|
||||
'load' => 'Load',
|
||||
'localize' => 'Localize',
|
||||
'log_in' => 'Log In',
|
||||
'log_out' => 'Log Out',
|
||||
'named' => [
|
||||
'add' => 'Add :name',
|
||||
'choose' => 'Choose :name',
|
||||
'create' => 'Create :name',
|
||||
'delete' => 'Delete :name',
|
||||
'duplicate' => 'Duplicate :name',
|
||||
'edit' => 'Edit :name',
|
||||
'export' => 'Export :name',
|
||||
'hide' => 'Hide :name',
|
||||
'import' => 'Import :name',
|
||||
'new' => 'New :name',
|
||||
'restore' => 'Restore :name',
|
||||
'save' => 'Save :name',
|
||||
'search' => 'Search :name',
|
||||
'show' => 'Show :name',
|
||||
'update' => 'Update :name',
|
||||
'view' => 'View :name',
|
||||
],
|
||||
'new' => 'New',
|
||||
'no' => 'No',
|
||||
'open' => 'Open',
|
||||
'open_website' => 'Open on the website',
|
||||
'preview' => 'Preview',
|
||||
'price' => 'Price',
|
||||
'record' => 'Record',
|
||||
'restore' => 'Restore',
|
||||
'save' => 'Save',
|
||||
'save_and_close' => 'Save & Close',
|
||||
'save_and_return' => 'Save & Return',
|
||||
'search' => 'Search',
|
||||
'select' => 'Select',
|
||||
'select_all' => 'Select All',
|
||||
'send' => 'Send',
|
||||
'settings' => 'Settings',
|
||||
'show' => 'Show',
|
||||
'show_all' => 'Show All',
|
||||
'sign_in' => 'Sign In',
|
||||
'solve' => 'Solve',
|
||||
'start' => 'Start',
|
||||
'stop' => 'Stop',
|
||||
'submit' => 'Submit',
|
||||
'subscribe' => 'Subscribe',
|
||||
'switch' => 'Switch',
|
||||
'switch_to_role' => 'Switch To Role',
|
||||
'tag' => 'Tag',
|
||||
'tags' => 'Tags',
|
||||
'target_link' => [
|
||||
'blank' => 'Open in a new window',
|
||||
'parent' => 'Open in a parent frame',
|
||||
'self' => 'Open in a current window',
|
||||
'top' => 'Open in the topmost frame',
|
||||
],
|
||||
'translate' => 'Translate',
|
||||
'translate_it' => 'Translate It',
|
||||
'unpack' => 'Unpack',
|
||||
'unsubscribe' => 'Unsubscribe',
|
||||
'up' => 'Up',
|
||||
'update' => 'Update',
|
||||
'user' => 'User',
|
||||
'view' => 'View',
|
||||
'yes' => 'Yes',
|
||||
];
|
||||
9
lang/en/auth.php
Normal file
9
lang/en/auth.php
Normal file
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'failed' => 'These credentials do not match our records.',
|
||||
'password' => 'The provided password is incorrect.',
|
||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
||||
];
|
||||
84
lang/en/http-statuses.php
Normal file
84
lang/en/http-statuses.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'0' => 'Unknown Error',
|
||||
'100' => 'Continue',
|
||||
'101' => 'Switching Protocols',
|
||||
'102' => 'Processing',
|
||||
'200' => 'OK',
|
||||
'201' => 'Created',
|
||||
'202' => 'Accepted',
|
||||
'203' => 'Non-Authoritative Information',
|
||||
'204' => 'No Content',
|
||||
'205' => 'Reset Content',
|
||||
'206' => 'Partial Content',
|
||||
'207' => 'Multi-Status',
|
||||
'208' => 'Already Reported',
|
||||
'226' => 'IM Used',
|
||||
'300' => 'Multiple Choices',
|
||||
'301' => 'Moved Permanently',
|
||||
'302' => 'Found',
|
||||
'303' => 'See Other',
|
||||
'304' => 'Not Modified',
|
||||
'305' => 'Use Proxy',
|
||||
'307' => 'Temporary Redirect',
|
||||
'308' => 'Permanent Redirect',
|
||||
'400' => 'Bad Request',
|
||||
'401' => 'Unauthorized',
|
||||
'402' => 'Payment Required',
|
||||
'403' => 'Forbidden',
|
||||
'404' => 'Not Found',
|
||||
'405' => 'Method Not Allowed',
|
||||
'406' => 'Not Acceptable',
|
||||
'407' => 'Proxy Authentication Required',
|
||||
'408' => 'Request Timeout',
|
||||
'409' => 'Conflict',
|
||||
'410' => 'Gone',
|
||||
'411' => 'Length Required',
|
||||
'412' => 'Precondition Failed',
|
||||
'413' => 'Payload Too Large',
|
||||
'414' => 'URI Too Long',
|
||||
'415' => 'Unsupported Media Type',
|
||||
'416' => 'Range Not Satisfiable',
|
||||
'417' => 'Expectation Failed',
|
||||
'418' => 'I\'m a teapot',
|
||||
'419' => 'Session Has Expired',
|
||||
'421' => 'Misdirected Request',
|
||||
'422' => 'Unprocessable Entity',
|
||||
'423' => 'Locked',
|
||||
'424' => 'Failed Dependency',
|
||||
'425' => 'Too Early',
|
||||
'426' => 'Upgrade Required',
|
||||
'428' => 'Precondition Required',
|
||||
'429' => 'Too Many Requests',
|
||||
'431' => 'Request Header Fields Too Large',
|
||||
'444' => 'Connection Closed Without Response',
|
||||
'449' => 'Retry With',
|
||||
'451' => 'Unavailable For Legal Reasons',
|
||||
'499' => 'Client Closed Request',
|
||||
'500' => 'Internal Server Error',
|
||||
'501' => 'Not Implemented',
|
||||
'502' => 'Bad Gateway',
|
||||
'503' => 'Maintenance Mode',
|
||||
'504' => 'Gateway Timeout',
|
||||
'505' => 'HTTP Version Not Supported',
|
||||
'506' => 'Variant Also Negotiates',
|
||||
'507' => 'Insufficient Storage',
|
||||
'508' => 'Loop Detected',
|
||||
'509' => 'Bandwidth Limit Exceeded',
|
||||
'510' => 'Not Extended',
|
||||
'511' => 'Network Authentication Required',
|
||||
'520' => 'Unknown Error',
|
||||
'521' => 'Web Server is Down',
|
||||
'522' => 'Connection Timed Out',
|
||||
'523' => 'Origin Is Unreachable',
|
||||
'524' => 'A Timeout Occurred',
|
||||
'525' => 'SSL Handshake Failed',
|
||||
'526' => 'Invalid SSL Certificate',
|
||||
'527' => 'Railgun Error',
|
||||
'598' => 'Network Read Timeout Error',
|
||||
'599' => 'Network Connect Timeout Error',
|
||||
'unknownError' => 'Unknown Error',
|
||||
];
|
||||
8
lang/en/pagination.php
Normal file
8
lang/en/pagination.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'next' => 'Next »',
|
||||
'previous' => '« Previous',
|
||||
];
|
||||
11
lang/en/passwords.php
Normal file
11
lang/en/passwords.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'reset' => 'Your password has been reset.',
|
||||
'sent' => 'We have emailed your password reset link.',
|
||||
'throttled' => 'Please wait before retrying.',
|
||||
'token' => 'This password reset token is invalid.',
|
||||
'user' => 'We can\'t find a user with that email address.',
|
||||
];
|
||||
280
lang/en/validation.php
Normal file
280
lang/en/validation.php
Normal file
@@ -0,0 +1,280 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'accepted' => 'The :attribute field must be accepted.',
|
||||
'accepted_if' => 'The :attribute field must be accepted when :other is :value.',
|
||||
'active_url' => 'The :attribute field must be a valid URL.',
|
||||
'after' => 'The :attribute field must be a date after :date.',
|
||||
'after_or_equal' => 'The :attribute field must be a date after or equal to :date.',
|
||||
'alpha' => 'The :attribute field must only contain letters.',
|
||||
'alpha_dash' => 'The :attribute field must only contain letters, numbers, dashes, and underscores.',
|
||||
'alpha_num' => 'The :attribute field must only contain letters and numbers.',
|
||||
'array' => 'The :attribute field must be an array.',
|
||||
'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.',
|
||||
'before' => 'The :attribute field must be a date before :date.',
|
||||
'before_or_equal' => 'The :attribute field must be a date before or equal to :date.',
|
||||
'between' => [
|
||||
'array' => 'The :attribute field must have between :min and :max items.',
|
||||
'file' => 'The :attribute field must be between :min and :max kilobytes.',
|
||||
'numeric' => 'The :attribute field must be between :min and :max.',
|
||||
'string' => 'The :attribute field must be between :min and :max characters.',
|
||||
],
|
||||
'boolean' => 'The :attribute field must be true or false.',
|
||||
'can' => 'The :attribute field contains an unauthorized value.',
|
||||
'confirmed' => 'The :attribute field confirmation does not match.',
|
||||
'contains' => 'The :attribute field is missing a required value.',
|
||||
'current_password' => 'The password is incorrect.',
|
||||
'date' => 'The :attribute field must be a valid date.',
|
||||
'date_equals' => 'The :attribute field must be a date equal to :date.',
|
||||
'date_format' => 'The :attribute field must match the format :format.',
|
||||
'decimal' => 'The :attribute field must have :decimal decimal places.',
|
||||
'declined' => 'The :attribute field must be declined.',
|
||||
'declined_if' => 'The :attribute field must be declined when :other is :value.',
|
||||
'different' => 'The :attribute field and :other must be different.',
|
||||
'digits' => 'The :attribute field must be :digits digits.',
|
||||
'digits_between' => 'The :attribute field must be between :min and :max digits.',
|
||||
'dimensions' => 'The :attribute field has invalid image dimensions.',
|
||||
'distinct' => 'The :attribute field has a duplicate value.',
|
||||
'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.',
|
||||
'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.',
|
||||
'email' => 'The :attribute field must be a valid email address.',
|
||||
'ends_with' => 'The :attribute field must end with one of the following: :values.',
|
||||
'enum' => 'The selected :attribute is invalid.',
|
||||
'exists' => 'The selected :attribute is invalid.',
|
||||
'extensions' => 'The :attribute field must have one of the following extensions: :values.',
|
||||
'file' => 'The :attribute field must be a file.',
|
||||
'filled' => 'The :attribute field must have a value.',
|
||||
'gt' => [
|
||||
'array' => 'The :attribute field must have more than :value items.',
|
||||
'file' => 'The :attribute field must be greater than :value kilobytes.',
|
||||
'numeric' => 'The :attribute field must be greater than :value.',
|
||||
'string' => 'The :attribute field must be greater than :value characters.',
|
||||
],
|
||||
'gte' => [
|
||||
'array' => 'The :attribute field must have :value items or more.',
|
||||
'file' => 'The :attribute field must be greater than or equal to :value kilobytes.',
|
||||
'numeric' => 'The :attribute field must be greater than or equal to :value.',
|
||||
'string' => 'The :attribute field must be greater than or equal to :value characters.',
|
||||
],
|
||||
'hex_color' => 'The :attribute field must be a valid hexadecimal color.',
|
||||
'image' => 'The :attribute field must be an image.',
|
||||
'in' => 'The selected :attribute is invalid.',
|
||||
'in_array' => 'The :attribute field must exist in :other.',
|
||||
'integer' => 'The :attribute field must be an integer.',
|
||||
'ip' => 'The :attribute field must be a valid IP address.',
|
||||
'ipv4' => 'The :attribute field must be a valid IPv4 address.',
|
||||
'ipv6' => 'The :attribute field must be a valid IPv6 address.',
|
||||
'json' => 'The :attribute field must be a valid JSON string.',
|
||||
'list' => 'The :attribute field must be a list.',
|
||||
'lowercase' => 'The :attribute field must be lowercase.',
|
||||
'lt' => [
|
||||
'array' => 'The :attribute field must have less than :value items.',
|
||||
'file' => 'The :attribute field must be less than :value kilobytes.',
|
||||
'numeric' => 'The :attribute field must be less than :value.',
|
||||
'string' => 'The :attribute field must be less than :value characters.',
|
||||
],
|
||||
'lte' => [
|
||||
'array' => 'The :attribute field must not have more than :value items.',
|
||||
'file' => 'The :attribute field must be less than or equal to :value kilobytes.',
|
||||
'numeric' => 'The :attribute field must be less than or equal to :value.',
|
||||
'string' => 'The :attribute field must be less than or equal to :value characters.',
|
||||
],
|
||||
'mac_address' => 'The :attribute field must be a valid MAC address.',
|
||||
'max' => [
|
||||
'array' => 'The :attribute field must not have more than :max items.',
|
||||
'file' => 'The :attribute field must not be greater than :max kilobytes.',
|
||||
'numeric' => 'The :attribute field must not be greater than :max.',
|
||||
'string' => 'The :attribute field must not be greater than :max characters.',
|
||||
],
|
||||
'max_digits' => 'The :attribute field must not have more than :max digits.',
|
||||
'mimes' => 'The :attribute field must be a file of type: :values.',
|
||||
'mimetypes' => 'The :attribute field must be a file of type: :values.',
|
||||
'min' => [
|
||||
'array' => 'The :attribute field must have at least :min items.',
|
||||
'file' => 'The :attribute field must be at least :min kilobytes.',
|
||||
'numeric' => 'The :attribute field must be at least :min.',
|
||||
'string' => 'The :attribute field must be at least :min characters.',
|
||||
],
|
||||
'min_digits' => 'The :attribute field must have at least :min digits.',
|
||||
'missing' => 'The :attribute field must be missing.',
|
||||
'missing_if' => 'The :attribute field must be missing when :other is :value.',
|
||||
'missing_unless' => 'The :attribute field must be missing unless :other is :value.',
|
||||
'missing_with' => 'The :attribute field must be missing when :values is present.',
|
||||
'missing_with_all' => 'The :attribute field must be missing when :values are present.',
|
||||
'multiple_of' => 'The :attribute field must be a multiple of :value.',
|
||||
'not_in' => 'The selected :attribute is invalid.',
|
||||
'not_regex' => 'The :attribute field format is invalid.',
|
||||
'numeric' => 'The :attribute field must be a number.',
|
||||
'password' => [
|
||||
'letters' => 'The :attribute field must contain at least one letter.',
|
||||
'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.',
|
||||
'numbers' => 'The :attribute field must contain at least one number.',
|
||||
'symbols' => 'The :attribute field must contain at least one symbol.',
|
||||
'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.',
|
||||
],
|
||||
'present' => 'The :attribute field must be present.',
|
||||
'present_if' => 'The :attribute field must be present when :other is :value.',
|
||||
'present_unless' => 'The :attribute field must be present unless :other is :value.',
|
||||
'present_with' => 'The :attribute field must be present when :values is present.',
|
||||
'present_with_all' => 'The :attribute field must be present when :values are present.',
|
||||
'prohibited' => 'The :attribute field is prohibited.',
|
||||
'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
|
||||
'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',
|
||||
'prohibits' => 'The :attribute field prohibits :other from being present.',
|
||||
'regex' => 'The :attribute field format is invalid.',
|
||||
'required' => 'The :attribute field is required.',
|
||||
'required_array_keys' => 'The :attribute field must contain entries for: :values.',
|
||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
||||
'required_if_accepted' => 'The :attribute field is required when :other is accepted.',
|
||||
'required_if_declined' => 'The :attribute field is required when :other is declined.',
|
||||
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
||||
'required_with' => 'The :attribute field is required when :values is present.',
|
||||
'required_with_all' => 'The :attribute field is required when :values are present.',
|
||||
'required_without' => 'The :attribute field is required when :values is not present.',
|
||||
'required_without_all' => 'The :attribute field is required when none of :values are present.',
|
||||
'same' => 'The :attribute field must match :other.',
|
||||
'size' => [
|
||||
'array' => 'The :attribute field must contain :size items.',
|
||||
'file' => 'The :attribute field must be :size kilobytes.',
|
||||
'numeric' => 'The :attribute field must be :size.',
|
||||
'string' => 'The :attribute field must be :size characters.',
|
||||
],
|
||||
'starts_with' => 'The :attribute field must start with one of the following: :values.',
|
||||
'string' => 'The :attribute field must be a string.',
|
||||
'timezone' => 'The :attribute field must be a valid timezone.',
|
||||
'ulid' => 'The :attribute field must be a valid ULID.',
|
||||
'unique' => 'The :attribute has already been taken.',
|
||||
'uploaded' => 'The :attribute failed to upload.',
|
||||
'uppercase' => 'The :attribute field must be uppercase.',
|
||||
'url' => 'The :attribute field must be a valid URL.',
|
||||
'uuid' => 'The :attribute field must be a valid UUID.',
|
||||
'attributes' => [
|
||||
'address' => 'address',
|
||||
'affiliate_url' => 'affiliate URL',
|
||||
'age' => 'age',
|
||||
'amount' => 'amount',
|
||||
'announcement' => 'announcement',
|
||||
'area' => 'area',
|
||||
'audience_prize' => 'audience prize',
|
||||
'audience_winner' => 'audience winner',
|
||||
'available' => 'available',
|
||||
'birthday' => 'birthday',
|
||||
'body' => 'body',
|
||||
'city' => 'city',
|
||||
'company' => 'company',
|
||||
'compilation' => 'compilation',
|
||||
'concept' => 'concept',
|
||||
'conditions' => 'conditions',
|
||||
'content' => 'content',
|
||||
'contest' => 'contest',
|
||||
'country' => 'country',
|
||||
'cover' => 'cover',
|
||||
'created_at' => 'created at',
|
||||
'creator' => 'creator',
|
||||
'currency' => 'currency',
|
||||
'current_password' => 'current password',
|
||||
'customer' => 'customer',
|
||||
'date' => 'date',
|
||||
'date_of_birth' => 'date of birth',
|
||||
'dates' => 'dates',
|
||||
'day' => 'day',
|
||||
'deleted_at' => 'deleted at',
|
||||
'description' => 'description',
|
||||
'display_type' => 'display type',
|
||||
'district' => 'district',
|
||||
'duration' => 'duration',
|
||||
'email' => 'email',
|
||||
'excerpt' => 'excerpt',
|
||||
'filter' => 'filter',
|
||||
'finished_at' => 'finished at',
|
||||
'first_name' => 'first name',
|
||||
'gender' => 'gender',
|
||||
'grand_prize' => 'grand prize',
|
||||
'group' => 'group',
|
||||
'hour' => 'hour',
|
||||
'image' => 'image',
|
||||
'image_desktop' => 'desktop image',
|
||||
'image_main' => 'main image',
|
||||
'image_mobile' => 'mobile image',
|
||||
'images' => 'images',
|
||||
'is_audience_winner' => 'is audience winner',
|
||||
'is_hidden' => 'is hidden',
|
||||
'is_subscribed' => 'is subscribed',
|
||||
'is_visible' => 'is visible',
|
||||
'is_winner' => 'is winner',
|
||||
'items' => 'items',
|
||||
'key' => 'key',
|
||||
'last_name' => 'last name',
|
||||
'lesson' => 'lesson',
|
||||
'line_address_1' => 'line address 1',
|
||||
'line_address_2' => 'line address 2',
|
||||
'login' => 'login',
|
||||
'message' => 'message',
|
||||
'middle_name' => 'middle name',
|
||||
'minute' => 'minute',
|
||||
'mobile' => 'mobile',
|
||||
'month' => 'month',
|
||||
'name' => 'name',
|
||||
'national_code' => 'national code',
|
||||
'number' => 'number',
|
||||
'password' => 'password',
|
||||
'password_confirmation' => 'password confirmation',
|
||||
'phone' => 'phone',
|
||||
'photo' => 'photo',
|
||||
'portfolio' => 'portfolio',
|
||||
'postal_code' => 'postal code',
|
||||
'preview' => 'preview',
|
||||
'price' => 'price',
|
||||
'product_id' => 'product ID',
|
||||
'product_uid' => 'product UID',
|
||||
'product_uuid' => 'product UUID',
|
||||
'promo_code' => 'promo code',
|
||||
'province' => 'province',
|
||||
'quantity' => 'quantity',
|
||||
'reason' => 'reason',
|
||||
'recaptcha_response_field' => 'recaptcha response field',
|
||||
'referee' => 'referee',
|
||||
'referees' => 'referees',
|
||||
'reject_reason' => 'reject reason',
|
||||
'remember' => 'remember',
|
||||
'restored_at' => 'restored at',
|
||||
'result_text_under_image' => 'result text under image',
|
||||
'role' => 'role',
|
||||
'rule' => 'rule',
|
||||
'rules' => 'rules',
|
||||
'second' => 'second',
|
||||
'sex' => 'sex',
|
||||
'shipment' => 'shipment',
|
||||
'short_text' => 'short text',
|
||||
'size' => 'size',
|
||||
'skills' => 'skills',
|
||||
'slug' => 'slug',
|
||||
'specialization' => 'specialization',
|
||||
'started_at' => 'started at',
|
||||
'state' => 'state',
|
||||
'status' => 'status',
|
||||
'street' => 'street',
|
||||
'student' => 'student',
|
||||
'subject' => 'subject',
|
||||
'tag' => 'tag',
|
||||
'tags' => 'tags',
|
||||
'teacher' => 'teacher',
|
||||
'terms' => 'terms',
|
||||
'test_description' => 'test description',
|
||||
'test_locale' => 'test locale',
|
||||
'test_name' => 'test name',
|
||||
'text' => 'text',
|
||||
'time' => 'time',
|
||||
'title' => 'title',
|
||||
'type' => 'type',
|
||||
'updated_at' => 'updated at',
|
||||
'user' => 'user',
|
||||
'username' => 'username',
|
||||
'value' => 'value',
|
||||
'winner' => 'winner',
|
||||
'work' => 'work',
|
||||
'year' => 'year',
|
||||
],
|
||||
];
|
||||
263
lang/es.json
Normal file
263
lang/es.json
Normal file
@@ -0,0 +1,263 @@
|
||||
{
|
||||
"(and :count more error)": "(y :count error más)",
|
||||
"(and :count more errors)": "(y :count error más)|(y :count errores más)|(y :count errores más)",
|
||||
"A decryption key is required.": "Se requiere una clave de descifrado.",
|
||||
"A new verification link has been sent to the email address you provided during registration.": "Se ha enviado un nuevo enlace de verificación a la dirección de correo electrónico que proporcionó durante el registro.",
|
||||
"A new verification link has been sent to your email address.": "Se ha enviado un nuevo enlace de verificación a su dirección de correo electrónico.",
|
||||
"A Timeout Occurred": "Se produjo un tiempo de espera",
|
||||
"Accept": "Aceptar",
|
||||
"Accepted": "Aceptado",
|
||||
"Action": "Acción",
|
||||
"Actions": "Acciones",
|
||||
"Add": "Añadir",
|
||||
"Add :name": "Agregar :name",
|
||||
"Admin": "Administrar",
|
||||
"Agree": "Aceptar",
|
||||
"All rights reserved.": "Todos los derechos reservados.",
|
||||
"Already registered?": "¿Ya se registró?",
|
||||
"Already Reported": "Ya Reportado",
|
||||
"Archive": "Archivar",
|
||||
"Are you sure you want to delete your account?": "¿Está seguro que desea eliminar su cuenta?",
|
||||
"Assign": "Asignar",
|
||||
"Associate": "Asociar",
|
||||
"Attach": "Adjuntar",
|
||||
"Bad Gateway": "Mala puerta de enlace",
|
||||
"Bad Request": "Solicitud incorrecta",
|
||||
"Bandwidth Limit Exceeded": "Límite de ancho de banda excedido",
|
||||
"Browse": "Navegar",
|
||||
"Cancel": "Cancelar",
|
||||
"Choose": "Elija",
|
||||
"Choose :name": "Elegir :name",
|
||||
"Choose File": "Elija archivo",
|
||||
"Choose Image": "Elegir Imagen",
|
||||
"Click here to re-send the verification email.": "Haga clic aquí para reenviar el correo de verificación.",
|
||||
"Click to copy": "Haga clic para copiar",
|
||||
"Client Closed Request": "Solicitud cerrada del cliente",
|
||||
"Close": "Cerrar",
|
||||
"Collapse": "Colapsar",
|
||||
"Collapse All": "Colapsar todo",
|
||||
"Comment": "Comentar",
|
||||
"Confirm": "Confirmar",
|
||||
"Confirm Password": "Confirmar contraseña",
|
||||
"Conflict": "Conflicto",
|
||||
"Connect": "Conectar",
|
||||
"Connection Closed Without Response": "Conexión cerrada sin respuesta",
|
||||
"Connection Timed Out": "Tiempo de conexión agotado",
|
||||
"Continue": "Continuar",
|
||||
"Create": "Crear",
|
||||
"Create :name": "Crear :name",
|
||||
"Created": "Creado",
|
||||
"Current Password": "Contraseña actual",
|
||||
"Dashboard": "Panel",
|
||||
"Delete": "Eliminar",
|
||||
"Delete :name": "Eliminar :name",
|
||||
"Delete Account": "Borrar cuenta",
|
||||
"Detach": "Desvincular",
|
||||
"Details": "Detalles",
|
||||
"Disable": "Deshabilitar",
|
||||
"Discard": "Descartar",
|
||||
"Done": "Hecho",
|
||||
"Down": "Abajo",
|
||||
"Duplicate": "Duplicar",
|
||||
"Duplicate :name": "Duplicar :name",
|
||||
"Edit": "Editar",
|
||||
"Edit :name": "Editar :name",
|
||||
"Email": "Correo electrónico",
|
||||
"email": "El campo :attribute no es un correo válido.",
|
||||
"Email Password Reset Link": "Enviar enlace para restablecer contraseña",
|
||||
"Enable": "Habilitar",
|
||||
"Encrypted environment file already exists.": "El archivo de entorno cifrado ya existe.",
|
||||
"Encrypted environment file not found.": "No se encontró el archivo de entorno cifrado.",
|
||||
"Ensure your account is using a long, random password to stay secure.": "Asegúrese que su cuenta esté usando una contraseña larga y aleatoria para mantenerse seguro.",
|
||||
"Environment file already exists.": "El archivo de entorno ya existe.",
|
||||
"Environment file not found.": "Archivo de entorno no encontrado.",
|
||||
"errors": "errores",
|
||||
"Expand": "Expandir",
|
||||
"Expand All": "Expandir todo",
|
||||
"Expectation Failed": "Expectativa fallida",
|
||||
"Explanation": "Explicación",
|
||||
"Export": "Exportar",
|
||||
"Export :name": "Exportar :name",
|
||||
"Failed Dependency": "Dependencia fallida",
|
||||
"File": "Archivo",
|
||||
"Files": "Archivos",
|
||||
"Forbidden": "Prohibido",
|
||||
"Forgot your password?": "¿Olvidó su contraseña?",
|
||||
"Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.": "¿Olvidó su contraseña? No hay problema. Simplemente déjenos saber su dirección de correo electrónico y le enviaremos un enlace para restablecer la contraseña que le permitirá elegir una nueva.",
|
||||
"Found": "Encontrado",
|
||||
"Gateway Timeout": "Tiempo de espera de puerta de enlace",
|
||||
"Go Home": "Ir a inicio",
|
||||
"Go to page :page": "Ir a la página :page",
|
||||
"Gone": "Recurso no disponible",
|
||||
"Hello!": "¡Hola!",
|
||||
"Hide": "Ocultar",
|
||||
"Hide :name": "Ocultar :name",
|
||||
"Home": "Inicio",
|
||||
"HTTP Version Not Supported": "Versión HTTP no compatible",
|
||||
"I'm a teapot": "Soy una tetera",
|
||||
"If you did not create an account, no further action is required.": "Si no ha creado una cuenta, no se requiere ninguna acción adicional.",
|
||||
"If you did not request a password reset, no further action is required.": "Si no ha solicitado el restablecimiento de contraseña, omita este mensaje de correo electrónico.",
|
||||
"If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "Si está teniendo problemas al hacer clic en el botón \":actionText\", copie y pegue la URL de abajo\nen su navegador web:",
|
||||
"IM Used": "IM usado",
|
||||
"Image": "Imagen",
|
||||
"Impersonate": "Personificar",
|
||||
"Impersonation": "Personificación",
|
||||
"Import": "Importar",
|
||||
"Import :name": "Importar :name",
|
||||
"Insufficient Storage": "Espacio insuficiente",
|
||||
"Internal Server Error": "Error interno del servidor",
|
||||
"Introduction": "Introducción",
|
||||
"Invalid filename.": "Nombre de archivo no válido.",
|
||||
"Invalid JSON was returned from the route.": "Se devolvió un JSON no válido desde la ruta.",
|
||||
"Invalid SSL Certificate": "Certificado SSL no válido",
|
||||
"length": "longitud",
|
||||
"Length Required": "Longitud requerida",
|
||||
"Like": "Me gusta",
|
||||
"Load": "Cargar",
|
||||
"Localize": "Localizar",
|
||||
"Location": "Ubicación",
|
||||
"Locked": "Bloqueado",
|
||||
"Log In": "Iniciar sesión",
|
||||
"Log in": "Iniciar sesión",
|
||||
"Log Out": "Finalizar sesión",
|
||||
"Login": "Iniciar sesión",
|
||||
"Logout": "Finalizar sesión",
|
||||
"Loop Detected": "Bucle detectado",
|
||||
"Maintenance Mode": "Modo de mantenimiento",
|
||||
"Method Not Allowed": "Método no permitido",
|
||||
"Misdirected Request": "Solicitud mal dirigida",
|
||||
"Moved Permanently": "Movido permanentemente",
|
||||
"Multi-Status": "Multiestado",
|
||||
"Multiple Choices": "Múltiples opciones",
|
||||
"Name": "Nombre",
|
||||
"name": "nombre",
|
||||
"Network Authentication Required": "Se requiere autenticación de red",
|
||||
"Network Connect Timeout Error": "Error de tiempo de espera de conexión de red",
|
||||
"Network Read Timeout Error": "Error de tiempo de espera de lectura de red",
|
||||
"New": "Nuevo",
|
||||
"New :name": "Nuevo :name",
|
||||
"New Password": "Nueva Contraseña",
|
||||
"No": "No",
|
||||
"No Content": "Sin contenido",
|
||||
"Non-Authoritative Information": "Información no autorizada",
|
||||
"Not Acceptable": "Inaceptable",
|
||||
"Not Extended": "no extendido",
|
||||
"Not Found": "No encontrado",
|
||||
"Not Implemented": "No se ha implementado",
|
||||
"Not Modified": "No modificado",
|
||||
"of": "de",
|
||||
"OK": "Correcto",
|
||||
"Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "Una vez que se elimine su cuenta, todos sus recursos y datos se eliminarán de forma permanente. Antes de borrar su cuenta, por favor descargue cualquier dato o información que desee conservar.",
|
||||
"Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "Una vez que se elimine su cuenta, todos sus recursos y datos se eliminarán de forma permanente. Ingrese su contraseña para confirmar que desea eliminar su cuenta de forma permanente.",
|
||||
"Open": "Abrir",
|
||||
"Open in a current window": "Abrir en una ventana actual",
|
||||
"Open in a new window": "Abrir en una ventana nueva",
|
||||
"Open in a parent frame": "Abrir en un marco principal",
|
||||
"Open in the topmost frame": "Abrir en el marco superior",
|
||||
"Open on the website": "Abrir en el sitio web",
|
||||
"Origin Is Unreachable": "El origen es inalcanzable",
|
||||
"Page Expired": "Página expirada",
|
||||
"Pagination Navigation": "Navegación por los enlaces de paginación",
|
||||
"Partial Content": "Contenido parcial",
|
||||
"Password": "Contraseña",
|
||||
"password": "La contraseña es incorrecta.",
|
||||
"Payload Too Large": "Solicitud demasiado grande",
|
||||
"Payment Required": "Pago requerido",
|
||||
"Permanent Redirect": "Redirección permanente",
|
||||
"Please click the button below to verify your email address.": "Por favor, haga clic en el botón de abajo para verificar su dirección de correo electrónico.",
|
||||
"Precondition Failed": "Error de condición previa",
|
||||
"Precondition Required": "Precondición requerida",
|
||||
"Preview": "Previsualizar",
|
||||
"Price": "Precio",
|
||||
"Processing": "Procesando",
|
||||
"Profile": "Perfil",
|
||||
"Profile Information": "Información de perfil",
|
||||
"Proxy Authentication Required": "Se requiere autenticación proxy",
|
||||
"Railgun Error": "Error de cañón de riel",
|
||||
"Range Not Satisfiable": "Rango no satisfactorio",
|
||||
"Record": "Registro",
|
||||
"Regards,": "Saludos,",
|
||||
"Register": "Registrarse",
|
||||
"Remember me": "Mantener sesión activa",
|
||||
"Request Header Fields Too Large": "Campos de encabezado de solicitud demasiado grandes",
|
||||
"Request Timeout": "Solicitud de tiempo de espera",
|
||||
"Resend Verification Email": "Reenviar correo de verificación",
|
||||
"Reset Content": "Restablecer contenido",
|
||||
"Reset Password": "Restablecer contraseña",
|
||||
"Reset Password Notification": "Notificación de restablecimiento de contraseña",
|
||||
"Restore": "Restaurar",
|
||||
"Restore :name": "Restaurar :name",
|
||||
"results": "resultados",
|
||||
"Retry With": "Reintentar con",
|
||||
"Save": "Guardar",
|
||||
"Save & Close": "Guardar y cerrar",
|
||||
"Save & Return": "Guardar y volver",
|
||||
"Save :name": "Guardar :name",
|
||||
"Saved.": "Guardado.",
|
||||
"Search": "Buscar",
|
||||
"Search :name": "Buscar :name",
|
||||
"See Other": "Ver otros",
|
||||
"Select": "Seleccione",
|
||||
"Select All": "Seleccionar todo",
|
||||
"Send": "Enviar",
|
||||
"Server Error": "Error del servidor",
|
||||
"Service Unavailable": "Servicio no disponible",
|
||||
"Session Has Expired": "La sesión ha expirado",
|
||||
"Settings": "Ajustes",
|
||||
"Show": "Mostrar",
|
||||
"Show :name": "Mostrar :name",
|
||||
"Show All": "Mostrar todo",
|
||||
"Showing": "Mostrando",
|
||||
"Sign In": "Iniciar sesión",
|
||||
"Solve": "Resolver",
|
||||
"SSL Handshake Failed": "Protocolo de enlace SSL fallido",
|
||||
"Start": "Comenzar",
|
||||
"Stop": "Detener",
|
||||
"Submit": "Enviar",
|
||||
"Subscribe": "Suscriba",
|
||||
"Switch": "Cambiar",
|
||||
"Switch To Role": "Cambiar de rol",
|
||||
"Switching Protocols": "Protocolos de conmutación",
|
||||
"Tag": "Etiqueta",
|
||||
"Tags": "Etiquetas",
|
||||
"Temporary Redirect": "Redirección temporal",
|
||||
"Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.": "¡Gracias por registrarse! Antes de comenzar, ¿podría verificar su dirección de correo electrónico haciendo clic en el enlace que le acabamos de enviar? Si no recibió el correo electrónico, con gusto le enviaremos otro.",
|
||||
"The given data was invalid.": "Los datos proporcionados no son válidos.",
|
||||
"The response is not a streamed response.": "La respuesta no es una respuesta transmitida.",
|
||||
"The response is not a view.": "La respuesta no es una vista.",
|
||||
"This action is unauthorized.": "Esta acción no está autorizada.",
|
||||
"This is a secure area of the application. Please confirm your password before continuing.": "Esta es un área segura de la aplicación. Confirme su contraseña antes de continuar.",
|
||||
"This password reset link will expire in :count minutes.": "Este enlace de restablecimiento de contraseña expirará en :count minutos.",
|
||||
"to": "al",
|
||||
"Toggle navigation": "Alternar navegación",
|
||||
"Too Early": "Demasiado temprano",
|
||||
"Too Many Requests": "Demasiadas peticiones",
|
||||
"Translate": "Traducir",
|
||||
"Translate It": "Traducirlo",
|
||||
"Unauthorized": "No autorizado",
|
||||
"Unavailable For Legal Reasons": "No disponible por razones legales",
|
||||
"Unknown Error": "Error desconocido",
|
||||
"Unpack": "Desglosar",
|
||||
"Unprocessable Entity": "Entidad no procesable",
|
||||
"Unsubscribe": "Darse de baja",
|
||||
"Unsupported Media Type": "Tipo de medio no admitido",
|
||||
"Up": "Arriba",
|
||||
"Update": "Actualizar",
|
||||
"Update :name": "Actualizar :name",
|
||||
"Update Password": "Actualizar contraseña",
|
||||
"Update your account's profile information and email address.": "Actualice la información de su cuenta y la dirección de correo electrónico.",
|
||||
"Upgrade Required": "Se requiere actualización",
|
||||
"URI Too Long": "URI demasiado largo",
|
||||
"Use Proxy": "Usa proxy",
|
||||
"User": "Usuario",
|
||||
"Variant Also Negotiates": "Variante También Negocia",
|
||||
"Verify Email Address": "Confirme su correo electrónico",
|
||||
"View": "Ver",
|
||||
"View :name": "Ver :name",
|
||||
"Web Server is Down": "El servidor web está caído",
|
||||
"Whoops!": "¡Ups!",
|
||||
"Yes": "Sí",
|
||||
"You are receiving this email because we received a password reset request for your account.": "Ha recibido este mensaje porque se solicitó un restablecimiento de contraseña para su cuenta.",
|
||||
"You're logged in!": "¡Usted está conectado!",
|
||||
"Your email address is unverified.": "Su dirección de correo electrónico no está verificada."
|
||||
}
|
||||
119
lang/es/actions.php
Normal file
119
lang/es/actions.php
Normal file
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'accept' => 'Aceptar',
|
||||
'action' => 'Acción',
|
||||
'actions' => 'Acciones',
|
||||
'add' => 'Agregar',
|
||||
'admin' => 'Administrar',
|
||||
'agree' => 'Aceptar',
|
||||
'archive' => 'Archivar',
|
||||
'assign' => 'Asignar',
|
||||
'associate' => 'Asociar',
|
||||
'attach' => 'Adjuntar',
|
||||
'browse' => 'Navegar',
|
||||
'cancel' => 'Cancelar',
|
||||
'choose' => 'Elegir',
|
||||
'choose_file' => 'Elegir archivo',
|
||||
'choose_image' => 'Elegir Imagen',
|
||||
'click_to_copy' => 'Haga clic para copiar',
|
||||
'close' => 'Cerrar',
|
||||
'collapse' => 'Colapsar',
|
||||
'collapse_all' => 'Colapsar todo',
|
||||
'comment' => 'Comentar',
|
||||
'confirm' => 'Confirmar',
|
||||
'connect' => 'Conectar',
|
||||
'create' => 'Crear',
|
||||
'delete' => 'Borrar',
|
||||
'detach' => 'Desasociar',
|
||||
'details' => 'Detalles',
|
||||
'disable' => 'Desactivar',
|
||||
'discard' => 'Descartar',
|
||||
'done' => 'Hecho',
|
||||
'down' => 'Abajo',
|
||||
'duplicate' => 'Duplicar',
|
||||
'edit' => 'Editar',
|
||||
'enable' => 'Permitir',
|
||||
'expand' => 'Expandir',
|
||||
'expand_all' => 'Expandir todo',
|
||||
'explanation' => 'Explicación',
|
||||
'export' => 'Exportar',
|
||||
'file' => 'Archivo',
|
||||
'files' => 'Archivos',
|
||||
'go_home' => 'Ir a Inicio',
|
||||
'hide' => 'Ocultar',
|
||||
'home' => 'Inicio',
|
||||
'image' => 'Imagen',
|
||||
'impersonate' => 'Personificar',
|
||||
'impersonation' => 'Personificación',
|
||||
'import' => 'Importar',
|
||||
'introduction' => 'Introducción',
|
||||
'like' => 'Me gusta',
|
||||
'load' => 'Cargar',
|
||||
'localize' => 'Localizar',
|
||||
'log_in' => 'Acceder',
|
||||
'log_out' => 'Cerrar sesión',
|
||||
'named' => [
|
||||
'add' => 'Agregar :name',
|
||||
'choose' => 'Elegir :name',
|
||||
'create' => 'Crear :name',
|
||||
'delete' => 'Eliminar :name',
|
||||
'duplicate' => 'Duplicar :name',
|
||||
'edit' => 'Editar :name',
|
||||
'export' => 'Exportar :name',
|
||||
'hide' => 'Ocultar :name',
|
||||
'import' => 'Importar :name',
|
||||
'new' => 'Nuevo :name',
|
||||
'restore' => 'Restaurar :name',
|
||||
'save' => 'Guardar :name',
|
||||
'search' => 'Buscar :name',
|
||||
'show' => 'Mostrar :name',
|
||||
'update' => 'Actualizar :name',
|
||||
'view' => 'Ver :name',
|
||||
],
|
||||
'new' => 'Nuevo',
|
||||
'no' => 'No',
|
||||
'open' => 'Abrir',
|
||||
'open_website' => 'Abrir en el sitio web',
|
||||
'preview' => 'Previsualizar',
|
||||
'price' => 'Precio',
|
||||
'record' => 'Registro',
|
||||
'restore' => 'Restaurar',
|
||||
'save' => 'Guardar',
|
||||
'save_and_close' => 'Guardar y cerrar',
|
||||
'save_and_return' => 'Guardar y volver',
|
||||
'search' => 'Buscar',
|
||||
'select' => 'Seleccionar',
|
||||
'select_all' => 'Seleccionar todo',
|
||||
'send' => 'Enviar',
|
||||
'settings' => 'Ajustes',
|
||||
'show' => 'Mostrar',
|
||||
'show_all' => 'Mostrar todo',
|
||||
'sign_in' => 'Iniciar sesión',
|
||||
'solve' => 'Resolver',
|
||||
'start' => 'Comenzar',
|
||||
'stop' => 'Detener',
|
||||
'submit' => 'Enviar',
|
||||
'subscribe' => 'Suscribir',
|
||||
'switch' => 'Cambiar',
|
||||
'switch_to_role' => 'Cambiar de rol',
|
||||
'tag' => 'Etiqueta',
|
||||
'tags' => 'Etiquetas',
|
||||
'target_link' => [
|
||||
'blank' => 'Abrir en una ventana nueva',
|
||||
'parent' => 'Abrir en el marco principal',
|
||||
'self' => 'Abrir en la ventana actual',
|
||||
'top' => 'Abrir en el marco superior',
|
||||
],
|
||||
'translate' => 'Traducir',
|
||||
'translate_it' => 'Traducirlo',
|
||||
'unpack' => 'Desglosar',
|
||||
'unsubscribe' => 'Darse de baja',
|
||||
'up' => 'Arriba',
|
||||
'update' => 'Actualizar',
|
||||
'user' => 'Usuario',
|
||||
'view' => 'Ver',
|
||||
'yes' => 'Sí',
|
||||
];
|
||||
9
lang/es/auth.php
Normal file
9
lang/es/auth.php
Normal file
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'failed' => 'Estas credenciales no coinciden con nuestros registros.',
|
||||
'password' => 'La contraseña es incorrecta.',
|
||||
'throttle' => 'Demasiados intentos de acceso. Por favor intente nuevamente en :seconds segundos.',
|
||||
];
|
||||
84
lang/es/http-statuses.php
Normal file
84
lang/es/http-statuses.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'0' => 'Error desconocido',
|
||||
'100' => 'Continuar',
|
||||
'101' => 'Protocolos de conmutación',
|
||||
'102' => 'Procesando',
|
||||
'200' => 'DE ACUERDO',
|
||||
'201' => 'Creado',
|
||||
'202' => 'Aceptado',
|
||||
'203' => 'Información no autorizada',
|
||||
'204' => 'Sin contenido',
|
||||
'205' => 'Restablecer contenido',
|
||||
'206' => 'Contenido parcial',
|
||||
'207' => 'Multiestado',
|
||||
'208' => 'Ya Reportado',
|
||||
'226' => 'IM usado',
|
||||
'300' => 'Múltiples opciones',
|
||||
'301' => 'Movido permanentemente',
|
||||
'302' => 'Encontrado',
|
||||
'303' => 'Ver otros',
|
||||
'304' => 'No modificado',
|
||||
'305' => 'Usa proxy',
|
||||
'307' => 'Redirección temporal',
|
||||
'308' => 'Redirección permanente',
|
||||
'400' => 'Solicitud incorrecta',
|
||||
'401' => 'No autorizado',
|
||||
'402' => 'Pago requerido',
|
||||
'403' => 'Prohibido',
|
||||
'404' => 'No encontrado',
|
||||
'405' => 'Método no permitido',
|
||||
'406' => 'Inaceptable',
|
||||
'407' => 'Se requiere autenticación proxy',
|
||||
'408' => 'Solicitud de tiempo de espera',
|
||||
'409' => 'Conflicto',
|
||||
'410' => 'Recurso no disponible',
|
||||
'411' => 'Longitud requerida',
|
||||
'412' => 'Error de condición previa',
|
||||
'413' => 'Solicitud demasiado grande',
|
||||
'414' => 'URI demasiado largo',
|
||||
'415' => 'Tipo de medio no admitido',
|
||||
'416' => 'Rango no satisfactorio',
|
||||
'417' => 'Expectativa fallida',
|
||||
'418' => 'Soy una tetera',
|
||||
'419' => 'La sesión ha expirado',
|
||||
'421' => 'Solicitud mal dirigida',
|
||||
'422' => 'Entidad no procesable',
|
||||
'423' => 'Bloqueado',
|
||||
'424' => 'Dependencia fallida',
|
||||
'425' => 'Demasiado temprano',
|
||||
'426' => 'Se requiere actualización',
|
||||
'428' => 'Precondición requerida',
|
||||
'429' => 'Demasiadas solicitudes',
|
||||
'431' => 'Campos de encabezado de solicitud demasiado grandes',
|
||||
'444' => 'Conexión cerrada sin respuesta',
|
||||
'449' => 'Reintentar con',
|
||||
'451' => 'No disponible por razones legales',
|
||||
'499' => 'Solicitud cerrada del cliente',
|
||||
'500' => 'Error interno del servidor',
|
||||
'501' => 'No se ha implementado',
|
||||
'502' => 'Mala puerta de enlace',
|
||||
'503' => 'Modo de mantenimiento',
|
||||
'504' => 'Tiempo de espera de puerta de enlace',
|
||||
'505' => 'Versión HTTP no compatible',
|
||||
'506' => 'Variante También Negocia',
|
||||
'507' => 'Espacio insuficiente',
|
||||
'508' => 'Bucle detectado',
|
||||
'509' => 'Límite de ancho de banda excedido',
|
||||
'510' => 'no extendido',
|
||||
'511' => 'Se requiere autenticación de red',
|
||||
'520' => 'Error desconocido',
|
||||
'521' => 'El servidor web está caído',
|
||||
'522' => 'Tiempo de conexión agotado',
|
||||
'523' => 'El origen es inalcanzable',
|
||||
'524' => 'Se produjo un tiempo de espera',
|
||||
'525' => 'Protocolo de enlace SSL fallido',
|
||||
'526' => 'Certificado SSL no válido',
|
||||
'527' => 'Error de cañón de riel',
|
||||
'598' => 'Error de tiempo de espera de lectura de red',
|
||||
'599' => 'Error de tiempo de espera de conexión de red',
|
||||
'unknownError' => 'Error desconocido',
|
||||
];
|
||||
8
lang/es/pagination.php
Normal file
8
lang/es/pagination.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'next' => 'Siguiente »',
|
||||
'previous' => '« Anterior',
|
||||
];
|
||||
11
lang/es/passwords.php
Normal file
11
lang/es/passwords.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'reset' => 'Su contraseña ha sido restablecida.',
|
||||
'sent' => 'Le hemos enviado por correo electrónico el enlace para restablecer su contraseña.',
|
||||
'throttled' => 'Por favor espere antes de intentar de nuevo.',
|
||||
'token' => 'El token de restablecimiento de contraseña es inválido.',
|
||||
'user' => 'No encontramos ningún usuario con ese correo electrónico.',
|
||||
];
|
||||
280
lang/es/validation.php
Normal file
280
lang/es/validation.php
Normal file
@@ -0,0 +1,280 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'accepted' => 'El campo :attribute debe ser aceptado.',
|
||||
'accepted_if' => 'El campo :attribute debe ser aceptado cuando :other sea :value.',
|
||||
'active_url' => 'El campo :attribute debe ser una URL válida.',
|
||||
'after' => 'El campo :attribute debe ser una fecha posterior a :date.',
|
||||
'after_or_equal' => 'El campo :attribute debe ser una fecha posterior o igual a :date.',
|
||||
'alpha' => 'El campo :attribute sólo debe contener letras.',
|
||||
'alpha_dash' => 'El campo :attribute sólo debe contener letras, números, guiones y guiones bajos.',
|
||||
'alpha_num' => 'El campo :attribute sólo debe contener letras y números.',
|
||||
'array' => 'El campo :attribute debe ser un conjunto.',
|
||||
'ascii' => 'El campo :attribute solo debe contener caracteres alfanuméricos y símbolos de un solo byte.',
|
||||
'before' => 'El campo :attribute debe ser una fecha anterior a :date.',
|
||||
'before_or_equal' => 'El campo :attribute debe ser una fecha anterior o igual a :date.',
|
||||
'between' => [
|
||||
'array' => 'El campo :attribute tiene que tener entre :min - :max elementos.',
|
||||
'file' => 'El campo :attribute debe pesar entre :min - :max kilobytes.',
|
||||
'numeric' => 'El campo :attribute tiene que estar entre :min - :max.',
|
||||
'string' => 'El campo :attribute tiene que tener entre :min - :max caracteres.',
|
||||
],
|
||||
'boolean' => 'El campo :attribute debe tener un valor verdadero o falso.',
|
||||
'can' => 'El campo :attribute contiene un valor no autorizado.',
|
||||
'confirmed' => 'La confirmación de :attribute no coincide.',
|
||||
'contains' => 'Al campo :attribute le falta un valor obligatorio.',
|
||||
'current_password' => 'La contraseña es incorrecta.',
|
||||
'date' => 'El campo :attribute debe ser una fecha válida.',
|
||||
'date_equals' => 'El campo :attribute debe ser una fecha igual a :date.',
|
||||
'date_format' => 'El campo :attribute debe coincidir con el formato :format.',
|
||||
'decimal' => 'El campo :attribute debe tener :decimal cifras decimales.',
|
||||
'declined' => 'El campo :attribute debe ser rechazado.',
|
||||
'declined_if' => 'El campo :attribute debe ser rechazado cuando :other sea :value.',
|
||||
'different' => 'El campo :attribute y :other deben ser diferentes.',
|
||||
'digits' => 'El campo :attribute debe tener :digits dígitos.',
|
||||
'digits_between' => 'El campo :attribute debe tener entre :min y :max dígitos.',
|
||||
'dimensions' => 'El campo :attribute tiene dimensiones de imagen no válidas.',
|
||||
'distinct' => 'El campo :attribute contiene un valor duplicado.',
|
||||
'doesnt_end_with' => 'El campo :attribute no debe finalizar con uno de los siguientes: :values.',
|
||||
'doesnt_start_with' => 'El campo :attribute no debe comenzar con uno de los siguientes: :values.',
|
||||
'email' => 'El campo :attribute no es un correo válido.',
|
||||
'ends_with' => 'El campo :attribute debe finalizar con uno de los siguientes valores: :values',
|
||||
'enum' => 'El campo :attribute no está en la lista de valores permitidos.',
|
||||
'exists' => 'El campo :attribute no existe.',
|
||||
'extensions' => 'El campo :attribute debe tener una de las siguientes extensiones: :values.',
|
||||
'file' => 'El campo :attribute debe ser un archivo.',
|
||||
'filled' => 'El campo :attribute es obligatorio.',
|
||||
'gt' => [
|
||||
'array' => 'El campo :attribute debe tener más de :value elementos.',
|
||||
'file' => 'El campo :attribute debe tener más de :value kilobytes.',
|
||||
'numeric' => 'El campo :attribute debe ser mayor que :value.',
|
||||
'string' => 'El campo :attribute debe tener más de :value caracteres.',
|
||||
],
|
||||
'gte' => [
|
||||
'array' => 'El campo :attribute debe tener como mínimo :value elementos.',
|
||||
'file' => 'El campo :attribute debe tener como mínimo :value kilobytes.',
|
||||
'numeric' => 'El campo :attribute debe ser como mínimo :value.',
|
||||
'string' => 'El campo :attribute debe tener como mínimo :value caracteres.',
|
||||
],
|
||||
'hex_color' => 'El campo :attribute debe tener un color hexadecimal válido.',
|
||||
'image' => 'El campo :attribute debe ser una imagen.',
|
||||
'in' => 'El campo :attribute no está en la lista de valores permitidos.',
|
||||
'in_array' => 'El campo :attribute debe existir en :other.',
|
||||
'integer' => 'El campo :attribute debe ser un número entero.',
|
||||
'ip' => 'El campo :attribute debe ser una dirección IP válida.',
|
||||
'ipv4' => 'El campo :attribute debe ser una dirección IPv4 válida.',
|
||||
'ipv6' => 'El campo :attribute debe ser una dirección IPv6 válida.',
|
||||
'json' => 'El campo :attribute debe ser una cadena JSON válida.',
|
||||
'list' => 'El campo :attribute debe ser una lista.',
|
||||
'lowercase' => 'El campo :attribute debe estar en minúscula.',
|
||||
'lt' => [
|
||||
'array' => 'El campo :attribute debe tener menos de :value elementos.',
|
||||
'file' => 'El campo :attribute debe tener menos de :value kilobytes.',
|
||||
'numeric' => 'El campo :attribute debe ser menor que :value.',
|
||||
'string' => 'El campo :attribute debe tener menos de :value caracteres.',
|
||||
],
|
||||
'lte' => [
|
||||
'array' => 'El campo :attribute debe tener como máximo :value elementos.',
|
||||
'file' => 'El campo :attribute debe tener como máximo :value kilobytes.',
|
||||
'numeric' => 'El campo :attribute debe ser como máximo :value.',
|
||||
'string' => 'El campo :attribute debe tener como máximo :value caracteres.',
|
||||
],
|
||||
'mac_address' => 'El campo :attribute debe ser una dirección MAC válida.',
|
||||
'max' => [
|
||||
'array' => 'El campo :attribute no debe tener más de :max elementos.',
|
||||
'file' => 'El campo :attribute no debe ser mayor que :max kilobytes.',
|
||||
'numeric' => 'El campo :attribute no debe ser mayor que :max.',
|
||||
'string' => 'El campo :attribute no debe ser mayor que :max caracteres.',
|
||||
],
|
||||
'max_digits' => 'El campo :attribute no debe tener más de :max dígitos.',
|
||||
'mimes' => 'El campo :attribute debe ser un archivo con formato: :values.',
|
||||
'mimetypes' => 'El campo :attribute debe ser un archivo con formato: :values.',
|
||||
'min' => [
|
||||
'array' => 'El campo :attribute debe tener al menos :min elementos.',
|
||||
'file' => 'El tamaño de :attribute debe ser de al menos :min kilobytes.',
|
||||
'numeric' => 'El tamaño de :attribute debe ser de al menos :min.',
|
||||
'string' => 'El campo :attribute debe contener al menos :min caracteres.',
|
||||
],
|
||||
'min_digits' => 'El campo :attribute debe tener al menos :min dígitos.',
|
||||
'missing' => 'El campo :attribute no debe estar presente.',
|
||||
'missing_if' => 'El campo :attribute no debe estar presente cuando :other sea :value.',
|
||||
'missing_unless' => 'El campo :attribute no debe estar presente a menos que :other sea :value.',
|
||||
'missing_with' => 'El campo :attribute no debe estar presente si alguno de los campos :values está presente.',
|
||||
'missing_with_all' => 'El campo :attribute no debe estar presente cuando los campos :values estén presentes.',
|
||||
'multiple_of' => 'El campo :attribute debe ser múltiplo de :value',
|
||||
'not_in' => 'El campo :attribute no debe estar en la lista.',
|
||||
'not_regex' => 'El formato del campo :attribute no es válido.',
|
||||
'numeric' => 'El campo :attribute debe ser numérico.',
|
||||
'password' => [
|
||||
'letters' => 'La :attribute debe contener al menos una letra.',
|
||||
'mixed' => 'La :attribute debe contener al menos una letra mayúscula y una minúscula.',
|
||||
'numbers' => 'La :attribute debe contener al menos un número.',
|
||||
'symbols' => 'La :attribute debe contener al menos un símbolo.',
|
||||
'uncompromised' => 'La :attribute proporcionada se ha visto comprometida en una filtración de datos (data leak). Elija una :attribute diferente.',
|
||||
],
|
||||
'present' => 'El campo :attribute debe estar presente.',
|
||||
'present_if' => 'El campo :attribute debe estar presente cuando :other es :value.',
|
||||
'present_unless' => 'El campo :attribute debe estar presente a menos que :other sea :value.',
|
||||
'present_with' => 'El campo :attribute debe estar presente cuando :values esté presente.',
|
||||
'present_with_all' => 'El campo :attribute debe estar presente cuando :values estén presentes.',
|
||||
'prohibited' => 'El campo :attribute está prohibido.',
|
||||
'prohibited_if' => 'El campo :attribute está prohibido cuando :other es :value.',
|
||||
'prohibited_unless' => 'El campo :attribute está prohibido a menos que :other sea :values.',
|
||||
'prohibits' => 'El campo :attribute prohibe que :other esté presente.',
|
||||
'regex' => 'El formato del campo :attribute no es válido.',
|
||||
'required' => 'El campo :attribute es obligatorio.',
|
||||
'required_array_keys' => 'El campo :attribute debe contener entradas para: :values.',
|
||||
'required_if' => 'El campo :attribute es obligatorio cuando :other es :value.',
|
||||
'required_if_accepted' => 'El campo :attribute es obligatorio si :other es aceptado.',
|
||||
'required_if_declined' => 'El campo :attribute es obligatorio si :other es rechazado.',
|
||||
'required_unless' => 'El campo :attribute es obligatorio a menos que :other esté en :values.',
|
||||
'required_with' => 'El campo :attribute es obligatorio cuando :values está presente.',
|
||||
'required_with_all' => 'El campo :attribute es obligatorio cuando :values están presentes.',
|
||||
'required_without' => 'El campo :attribute es obligatorio cuando :values no está presente.',
|
||||
'required_without_all' => 'El campo :attribute es obligatorio cuando ninguno de :values está presente.',
|
||||
'same' => 'Los campos :attribute y :other deben coincidir.',
|
||||
'size' => [
|
||||
'array' => 'El campo :attribute debe contener :size elementos.',
|
||||
'file' => 'El tamaño de :attribute debe ser :size kilobytes.',
|
||||
'numeric' => 'El tamaño de :attribute debe ser :size.',
|
||||
'string' => 'El campo :attribute debe contener :size caracteres.',
|
||||
],
|
||||
'starts_with' => 'El campo :attribute debe comenzar con uno de los siguientes valores: :values',
|
||||
'string' => 'El campo :attribute debe ser una cadena de caracteres.',
|
||||
'timezone' => 'El campo :attribute debe ser una zona horaria válida.',
|
||||
'ulid' => 'El campo :attribute debe ser un ULID válido.',
|
||||
'unique' => 'El campo :attribute ya ha sido registrado.',
|
||||
'uploaded' => 'Subir :attribute ha fallado.',
|
||||
'uppercase' => 'El campo :attribute debe estar en mayúscula.',
|
||||
'url' => 'El campo :attribute debe ser una URL válida.',
|
||||
'uuid' => 'El campo :attribute debe ser un UUID válido.',
|
||||
'attributes' => [
|
||||
'address' => 'dirección',
|
||||
'affiliate_url' => 'URL de afiliado',
|
||||
'age' => 'edad',
|
||||
'amount' => 'cantidad',
|
||||
'announcement' => 'anuncio',
|
||||
'area' => 'área',
|
||||
'audience_prize' => 'premio del público',
|
||||
'audience_winner' => 'ganador del público',
|
||||
'available' => 'disponible',
|
||||
'birthday' => 'cumpleaños',
|
||||
'body' => 'contenido',
|
||||
'city' => 'ciudad',
|
||||
'company' => 'compañía',
|
||||
'compilation' => 'compilación',
|
||||
'concept' => 'concepto',
|
||||
'conditions' => 'condiciones',
|
||||
'content' => 'contenido',
|
||||
'contest' => 'concurso',
|
||||
'country' => 'país',
|
||||
'cover' => 'portada',
|
||||
'created_at' => 'creado el',
|
||||
'creator' => 'creador',
|
||||
'currency' => 'moneda',
|
||||
'current_password' => 'contraseña actual',
|
||||
'customer' => 'cliente',
|
||||
'date' => 'fecha',
|
||||
'date_of_birth' => 'fecha de nacimiento',
|
||||
'dates' => 'fechas',
|
||||
'day' => 'día',
|
||||
'deleted_at' => 'eliminado el',
|
||||
'description' => 'descripción',
|
||||
'display_type' => 'tipo de visualización',
|
||||
'district' => 'distrito',
|
||||
'duration' => 'duración',
|
||||
'email' => 'correo electrónico',
|
||||
'excerpt' => 'extracto',
|
||||
'filter' => 'filtro',
|
||||
'finished_at' => 'terminado el',
|
||||
'first_name' => 'nombre',
|
||||
'gender' => 'género',
|
||||
'grand_prize' => 'gran Premio',
|
||||
'group' => 'grupo',
|
||||
'hour' => 'hora',
|
||||
'image' => 'imagen',
|
||||
'image_desktop' => 'imagen de escritorio',
|
||||
'image_main' => 'imagen principal',
|
||||
'image_mobile' => 'imagen móvil',
|
||||
'images' => 'imágenes',
|
||||
'is_audience_winner' => 'es ganador de audiencia',
|
||||
'is_hidden' => 'está oculto',
|
||||
'is_subscribed' => 'está suscrito',
|
||||
'is_visible' => 'es visible',
|
||||
'is_winner' => 'es ganador',
|
||||
'items' => 'elementos',
|
||||
'key' => 'clave',
|
||||
'last_name' => 'apellidos',
|
||||
'lesson' => 'lección',
|
||||
'line_address_1' => 'línea de dirección 1',
|
||||
'line_address_2' => 'línea de dirección 2',
|
||||
'login' => 'acceso',
|
||||
'message' => 'mensaje',
|
||||
'middle_name' => 'segundo nombre',
|
||||
'minute' => 'minuto',
|
||||
'mobile' => 'móvil',
|
||||
'month' => 'mes',
|
||||
'name' => 'nombre',
|
||||
'national_code' => 'código nacional',
|
||||
'number' => 'número',
|
||||
'password' => 'contraseña',
|
||||
'password_confirmation' => 'confirmación de la contraseña',
|
||||
'phone' => 'teléfono',
|
||||
'photo' => 'foto',
|
||||
'portfolio' => 'portafolio',
|
||||
'postal_code' => 'código postal',
|
||||
'preview' => 'vista preliminar',
|
||||
'price' => 'precio',
|
||||
'product_id' => 'ID del producto',
|
||||
'product_uid' => 'UID del producto',
|
||||
'product_uuid' => 'UUID del producto',
|
||||
'promo_code' => 'código promocional',
|
||||
'province' => 'provincia',
|
||||
'quantity' => 'cantidad',
|
||||
'reason' => 'razón',
|
||||
'recaptcha_response_field' => 'respuesta del recaptcha',
|
||||
'referee' => 'árbitro',
|
||||
'referees' => 'árbitros',
|
||||
'reject_reason' => 'motivo de rechazo',
|
||||
'remember' => 'recordar',
|
||||
'restored_at' => 'restaurado el',
|
||||
'result_text_under_image' => 'texto bajo la imagen',
|
||||
'role' => 'rol',
|
||||
'rule' => 'regla',
|
||||
'rules' => 'reglas',
|
||||
'second' => 'segundo',
|
||||
'sex' => 'sexo',
|
||||
'shipment' => 'envío',
|
||||
'short_text' => 'texto corto',
|
||||
'size' => 'tamaño',
|
||||
'skills' => 'habilidades',
|
||||
'slug' => 'slug',
|
||||
'specialization' => 'especialización',
|
||||
'started_at' => 'comenzado el',
|
||||
'state' => 'estado',
|
||||
'status' => 'estado',
|
||||
'street' => 'calle',
|
||||
'student' => 'estudiante',
|
||||
'subject' => 'asunto',
|
||||
'tag' => 'etiqueta',
|
||||
'tags' => 'etiquetas',
|
||||
'teacher' => 'profesor',
|
||||
'terms' => 'términos',
|
||||
'test_description' => 'descripción de prueba',
|
||||
'test_locale' => 'idioma de prueba',
|
||||
'test_name' => 'nombre de prueba',
|
||||
'text' => 'texto',
|
||||
'time' => 'hora',
|
||||
'title' => 'título',
|
||||
'type' => 'tipo',
|
||||
'updated_at' => 'actualizado el',
|
||||
'user' => 'usuario',
|
||||
'username' => 'usuario',
|
||||
'value' => 'valor',
|
||||
'winner' => 'ganador',
|
||||
'work' => 'trabajo',
|
||||
'year' => 'año',
|
||||
],
|
||||
];
|
||||
103
package-lock.json
generated
103
package-lock.json
generated
@@ -1,13 +1,14 @@
|
||||
{
|
||||
"name": "app",
|
||||
"name": "zenithar",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"devDependencies": {
|
||||
"@tailwindcss/forms": "^0.5.2",
|
||||
"@tailwindcss/forms": "^0.5.9",
|
||||
"autoprefixer": "^10.4.2",
|
||||
"axios": "^1.7.4",
|
||||
"chokidar": "^4.0.3",
|
||||
"concurrently": "^9.0.1",
|
||||
"laravel-vite-plugin": "^1.0",
|
||||
"postcss": "^8.4.31",
|
||||
@@ -1111,41 +1112,19 @@
|
||||
}
|
||||
},
|
||||
"node_modules/chokidar": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
|
||||
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
|
||||
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"anymatch": "~3.1.2",
|
||||
"braces": "~3.0.2",
|
||||
"glob-parent": "~5.1.2",
|
||||
"is-binary-path": "~2.1.0",
|
||||
"is-glob": "~4.0.1",
|
||||
"normalize-path": "~3.0.0",
|
||||
"readdirp": "~3.6.0"
|
||||
"readdirp": "^4.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8.10.0"
|
||||
"node": ">= 14.16.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/chokidar/node_modules/glob-parent": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
||||
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"is-glob": "^4.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/cliui": {
|
||||
@@ -2221,16 +2200,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/readdirp": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
|
||||
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz",
|
||||
"integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"picomatch": "^2.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.10.0"
|
||||
"node": ">= 14.18.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "individual",
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/require-directory": {
|
||||
@@ -2601,6 +2581,57 @@
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/tailwindcss/node_modules/chokidar": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
|
||||
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"anymatch": "~3.1.2",
|
||||
"braces": "~3.0.2",
|
||||
"glob-parent": "~5.1.2",
|
||||
"is-binary-path": "~2.1.0",
|
||||
"is-glob": "~4.0.1",
|
||||
"normalize-path": "~3.0.0",
|
||||
"readdirp": "~3.6.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8.10.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/tailwindcss/node_modules/chokidar/node_modules/glob-parent": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
||||
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"is-glob": "^4.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/tailwindcss/node_modules/readdirp": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
|
||||
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"picomatch": "^2.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/thenify": {
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
|
||||
|
||||
@@ -6,9 +6,10 @@
|
||||
"dev": "vite"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/forms": "^0.5.2",
|
||||
"@tailwindcss/forms": "^0.5.9",
|
||||
"autoprefixer": "^10.4.2",
|
||||
"axios": "^1.7.4",
|
||||
"chokidar": "^4.0.3",
|
||||
"concurrently": "^9.0.1",
|
||||
"laravel-vite-plugin": "^1.0",
|
||||
"postcss": "^8.4.31",
|
||||
|
||||
8
public/vendor/telescope/app-dark.css
vendored
Normal file
8
public/vendor/telescope/app-dark.css
vendored
Normal file
File diff suppressed because one or more lines are too long
7
public/vendor/telescope/app.css
vendored
Normal file
7
public/vendor/telescope/app.css
vendored
Normal file
File diff suppressed because one or more lines are too long
2
public/vendor/telescope/app.js
vendored
Normal file
2
public/vendor/telescope/app.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
public/vendor/telescope/favicon.ico
vendored
Normal file
BIN
public/vendor/telescope/favicon.ico
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
5
public/vendor/telescope/mix-manifest.json
vendored
Normal file
5
public/vendor/telescope/mix-manifest.json
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"/app.js": "/app.js?id=99f84d421ae083196e0a45c3c310168b",
|
||||
"/app-dark.css": "/app-dark.css?id=1ea407db56c5163ae29311f1f38eb7b9",
|
||||
"/app.css": "/app.css?id=de4c978567bfd90b38d186937dee5ccf"
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
@props(['on'])
|
||||
|
||||
<div x-data="{ shown: false, timeout: null }"
|
||||
x-init="@this.on('{{ $on }}', () => { clearTimeout(timeout); shown = true; timeout = setTimeout(() => { shown = false }, 2000); })"
|
||||
x-show.transition.out.opacity.duration.1500ms="shown"
|
||||
x-transition:leave.opacity.duration.1500ms
|
||||
style="display: none;"
|
||||
{{ $attributes->merge(['class' => 'text-sm text-gray-600 dark:text-gray-400']) }}>
|
||||
{{ $slot->isEmpty() ? __('Saved.') : $slot }}
|
||||
</div>
|
||||
@@ -1,3 +0,0 @@
|
||||
<svg viewBox="0 0 316 316" xmlns="http://www.w3.org/2000/svg" {{ $attributes }}>
|
||||
<path d="M305.8 81.125C305.77 80.995 305.69 80.885 305.65 80.755C305.56 80.525 305.49 80.285 305.37 80.075C305.29 79.935 305.17 79.815 305.07 79.685C304.94 79.515 304.83 79.325 304.68 79.175C304.55 79.045 304.39 78.955 304.25 78.845C304.09 78.715 303.95 78.575 303.77 78.475L251.32 48.275C249.97 47.495 248.31 47.495 246.96 48.275L194.51 78.475C194.33 78.575 194.19 78.725 194.03 78.845C193.89 78.955 193.73 79.045 193.6 79.175C193.45 79.325 193.34 79.515 193.21 79.685C193.11 79.815 192.99 79.935 192.91 80.075C192.79 80.285 192.71 80.525 192.63 80.755C192.58 80.875 192.51 80.995 192.48 81.125C192.38 81.495 192.33 81.875 192.33 82.265V139.625L148.62 164.795V52.575C148.62 52.185 148.57 51.805 148.47 51.435C148.44 51.305 148.36 51.195 148.32 51.065C148.23 50.835 148.16 50.595 148.04 50.385C147.96 50.245 147.84 50.125 147.74 49.995C147.61 49.825 147.5 49.635 147.35 49.485C147.22 49.355 147.06 49.265 146.92 49.155C146.76 49.025 146.62 48.885 146.44 48.785L93.99 18.585C92.64 17.805 90.98 17.805 89.63 18.585L37.18 48.785C37 48.885 36.86 49.035 36.7 49.155C36.56 49.265 36.4 49.355 36.27 49.485C36.12 49.635 36.01 49.825 35.88 49.995C35.78 50.125 35.66 50.245 35.58 50.385C35.46 50.595 35.38 50.835 35.3 51.065C35.25 51.185 35.18 51.305 35.15 51.435C35.05 51.805 35 52.185 35 52.575V232.235C35 233.795 35.84 235.245 37.19 236.025L142.1 296.425C142.33 296.555 142.58 296.635 142.82 296.725C142.93 296.765 143.04 296.835 143.16 296.865C143.53 296.965 143.9 297.015 144.28 297.015C144.66 297.015 145.03 296.965 145.4 296.865C145.5 296.835 145.59 296.775 145.69 296.745C145.95 296.655 146.21 296.565 146.45 296.435L251.36 236.035C252.72 235.255 253.55 233.815 253.55 232.245V174.885L303.81 145.945C305.17 145.165 306 143.725 306 142.155V82.265C305.95 81.875 305.89 81.495 305.8 81.125ZM144.2 227.205L100.57 202.515L146.39 176.135L196.66 147.195L240.33 172.335L208.29 190.625L144.2 227.205ZM244.75 114.995V164.795L226.39 154.225L201.03 139.625V89.825L219.39 100.395L244.75 114.995ZM249.12 57.105L292.81 82.265L249.12 107.425L205.43 82.265L249.12 57.105ZM114.49 184.425L96.13 194.995V85.305L121.49 70.705L139.85 60.135V169.815L114.49 184.425ZM91.76 27.425L135.45 52.585L91.76 77.745L48.07 52.585L91.76 27.425ZM43.67 60.135L62.03 70.705L87.39 85.305V202.545V202.555V202.565C87.39 202.735 87.44 202.895 87.46 203.055C87.49 203.265 87.49 203.485 87.55 203.695V203.705C87.6 203.875 87.69 204.035 87.76 204.195C87.84 204.375 87.89 204.575 87.99 204.745C87.99 204.745 87.99 204.755 88 204.755C88.09 204.905 88.22 205.035 88.33 205.175C88.45 205.335 88.55 205.495 88.69 205.635L88.7 205.645C88.82 205.765 88.98 205.855 89.12 205.965C89.28 206.085 89.42 206.225 89.59 206.325C89.6 206.325 89.6 206.325 89.61 206.335C89.62 206.335 89.62 206.345 89.63 206.345L139.87 234.775V285.065L43.67 229.705V60.135ZM244.75 229.705L148.58 285.075V234.775L219.8 194.115L244.75 179.875V229.705ZM297.2 139.625L253.49 164.795V114.995L278.85 100.395L297.21 89.825V139.625H297.2Z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.0 KiB |
@@ -1,7 +0,0 @@
|
||||
@props(['status'])
|
||||
|
||||
@if ($status)
|
||||
<div {{ $attributes->merge(['class' => 'font-medium text-sm text-green-600 dark:text-green-400']) }}>
|
||||
{{ $status }}
|
||||
</div>
|
||||
@endif
|
||||
@@ -1,3 +0,0 @@
|
||||
<button {{ $attributes->merge(['type' => 'submit', 'class' => 'inline-flex items-center px-4 py-2 bg-red-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-red-500 active:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 transition ease-in-out duration-150']) }}>
|
||||
{{ $slot }}
|
||||
</button>
|
||||
@@ -1 +0,0 @@
|
||||
<a {{ $attributes->merge(['class' => 'block w-full px-4 py-2 text-start text-sm leading-5 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 focus:outline-none focus:bg-gray-100 dark:focus:bg-gray-800 transition duration-150 ease-in-out']) }}>{{ $slot }}</a>
|
||||
@@ -1,35 +0,0 @@
|
||||
@props(['align' => 'right', 'width' => '48', 'contentClasses' => 'py-1 bg-white dark:bg-gray-700'])
|
||||
|
||||
@php
|
||||
$alignmentClasses = match ($align) {
|
||||
'left' => 'ltr:origin-top-left rtl:origin-top-right start-0',
|
||||
'top' => 'origin-top',
|
||||
default => 'ltr:origin-top-right rtl:origin-top-left end-0',
|
||||
};
|
||||
|
||||
$width = match ($width) {
|
||||
'48' => 'w-48',
|
||||
default => $width,
|
||||
};
|
||||
@endphp
|
||||
|
||||
<div class="relative" x-data="{ open: false }" @click.outside="open = false" @close.stop="open = false">
|
||||
<div @click="open = ! open">
|
||||
{{ $trigger }}
|
||||
</div>
|
||||
|
||||
<div x-show="open"
|
||||
x-transition:enter="transition ease-out duration-200"
|
||||
x-transition:enter-start="opacity-0 scale-95"
|
||||
x-transition:enter-end="opacity-100 scale-100"
|
||||
x-transition:leave="transition ease-in duration-75"
|
||||
x-transition:leave-start="opacity-100 scale-100"
|
||||
x-transition:leave-end="opacity-0 scale-95"
|
||||
class="absolute z-50 mt-2 {{ $width }} rounded-md shadow-lg {{ $alignmentClasses }}"
|
||||
style="display: none;"
|
||||
@click="open = false">
|
||||
<div class="rounded-md ring-1 ring-black ring-opacity-5 {{ $contentClasses }}">
|
||||
{{ $content }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
21
resources/views/components/flash.blade.php
Normal file
21
resources/views/components/flash.blade.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<div>
|
||||
<script>
|
||||
document.addEventListener('alpine:initialized', () => {
|
||||
const toast = @js(session()->get('toast', null));
|
||||
|
||||
if (!toast) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (toast.type === 'success') {
|
||||
$interaction('toast').success(toast.title ?? 'Éxito', toast.message).send();
|
||||
} else if (toast.type === 'error') {
|
||||
$interaction('toast').error(toast.title ?? 'Error', toast.message).send();
|
||||
} else if (toast.type === 'warning') {
|
||||
$interaction('toast').warning(toast.title ?? 'Advertencia', toast.message).send();
|
||||
} else if (toast.type === 'info') {
|
||||
$interaction('toast').info(toast.title ?? 'Información', toast.message).send();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
@@ -1,9 +0,0 @@
|
||||
@props(['messages'])
|
||||
|
||||
@if ($messages)
|
||||
<ul {{ $attributes->merge(['class' => 'text-sm text-red-600 dark:text-red-400 space-y-1']) }}>
|
||||
@foreach ((array) $messages as $message)
|
||||
<li>{{ $message }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
@endif
|
||||
@@ -1,5 +0,0 @@
|
||||
@props(['value'])
|
||||
|
||||
<label {{ $attributes->merge(['class' => 'block font-medium text-sm text-gray-700 dark:text-gray-300']) }}>
|
||||
{{ $value ?? $slot }}
|
||||
</label>
|
||||
32
resources/views/components/layouts/app.blade.php
Normal file
32
resources/views/components/layouts/app.blade.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Aureon</title>
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Domine:wght@400..700&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Karla:ital,wght@0,200..800;1,200..800&family=Nunito:ital,wght@0,200..1000;1,200..1000&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap"
|
||||
rel="stylesheet">
|
||||
<tallstackui:script/>
|
||||
@livewireStyles
|
||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||
</head>
|
||||
|
||||
<body class="flex flex-col min-h-screen">
|
||||
<x-dialog/>
|
||||
<x-toast/>
|
||||
<x-navbar/>
|
||||
|
||||
<div class="flex-1 bg-secondary-50 overflow-x-auto">
|
||||
<main class="container mx-auto px-4 py-8">
|
||||
{{ $slot }}
|
||||
</main>
|
||||
</div>
|
||||
@livewireScripts
|
||||
</body>
|
||||
|
||||
</html>
|
||||
30
resources/views/components/layouts/login.blade.php
Normal file
30
resources/views/components/layouts/login.blade.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Aureon</title>
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Domine:wght@400..700&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Karla:ital,wght@0,200..800;1,200..800&family=Nunito:ital,wght@0,200..1000;1,200..1000&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap"
|
||||
rel="stylesheet">
|
||||
<tallstackui:script/>
|
||||
@livewireStyles
|
||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||
</head>
|
||||
|
||||
<body class="flex flex-col min-h-screen">
|
||||
<x-dialog/>
|
||||
<x-toast/>
|
||||
<x-flash/>
|
||||
|
||||
<div class="flex-1 bg-secondary-50 overflow-x-auto">
|
||||
{{ $slot }}
|
||||
</div>
|
||||
@livewireScripts
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,78 +0,0 @@
|
||||
@props([
|
||||
'name',
|
||||
'show' => false,
|
||||
'maxWidth' => '2xl'
|
||||
])
|
||||
|
||||
@php
|
||||
$maxWidth = [
|
||||
'sm' => 'sm:max-w-sm',
|
||||
'md' => 'sm:max-w-md',
|
||||
'lg' => 'sm:max-w-lg',
|
||||
'xl' => 'sm:max-w-xl',
|
||||
'2xl' => 'sm:max-w-2xl',
|
||||
][$maxWidth];
|
||||
@endphp
|
||||
|
||||
<div
|
||||
x-data="{
|
||||
show: @js($show),
|
||||
focusables() {
|
||||
// All focusable element types...
|
||||
let selector = 'a, button, input:not([type=\'hidden\']), textarea, select, details, [tabindex]:not([tabindex=\'-1\'])'
|
||||
return [...$el.querySelectorAll(selector)]
|
||||
// All non-disabled elements...
|
||||
.filter(el => ! el.hasAttribute('disabled'))
|
||||
},
|
||||
firstFocusable() { return this.focusables()[0] },
|
||||
lastFocusable() { return this.focusables().slice(-1)[0] },
|
||||
nextFocusable() { return this.focusables()[this.nextFocusableIndex()] || this.firstFocusable() },
|
||||
prevFocusable() { return this.focusables()[this.prevFocusableIndex()] || this.lastFocusable() },
|
||||
nextFocusableIndex() { return (this.focusables().indexOf(document.activeElement) + 1) % (this.focusables().length + 1) },
|
||||
prevFocusableIndex() { return Math.max(0, this.focusables().indexOf(document.activeElement)) -1 },
|
||||
}"
|
||||
x-init="$watch('show', value => {
|
||||
if (value) {
|
||||
document.body.classList.add('overflow-y-hidden');
|
||||
{{ $attributes->has('focusable') ? 'setTimeout(() => firstFocusable().focus(), 100)' : '' }}
|
||||
} else {
|
||||
document.body.classList.remove('overflow-y-hidden');
|
||||
}
|
||||
})"
|
||||
x-on:open-modal.window="$event.detail == '{{ $name }}' ? show = true : null"
|
||||
x-on:close-modal.window="$event.detail == '{{ $name }}' ? show = false : null"
|
||||
x-on:close.stop="show = false"
|
||||
x-on:keydown.escape.window="show = false"
|
||||
x-on:keydown.tab.prevent="$event.shiftKey || nextFocusable().focus()"
|
||||
x-on:keydown.shift.tab.prevent="prevFocusable().focus()"
|
||||
x-show="show"
|
||||
class="fixed inset-0 overflow-y-auto px-4 py-6 sm:px-0 z-50"
|
||||
style="display: {{ $show ? 'block' : 'none' }};"
|
||||
>
|
||||
<div
|
||||
x-show="show"
|
||||
class="fixed inset-0 transform transition-all"
|
||||
x-on:click="show = false"
|
||||
x-transition:enter="ease-out duration-300"
|
||||
x-transition:enter-start="opacity-0"
|
||||
x-transition:enter-end="opacity-100"
|
||||
x-transition:leave="ease-in duration-200"
|
||||
x-transition:leave-start="opacity-100"
|
||||
x-transition:leave-end="opacity-0"
|
||||
>
|
||||
<div class="absolute inset-0 bg-gray-500 dark:bg-gray-900 opacity-75"></div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
x-show="show"
|
||||
class="mb-6 bg-white dark:bg-gray-800 rounded-lg overflow-hidden shadow-xl transform transition-all sm:w-full {{ $maxWidth }} sm:mx-auto"
|
||||
x-transition:enter="ease-out duration-300"
|
||||
x-transition:enter-start="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
|
||||
x-transition:enter-end="opacity-100 translate-y-0 sm:scale-100"
|
||||
x-transition:leave="ease-in duration-200"
|
||||
x-transition:leave-start="opacity-100 translate-y-0 sm:scale-100"
|
||||
x-transition:leave-end="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
|
||||
>
|
||||
{{ $slot }}
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,11 +0,0 @@
|
||||
@props(['active'])
|
||||
|
||||
@php
|
||||
$classes = ($active ?? false)
|
||||
? 'inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 dark:border-indigo-600 text-sm font-medium leading-5 text-gray-900 dark:text-gray-100 focus:outline-none focus:border-indigo-700 transition duration-150 ease-in-out'
|
||||
: 'inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:border-gray-300 dark:hover:border-gray-700 focus:outline-none focus:text-gray-700 dark:focus:text-gray-300 focus:border-gray-300 dark:focus:border-gray-700 transition duration-150 ease-in-out';
|
||||
@endphp
|
||||
|
||||
<a {{ $attributes->merge(['class' => $classes]) }}>
|
||||
{{ $slot }}
|
||||
</a>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user