Ejemplo n.º 1
0
        public async Task <Response> Post(ReservaDTO reservaDTO)
        {
            int days      = 0;
            var SavedUser = await _context.Reserva.FirstOrDefaultAsync(r => r.Descripcion == reservaDTO.Descripcion);

            if (SavedUser != null)
            {
                return(new Response {
                    Mensaje = $"Esta reservacion: {reservaDTO.Descripcion} ya esta en sistema"
                });
            }
            var alreadyReserved = await _context.Reserva.FirstOrDefaultAsync(r => r.FechaFinal >= reservaDTO.FechaInicial && r.FechaInicial <= reservaDTO.FechaInicial);

            if (alreadyReserved != null)
            {
                return(new Response {
                    Mensaje = $"Este horario ya fue reservado"
                });
            }

            if (reservaDTO.FechaInicial.DayOfWeek.Equals("Friday") || reservaDTO.FechaInicial.DayOfWeek.Equals("Saturday"))
            {
                days = 2;
            }
            else if (reservaDTO.FechaInicial.DayOfWeek.Equals("Sunday"))
            {
                days = 3;
            }
            else
            {
                days = 1;
            }

            if (days == 1 && (reservaDTO.FechaFinal.Hour > 21 || (reservaDTO.FechaInicial.Hour < 8 && reservaDTO.FechaInicial.Minute <= 29)))
            {
                return(new Response {
                    Mensaje = $"No se puede reservar en este horario de lunes a jueves"
                });
            }
            if (days == 2 && (reservaDTO.FechaFinal.Hour > 23 || reservaDTO.FechaInicial.Hour < 15))
            {
                return(new Response {
                    Mensaje = $"No se puede reservar en este horario los viernes y los sabados"
                });
            }
            else if (days == 3)
            {
                return(new Response {
                    Mensaje = $"No se puede reservar en domingo"
                });
            }
            var cliente = await _context.Cliente.FirstOrDefaultAsync(r => r.Id == reservaDTO.IdCliente);

            var message = _reservaDomainService.ValidarSiElClienteExiste(cliente);

            if (message != string.Empty)
            {
                return(new Response {
                    Mensaje = message
                });
            }


            var categoriaEvento = await _context.CategoriaEvento.FirstOrDefaultAsync(r => r.Id == reservaDTO.IdCategoriaEvento);

            message = _reservaDomainService.ValidarSiLaCategoriaDelEventoExiste(categoriaEvento);
            if (message != string.Empty)
            {
                return(new Response {
                    Mensaje = message
                });
            }

            message = _reservaDomainService.ValidarQueElClienteTengaMasDe21(cliente);
            if (message != string.Empty)
            {
                return(new Response {
                    Mensaje = message
                });
            }

            message = _reservaDomainService.ValidarEstadoCliente(cliente);
            if (message != string.Empty)
            {
                return(new Response {
                    Mensaje = message
                });
            }
            var reserva = ReservaDTO.DeDTOAModelo(reservaDTO);

            _context.Reserva.Add(reserva);

            if (reservaDTO.detalle != null)
            {
                foreach (var item in reservaDTO.detalle)
                {
                    await _reservaDetalleAppService.Post(item);
                }
            }
            await _context.SaveChangesAsync();

            return(new Response {
                Mensaje = $"Reservacion {reservaDTO.Descripcion} agregada exitosamente"
            });
        }
 public async Task <ActionResult <Response> > Post(ReservaDetalleDTO item)
 {
     return(Ok(await _reservaDetalleAppService.Post(item)));
 }