Organizando y comenzando con interfaces

This commit is contained in:
2025-01-11 20:10:14 -03:00
parent 07b62a07a0
commit b87ae08b9a
52 changed files with 9492 additions and 361 deletions

4497
.phpstorm.meta.php Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +1,24 @@
FROM php:8.4-fpm-alpine
FROM php:8.4-fpm
ARG UID=1000
ARG GID=1000
RUN apk add --no-cache shadow nginx git curl zip unzip supervisor nodejs-current npm postgresql17-dev libzip-dev \
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 \
&& docker-php-ext-install pdo_pgsql \
&& docker-php-ext-install zip \
&& usermod -u 1000 www-data \
&& groupmod -g 1000 www-data
&& docker-php-ext-install bcmath \
&& docker-php-ext-install intl \
&& docker-php-ext-enable xdebug \
&& 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
@@ -15,7 +26,7 @@ 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 ./ ./

View File

@@ -11,4 +11,4 @@ down:
docker compose down
shell:
docker compose exec -u www-data laravel sh
docker compose exec -u www-data laravel bash

File diff suppressed because it is too large Load Diff

View File

@@ -34,6 +34,31 @@ namespace App\Models{
class CalculoFondo extends \Eloquent {}
}
namespace App\Models{
/**
*
*
* @property string $id
* @property string $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{
/**
*
@@ -76,10 +101,10 @@ namespace App\Models{
*
*
* @property string $id
* @property string $numero
* @property string $descripcion
* @property string|null $numero
* @property string|null $descripcion
* @property int $valor
* @property string $tipo_egreso
* @property \App\Enums\TipoEgreso $tipo_egreso
* @property string $turno_id
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
@@ -157,6 +182,31 @@ namespace App\Models{
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{
/**
*
@@ -167,7 +217,7 @@ namespace App\Models{
* @property int $ingreso_inicial
* @property int $ingreso_final
* @property int $total
* @property string $tipo_ingreso
* @property \App\Enums\TipoIngreso $tipo_ingreso
* @property string $turno_id
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
@@ -193,12 +243,16 @@ namespace App\Models{
*
*
* @property string $id
* @property string $fecha
* @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 \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
* @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()

View File

@@ -7,8 +7,8 @@ enum TipoEgreso: string
case FacturaMateriaPrima = 'Factura Materia Prima';
case FacturaGastosGenerales = 'Factura Gastos Generales';
case BoletaMateriaPrima = 'Boleta Materia Prima';
case ValeMateriaPrima = 'Vale 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';

View File

@@ -4,6 +4,7 @@ namespace App\Enums;
enum TipoIngreso: string
{
case BoletasElectronicas = 'Boletas Electrónicas';
case BoletasFiscales = 'Boletas Fiscales';
case BoletasManuales = 'Boletas Manuales';
case Facturas = 'Facturas';

View File

@@ -0,0 +1,138 @@
<?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;
}
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();
}
#[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'));
}
}

View File

@@ -0,0 +1,140 @@
<?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;
}
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();
}
#[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'));
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Livewire\Cajas;
use App\Models\Turno;
use Illuminate\Contracts\View\View;
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');
}
}

View File

@@ -2,12 +2,143 @@
namespace App\Livewire\Cajas;
use App\Models\Turno;
use Illuminate\Contracts\View\View;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Number;
use Illuminate\Validation\ValidationException;
use Livewire\Attributes\Computed;
use Livewire\Component;
use Livewire\WithPagination;
use Log;
use TallStackUi\Traits\Interactions;
class Index extends Component
{
public function render()
use Interactions, WithPagination;
public $modal = false;
public $fecha = null;
public $caja = null;
public $turno = null;
public array $sort = [
'column' => 'fecha',
'direction' => 'desc',
];
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,
]);
Session::flash('toast', ['type' => 'success', 'message' => 'Caja registrada correctamente']);
$this->redirectRoute('cajas.edit', $turno);
}
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' => 'documentos', 'label' => 'Documento'],
['index' => 'diferencia', 'label' => 'diferencia'],
['index' => 'action', 'label' => 'Acciones'],
];
}
#[Computed]
public function rows(): LengthAwarePaginator
{
$turnos = Turno::orderBy('fecha', 'desc')
->orderBy('numero_caja', 'asc')
->orderBy('numero_turno', 'asc')
->paginate()
->through(function ($turno) {
return (object) [
'id' => $turno->id,
'fecha' => $turno->fecha->format('d-m-Y'),
'numero_caja' => $turno->numero_caja,
'numero_turno' => $turno->numero_turno,
'ingresos' => Number::currency($turno->ingresos()->sum('total')),
// 'egresos' => Number::currency(477960),
// 'documentos' => Number::currency(294717),
// 'diferencia' => Number::currency(-7544),
];
});
Log::info('', [$turnos]);
return $turnos;
}
}

View File

@@ -2,12 +2,17 @@
namespace App\Models;
use App\Enums\TipoDocumento;
use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Model;
class Documentos extends Model
class Documento extends Model
{
use HasUlids;
protected $table = 'documentos';
protected $casts = [
'tipo_documento' => TipoDocumento::class,
];
}

View File

@@ -2,6 +2,7 @@
namespace App\Models;
use App\Enums\TipoEgreso;
use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Model;
@@ -10,4 +11,12 @@ class Egreso extends Model
use HasUlids;
protected $table = 'egresos';
protected $casts = [
'tipo_egreso' => TipoEgreso::class,
];
protected $fillable = [
'tipo_egreso', 'numero', 'descripcion', 'valor'
];
}

View File

@@ -2,12 +2,17 @@
namespace App\Models;
use App\Enums\TipoGastoCuentaCorriente;
use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Model;
class GastosCuentaCorriente extends Model
class GastoCuentaCorriente extends Model
{
use HasUlids;
protected $table = 'gastos_cuenta_corriente';
protected $casts = [
'tipo_gasto' => TipoGastoCuentaCorriente::class,
];
}

View File

@@ -2,6 +2,7 @@
namespace App\Models;
use App\Enums\TipoIngreso;
use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Model;
@@ -10,4 +11,12 @@ 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',
];
}

View File

@@ -4,10 +4,26 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Turno extends Model
{
use HasUlids;
protected $table = 'turnos';
protected $fillable = ['fecha', 'numero_caja', 'numero_turno', 'fondo'];
protected $casts = [
'fecha' => 'date',
];
public function ingresos(): HasMany
{
return $this->hasMany(Ingreso::class, 'turno_id');
}
public function egresos(): HasMany
{
return $this->hasMany(Egreso::class, 'turno_id');
}
}

View File

@@ -9,7 +9,7 @@ use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use HasFactory, Notifiable, HasUlids;
use HasFactory, HasUlids, Notifiable;
protected $table = 'users';

View File

@@ -3,6 +3,7 @@
namespace App\Providers;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Number;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
@@ -23,5 +24,8 @@ class AppServiceProvider extends ServiceProvider
$isProduction = app()->isProduction();
Model::shouldBeStrict(! $isProduction);
Number::useLocale('es-CL');
Number::useCurrency('CLP');
}
}

View File

@@ -17,14 +17,14 @@ services:
volumes:
- .:/var/www/html
env_file: .env
entrypoint: ["php", "artisan", "schedule:work"]
entrypoint: [ "php", "artisan", "schedule:work" ]
worker:
image: zenithar:local
volumes:
- .:/var/www/html
env_file: .env
entrypoint: ["php", "artisan", "queue:work"]
entrypoint: [ "php", "artisan", "queue:work" ]
vite:
image: zenithar:local
@@ -33,7 +33,7 @@ services:
volumes:
- .:/var/www/html
env_file: .env
entrypoint: ["npm", "run", "dev", "--", "--host"]
entrypoint: [ "npm", "run", "dev", "--", "--host" ]
mailpit:
image: "axllent/mailpit:latest"

View File

@@ -10,6 +10,7 @@
"license": "MIT",
"require": {
"php": "^8.2",
"laravel-lang/common": "^6.4",
"laravel/framework": "^11.31",
"laravel/tinker": "^2.9",
"livewire/livewire": "^3.4",
@@ -17,6 +18,7 @@
"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",

2116
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -122,7 +122,7 @@ return [
'include_helpers' => false,
'helper_files' => [
base_path() . '/vendor/laravel/framework/src/Illuminate/Support/helpers.php',
base_path().'/vendor/laravel/framework/src/Illuminate/Support/helpers.php',
],
/*

View File

@@ -16,7 +16,7 @@ return new class extends Migration
$table->date('fecha');
$table->integer('numero_caja');
$table->integer('numero_turno');
$table->integer('fondo');
$table->integer('fondo')->default(0);
$table->timestamps();
});
@@ -54,8 +54,8 @@ return new class extends Migration
Schema::create('egresos', function (Blueprint $table) {
$table->ulid('id')->primary();
$table->text('numero');
$table->text('descripcion');
$table->text('numero')->nullable();
$table->text('descripcion')->nullable();
$table->bigInteger('valor');
$table->text('tipo_egreso');
$table->foreignUlid('turno_id')->constrained('turnos')->cascadeOnDelete();

View File

@@ -6,7 +6,5 @@ use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
}
public function run(): void {}
}

View File

@@ -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"

View File

@@ -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
View 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
View 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
View 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
View 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
View 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
View File

@@ -0,0 +1,8 @@
<?php
declare(strict_types=1);
return [
'next' => 'Next &raquo;',
'previous' => '&laquo; Previous',
];

11
lang/en/passwords.php Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View File

@@ -0,0 +1,8 @@
<?php
declare(strict_types=1);
return [
'next' => 'Siguiente &raquo;',
'previous' => '&laquo; Anterior',
];

11
lang/es/passwords.php Normal file
View 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
View 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',
],
];

View 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>

View File

@@ -8,20 +8,26 @@
<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 />
<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-navbar />
<div class="flex-1 bg-secondary-50 overflow-x-auto">
<main class="container mx-auto p-4 ">
{{ $slot }}
</main>
</div>
@livewireScripts
<x-dialog/>
<x-toast/>
<x-flash/>
<x-navbar/>
<div class="flex-1 bg-secondary-50 overflow-x-auto">
<main class="container mx-auto px-4 py-8">
{{ $slot }}
</main>
</div>
@livewireScripts
</body>
</html>

View File

@@ -0,0 +1,3 @@
<div>
<h1 class="text-4xl mb-8 underline decoration-primary decoration-3">{{$slot}}</h1>
</div>

View File

@@ -1,3 +1,8 @@
<x-layout>
<h1 class="text-4xl font-medium">Bienvenido</h1>
<h1 class="text-4xl font-medium">Bienvenido</h1>
<h1 class="text-4xl font-medium">Bienvenido</h1>
<h1 class="text-4xl font-medium">Bienvenido</h1>
<h1 class="text-4xl font-medium">Bienvenido</h1>
<h1 class="text-4xl font-medium">Bienvenido</h1>
</x-layout>

View File

@@ -0,0 +1,42 @@
<div>
<form wire:submit.prevent="save" class="grid lg:grid-cols-[repeat(4,minmax(0,2fr))_1fr] gap-2 mb-4 items-end">
<x-select.styled label="Tipo Documento" :options="$this->tipos" wire:model="tipo" id="tipo" required
searchable invalidate/>
<x-input label="Nº Documento" wire:model="numero" invalidate/>
<x-input label="Descripción" wire:model="descripcion" invalidate/>
<x-input label="Total" wire:model="valor" invalidate/>
<x-button type="submit">
@if($this->currentEgreso)
Guardar
@else
Agregar
@endif
</x-button>
<p class="text-sm font-medium text-red-500">
@error('tipo'){{$message}}@enderror
</p>
<p class="text-sm font-medium text-red-500">
@error('numero'){{$message}}@enderror
</p>
<p class="text-sm font-medium text-red-500">
@error('descripcion'){{$message}}@enderror
</p>
<p class="text-sm font-medium text-red-500">
@error('valor'){{$message}}@enderror
</p>
</form>
<x-table striped :headers="$this->headers" :rows="$this->rows">
@interact('column_action', $row)
<x-button.circle icon="edit" wire:click="edit('{{$row->id}}')" :key="uniqid()"/>
<x-button.circle icon="trash" color="red" wire:click="confirmDelete('{{$row->id}}')" :key="uniqid()"/>
@endinteract
</x-table>
<div class="mt-4">
<p class="text-xl">Egresos Totales: <span class="font-bold">{{$this->totalEgresos}}</span></p>
</div>
</div>

View File

@@ -0,0 +1,51 @@
<div>
<form wire:submit.prevent="save" class="grid lg:grid-cols-[repeat(4,minmax(0,2fr))_1fr] gap-2 mb-4 items-end">
<x-select.styled label="Tipo Documento" :options="$this->tipos" wire:model="tipo" required searchable
invalidate/>
<x-input type="number" label="Documento Inicial" wire:model="ingreso_inicial" min="0" invalidate/>
<x-input type="number" label="Documento Final" wire:model="ingreso_final" min="0" invalidate/>
<x-input type="number" label="Total" wire:model="total" min="0" invalidate/>
<x-button type="submit">
@if($this->currentIngreso)
Guardar
@else
Agregar
@endif
</x-button>
<p class="text-sm font-medium text-red-500">
@error('tipo'){{$message}}@enderror
</p>
<p class="text-sm font-medium text-red-500">
@error('ingreso_inicial'){{$message}}@enderror
</p>
<p class="text-sm font-medium text-red-500">
@error('ingreso_final'){{$message}}@enderror
</p>
<p class="text-sm font-medium text-red-500">
@error('total'){{$message}}@enderror
</p>
</form>
<x-table striped :headers="$this->headers" :rows="$this->rows">
@interact('column_ingreso_inicial', $row)
{{\Illuminate\Support\Number::format($row->ingreso_inicial)}}
@endinteract
@interact('column_ingreso_final', $row)
{{\Illuminate\Support\Number::format($row->ingreso_final)}}
@endinteract
@interact('column_total', $row)
{{\Illuminate\Support\Number::currency($row->total)}}
@endinteract
@interact('column_action', $row)
<x-button.circle icon="edit" wire:click="edit('{{$row->id}}')" :key="uniqid()"/>
<x-button.circle icon="trash" color="red" wire:click="confirmDelete('{{$row->id}}')" :key="uniqid()"/>
@endinteract
</x-table>
<div class="mt-4">
<p class="text-xl">Ingresos Totales: <span class="font-bold">{{$this->totalIngresos}}</span></p>
</div>
</div>

View File

@@ -0,0 +1,47 @@
<div>
<div class="flex gap-2 justify-between items-baseline">
<x-title>
{{$this->turno ? "Editar caja" : "Registrar Caja"}}
</x-title>
<x-button icon="arrow-left" color="secondary" href="{{route('cajas.index')}}">
Volver
</x-button>
</div>
<div class="flex gap-8 mb-4">
<div>
<x-label>Fecha</x-label>
<p class="font-bold text-secondary">{{$turno->fecha->format('d-m-Y')}}</p>
</div>
<div>
<x-label>Fecha</x-label>
<p class="font-bold text-secondary">{{$turno->numero_caja}}</p>
</div>
<div>
<x-label>Turno</x-label>
<p class="font-bold text-secondary">{{$turno->numero_turno}}</p>
</div>
</div>
<x-tab wire:model="tab">
<x-tab.items tab="Ingresos">
<x-slot:left>
<x-icon name="plus" class="w-4 h-4"/>
</x-slot:left>
<livewire:cajas.components.ingresos-component :turno="$turno"/>
</x-tab.items>
<x-tab.items tab="Egresos">
<x-slot:left>
<x-icon name="minus" class="w-4 h-4"/>
</x-slot:left>
<livewire:cajas.components.egresos-component :turno="$turno"/>
</x-tab.items>
<x-tab.items tab="Arqueo">
<x-slot:left>
<x-icon name="plus-minus" class="w-4 h-4"/>
</x-slot:left>
Arqueo
</x-tab.items>
</x-tab>
</div>

View File

@@ -1,3 +1,29 @@
<div>
<p> Knowing others is intelligence; knowing yourself is true wisdom. </p>
</div>
<x-title>Cajas</x-title>
<div class="flex gap-2 justify-between items-end">
<x-date label="Fecha" helpers/>
<x-button wire:click="createTurno" icon="plus">Registrar Caja</x-button>
</div>
<div class="mt-4">
<x-table striped :headers="$this->headers" :rows="$this->rows" paginate :$sort>
@interact('column_action', $row)
<x-button.circle icon="edit" :href="route('cajas.edit', $row->id)" :key="uniqid()"/>
<x-button.circle icon="trash" color="red" wire:click="confirmDelete('{{$row->id}}')" :key="uniqid()"/>
@endinteract
</x-table>
</div>
<x-modal title="Registrar Caja" wire center blur>
<div class="flex flex-col gap-2">
<x-date label="Fecha" wire:model="fecha" format="DD-MM-YYYY"/>
<x-input type="number" label="Caja" wire:model="caja"/>
<x-input type="number" label="Turno" wire:model="turno"/>
</div>
<x-slot:footer>
<x-button color="secondary" icon="arrow-left" wire:click="closeTurnoModal">Volver</x-button>
<x-button icon="plus" wire:click="storeTurno">Registrar Caja</x-button>
</x-slot:footer>
</x-modal>
</div>

View File

@@ -2,11 +2,14 @@
use Illuminate\Support\Facades\Route;
Route::get('/', App\Livewire\Home\Index::class)->name('home.index');
Route::get('/cajas', App\Livewire\Cajas\Index::class)->name('cajas.index');
Route::get('/reportes', App\Livewire\Reportes\Index::class)->name('reportes.index');
Route::get('/configuracion', App\Livewire\Configuracion\Index::class)->name('configuracion.index');
Route::name('cajas.')->prefix('cajas')->group(function () {
Route::get('/', App\Livewire\Cajas\Index::class)->name('index');
Route::get('/{turno}/edit', App\Livewire\Cajas\Edit::class)->name('edit');
});
require __DIR__.'/auth.php';

2
storage/debugbar/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*
!.gitignore

8
xdebug.ini Normal file
View File

@@ -0,0 +1,8 @@
zend_extension = xdebug
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = 172.17.21.160
xdebug.client_port = 9003
xdebug.idekey = PHPSTORM
xdebug.log = /var/www/html/storage/logs/xdebug.log