user()->can('ver caja'); } public static function form(Form $form): Form { return $form ->schema([ TextInput::make('monto_inicial') ->required() ->numeric(), TextInput::make('monto_final') ->disabled(), // Deshabilitar para cálculo automático Forms\Components\DateTimePicker::make('fecha_apertura') ->required(), Forms\Components\DateTimePicker::make('fecha_cierre'), Select::make('estado') ->label('Estado') ->required() ->options([ 'Abierta' => 'Abierta', 'Cerrada' => 'Cerrada', ]) ->afterStateUpdated(function (callable $set, $state, $get) { // Si el estado se cambia a 'Cerrada', actualizamos la fecha de cierre y calculamos el monto final if ($state === 'Cerrada') { // Actualizamos la fecha de cierre al momento actual $set('fecha_cierre', now()); // Obtener el ID del registro actual desde el contexto $cajaId = $get('id'); // Usamos $get para obtener el ID del registro // Buscar la caja por su ID $caja = Caja::find($cajaId); // Encontrar la caja por ID if ($caja) { // Calcular monto final de acuerdo a los movimientos de caja $montoFinal = $caja->calcularMontoFinal(); // Guardar el monto final calculado $caja->update([ 'monto_final' => $montoFinal, // Actualizamos el monto final en la base de datos ]); // Ahora, actualizamos el estado del formulario $set('monto_final', $montoFinal); // Actualizar el estado del formulario } } }), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('monto_inicial') ->numeric() ->sortable(), Tables\Columns\TextColumn::make('monto_final') ->numeric() ->sortable(), Tables\Columns\TextColumn::make('fecha_apertura') ->dateTime() ->sortable(), Tables\Columns\TextColumn::make('fecha_cierre') ->dateTime() ->sortable(), Tables\Columns\TextColumn::make('estado'), Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), Tables\Columns\TextColumn::make('updated_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->paginated(true) //->paginationPageOptions([50]) ->defaultSort('created_at', 'desc') ->filters([ // Filtros adicionales, si los necesitas ]) ->actions([ Tables\Actions\EditAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]); } public static function getRelations(): array { return [ DetallesRelationManagerRelationManager::class, ]; } public static function getPages(): array { return [ 'index' => Pages\ListCajas::route('/'), 'create' => Pages\CreateCaja::route('/create'), 'edit' => Pages\EditCaja::route('/{record}/edit'), ]; } }