Skip to main content

Overview

The Negocio class represents a restaurant business in the system. It contains business information, contact details, configuration settings for reservations, and zone management.

Class Definition

class Negocio {
  final String id;
  final String nombre;
  final String nombreResponsable;
  final String email;
  final String telefono;
  final String direccion;
  final String descripcion;
  final String especialidad;
  final String icono;
  
  // Time Configuration
  final int minHorasParaCancelar;
  final int maxDiasAnticipacionReserva;
  final int duracionPromedioMinutos;
  
  // Zone Configuration
  final List<String> zonas;
  final bool telefonoVerificado;
}

Properties

Basic Information

id
String
required
Unique identifier for the business
nombre
String
required
Name of the restaurant
nombreResponsable
String
required
Name of the business owner or manager
email
String
required
Contact email address
telefono
String
required
Contact phone number
direccion
String
required
Physical address of the restaurant
descripcion
String
default:"''"
Description or additional information about the restaurant
especialidad
String
default:"''"
Cuisine specialty or type (e.g., “Mediterránea”, “Italiana”)
icono
String
default:"'restaurant'"
Icon identifier for the restaurant (e.g., ‘sailing’, ‘restaurant’, ‘local_fire_department’)

Time Configuration

minHorasParaCancelar
int
default:"24"
Minimum hours in advance required to cancel a reservation
maxDiasAnticipacionReserva
int
default:"14"
Maximum days in advance that reservations can be made
duracionPromedioMinutos
int
default:"60"
Average duration of a reservation in minutes

Status & Zones

telefonoVerificado
bool
default:"false"
Whether the business phone number has been verified
zonas
List<String>
default:"['Salón', 'Terraza']"
List of zones or areas available in the restaurant

Constructor

Negocio({
  required this.id,
  required this.nombre,
  required this.nombreResponsable,
  required this.email,
  required this.telefono,
  required this.direccion,
  this.descripcion = '',
  this.especialidad = '',
  this.icono = 'restaurant',
  this.minHorasParaCancelar = 24,
  this.maxDiasAnticipacionReserva = 14,
  this.duracionPromedioMinutos = 60,
  this.telefonoVerificado = false,
  this.zonas = const ['Salón', 'Terraza'],
})

Methods

copyWith()

Creates a copy of the business with specified fields updated.
Negocio copyWith({
  String? id,
  String? nombre,
  String? nombreResponsable,
  String? email,
  String? telefono,
  String? direccion,
  String? descripcion,
  String? especialidad,
  String? icono,
  int? minHorasParaCancelar,
  int? maxDiasAnticipacionReserva,
  int? duracionPromedioMinutos,
  bool? telefonoVerificado,
  List<String>? zonas,
})
Returns: Negocio - A new instance with updated fields

Usage Examples

Creating a Basic Restaurant

final restaurante = Negocio(
  id: 'rest-001',
  nombre: 'La Cocina de María',
  nombreResponsable: 'María González',
  email: '[email protected]',
  telefono: '+34912345678',
  direccion: 'Calle Mayor 123, Madrid',
);

Creating a Restaurant with Full Configuration

final restaurante = Negocio(
  id: 'rest-002',
  nombre: 'El Pescador',
  nombreResponsable: 'Carlos Martínez',
  email: '[email protected]',
  telefono: '+34923456789',
  direccion: 'Puerto Marina 45, Barcelona',
  descripcion: 'Restaurante especializado en pescados y mariscos frescos',
  especialidad: 'Pescados y Mariscos',
  icono: 'sailing',
  minHorasParaCancelar: 48,
  maxDiasAnticipacionReserva: 30,
  duracionPromedioMinutos: 90,
  telefonoVerificado: true,
  zonas: ['Salón Principal', 'Terraza Vista al Mar', 'Sala Privada'],
);

Updating Restaurant Configuration

final restauranteOriginal = Negocio(
  id: 'rest-001',
  nombre: 'La Cocina de María',
  nombreResponsable: 'María González',
  email: '[email protected]',
  telefono: '+34912345678',
  direccion: 'Calle Mayor 123, Madrid',
);

// Update cancellation policy and add new zones
final restauranteActualizado = restauranteOriginal.copyWith(
  minHorasParaCancelar: 48,
  zonas: ['Salón', 'Terraza', 'VIP', 'Jardín'],
  descripcion: 'Restaurante familiar con más de 25 años de tradición',
);

Validating Reservation Timeframes

final restaurante = Negocio(
  id: 'rest-001',
  nombre: 'La Cocina de María',
  nombreResponsable: 'María González',
  email: '[email protected]',
  telefono: '+34912345678',
  direccion: 'Calle Mayor 123, Madrid',
  minHorasParaCancelar: 24,
  maxDiasAnticipacionReserva: 14,
);

final fechaReserva = DateTime.now().add(Duration(days: 7));
final diasAnticipacion = fechaReserva.difference(DateTime.now()).inDays;

if (diasAnticipacion <= restaurante.maxDiasAnticipacionReserva) {
  print('Reserva permitida');
} else {
  print('No se pueden hacer reservas con más de ${restaurante.maxDiasAnticipacionReserva} días de anticipación');
}

Working with Restaurant Zones

final restaurante = Negocio(
  id: 'rest-001',
  nombre: 'La Cocina de María',
  nombreResponsable: 'María González',
  email: '[email protected]',
  telefono: '+34912345678',
  direccion: 'Calle Mayor 123, Madrid',
  zonas: ['Salón', 'Terraza', 'VIP'],
);

print('Zonas disponibles:');
for (final zona in restaurante.zonas) {
  print('- $zona');
}

// Check if a specific zone exists
final zonaSeleccionada = 'Terraza';
if (restaurante.zonas.contains(zonaSeleccionada)) {
  print('$zonaSeleccionada está disponible');
}

Icon Options

Common Material Design icon identifiers that can be used:
  • restaurant - Standard restaurant icon
  • dining - Dining icon
  • local_fire_department - Fire/grill icon
  • sailing - Nautical/seafood restaurants
  • set_meal - Traditional meals
  • rice_bowl - Asian cuisine
  • wine_bar - Wine bars
  • local_pizza - Pizza restaurants
  • local_cafe - Cafes

Configuration Best Practices

Cancellation Policy

  • Casual restaurants: 24 hours minimum
  • Fine dining: 48-72 hours minimum
  • Special events: 7+ days minimum

Advance Booking

  • Small restaurants: 7-14 days maximum
  • Popular restaurants: 30 days maximum
  • Fine dining: 60-90 days maximum

Average Duration

  • Quick service: 30-45 minutes
  • Casual dining: 60-90 minutes
  • Fine dining: 120-180 minutes

Build docs developers (and LLMs) love