import json
|
|
from django.core.management.base import BaseCommand
|
|
from eventos.models import Reserva, Evento
|
|
from reymotausers.models import ReyMotaUser
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = "Importa reservas desde un archivo JSON"
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument('archivo_json', type=str, help="Ruta del archivo JSON")
|
|
|
|
def handle(self, *args, **kwargs):
|
|
archivo_json = kwargs['archivo_json']
|
|
|
|
try:
|
|
with open(archivo_json, 'r', encoding='utf-8') as file:
|
|
datos = json.load(file)
|
|
|
|
self.stdout.write(self.style.WARNING(f"\nSe encontraron {len(datos)} reservas en el archivo '{archivo_json}'."))
|
|
confirmar = input("¿Deseas continuar con la importación? (s/n): ").strip().lower()
|
|
|
|
if confirmar != 's':
|
|
self.stdout.write(self.style.ERROR("Importación cancelada."))
|
|
return
|
|
|
|
reservas_creados = 0
|
|
for reserva_data in datos:
|
|
try:
|
|
evento = Evento.objects.get(id=reserva_data["evento"])
|
|
usuario = ReyMotaUser.objects.get(email=reserva_data["usuario_email"])
|
|
|
|
creado = Reserva.objects.create(
|
|
evento_id=evento.id,
|
|
usuario_id=usuario.id,
|
|
fecha_reserva=reserva_data['fecha_reserva'],
|
|
evento=evento
|
|
)
|
|
if creado:
|
|
reservas_creados += 1
|
|
|
|
except Evento.DoesNotExist:
|
|
self.stderr.write(self.style.ERROR(f"Evento '{reserva_data['evento']}' no encontrado."))
|
|
|
|
except ReyMotaUser.DoesNotExist:
|
|
self.stderr.write(self.style.ERROR(f"Usuario con email '{reserva_data['usuario_email']}' no encontrado."))
|
|
|
|
self.stdout.write(self.style.SUCCESS(f'Se importaron {reservas_creados} reservas correctamente.'))
|
|
|
|
except FileNotFoundError:
|
|
self.stderr.write(self.style.ERROR(f"El archivo {archivo_json} no se encontró."))
|
|
except json.JSONDecodeError:
|
|
self.stderr.write(self.style.ERROR("Error al leer el archivo JSON. Asegúrate de que el formato sea correcto."))
|