public async Task <ActionResult> Create(ReservaView ReservaView, string RCM) { string idMesa = ""; Guid IdCliente = new Guid(); int codMesas = 0; int CMesas = db.Mesas.ToList().Count(); var addr = new AddR(); DateTime hora = DateTime.Now; if (RCM == "Reservar con menu") { RCM = Convert.ToString("1"); } else { RCM = null; } if (ReservaView.MesasOcupadas.Fecha_MesasO < DateTime.Now.Date) { ModelState.AddModelError(string.Empty, "Ingrese una fecha mayor o igual ala actual"); ViewBag.Error = true; ViewBag.CMesas = CantidadMesas.CMesas(db); return(View(ReservaView)); } //if (db.Restaurantes.FirstOrDefault().HoraCierre < TiempoEspera.Salida(ReservaView.MesasOcupadas.HoraIngreso_MesasO, db)) //{ // ModelState.AddModelError(string.Empty, "Ingrese una fecha mayor posterior ala actual, por que el restaurante cierra alas "+ db.Restaurantes.FirstOrDefault().HoraCierre.ToString("hh:mm:ss")); // ViewBag.Error = true; // ViewBag.CMesas = CantidadMesas.CMesas(db); // return View(ReservaView); //} if (ReservaView.MesasOcupadas.HoraIngreso_MesasO.TimeOfDay.Hours <= hora.TimeOfDay.Hours && ReservaView.MesasOcupadas.HoraIngreso_MesasO.TimeOfDay.Minutes <= hora.TimeOfDay.Minutes && DateTime.Now.Date == ReservaView.MesasOcupadas.Fecha_MesasO) { ModelState.AddModelError(string.Empty, "Ingrese una hora mayor ala actual"); ViewBag.Error = true; ViewBag.CMesas = CantidadMesas.CMesas(db); return(View(ReservaView)); } if (ReservaView.MesasOcupadas.CPersonas_Mesas <= 0) { ModelState.AddModelError(string.Empty, "Ingrese una cantidad de personas mayor a cero"); ViewBag.Error = true; ViewBag.CMesas = CantidadMesas.CMesas(db); return(View(ReservaView)); } if (ModelState.IsValid) { using (var transacion = db.Database.BeginTransaction()) { try { int cantida = CantidadMesas.CMesa(ReservaView.MesasOcupadas.Fecha_MesasO, ReservaView.MesasOcupadas.HoraIngreso_MesasO, db); int i2 = 1; if ((ReservaView.MesasOcupadas.CPersonas_Mesas % 4) == 0) { IdCliente = Cliente.idCliente(ReservaView.Clientes.Correo_Cli, ReservaView.Clientes.Nombres_Cli, ReservaView.Clientes.Apellidos_Cli, ReservaView.Clientes.Telefono_Cli, db); int CRMesas = (ReservaView.MesasOcupadas.CPersonas_Mesas / 4); if (CRMesas > cantida && ReservaView.MesasOcupadas.Fecha_MesasO == DateTime.Now.Date) { ModelState.AddModelError(string.Empty, string.Format("No hay mesas suficiente para hacer su reserva, por favor seleciones una fecha posterior a esta {0} y maximo de {1} persona", ReservaView.MesasOcupadas.Fecha_MesasO.ToString("dd/MM/yyyy"), (CMesas * 4))); ViewBag.Error = true; ViewBag.CMesas = CantidadMesas.CMesas(db); return(View(ReservaView)); } else if (CRMesas > cantida && ReservaView.MesasOcupadas.Fecha_MesasO > DateTime.Now.Date) { ModelState.AddModelError(string.Empty, string.Format("No hay mesas suficiente para hacer su reserva, maximo de {0}", (CMesas * 4))); ViewBag.Error = true; ViewBag.CMesas = CantidadMesas.CMesas(db); return(View(ReservaView)); } for (int i = 1; i <= CMesas; i++) { if (i2 <= CRMesas) { var Nmesa = ("M " + i); var mesa = db.Mesas.Where(m => m.Numero_Mesa == Nmesa).ToList(); foreach (var item in mesa) { int valor = MesasOcupada.Lista(item.Cod_Mesa, ReservaView.MesasOcupadas.Fecha_MesasO, db, ReservaView.MesasOcupadas.HoraIngreso_MesasO).Count(); if (valor == 0) { //int HoraS = ReservaView.MesasOcupadas.HoraIngreso_MesasO.TimeOfDay.Hours; //HoraS = HoraS + 2; var mesasO = new MesasOcupadas { Cod_Mesa = item.Cod_Mesa, Estado_MesasO = true, ConfirmarMesa = false, Reservada = "PaginaWeb", CPersonas_Mesas = ReservaView.MesasOcupadas.CPersonas_Mesas, Fecha_MesasO = ReservaView.MesasOcupadas.Fecha_MesasO, HoraIngreso_MesasO = ReservaView.MesasOcupadas.HoraIngreso_MesasO, HoraSalida_MesasO = TiempoEspera.Salida(ReservaView.MesasOcupadas.HoraIngreso_MesasO, db) //HoraSalida_MesasO = new DateTime(ReservaView.MesasOcupadas.HoraIngreso_MesasO.Year, ReservaView.MesasOcupadas.HoraIngreso_MesasO.Month, ReservaView.MesasOcupadas.HoraIngreso_MesasO.Day, // HoraS, ReservaView.MesasOcupadas.HoraIngreso_MesasO.Minute, ReservaView.MesasOcupadas.HoraIngreso_MesasO.Second) }; db.MesasOcupadas.Add(mesasO); db.SaveChanges(); codMesas = MesasOcupada.Lista(item.Cod_Mesa, ReservaView.MesasOcupadas.Fecha_MesasO, db, ReservaView.MesasOcupadas.HoraIngreso_MesasO).Max(mo => mo.Cod_MesasO); idMesa = codMesas + "," + idMesa; i2++; } } } else { i = CMesas; } } } else { IdCliente = Cliente.idCliente(ReservaView.Clientes.Correo_Cli, ReservaView.Clientes.Nombres_Cli, ReservaView.Clientes.Apellidos_Cli, ReservaView.Clientes.Telefono_Cli, db); int CRMesas = (ReservaView.MesasOcupadas.CPersonas_Mesas / 4) + 1; if (CRMesas >= cantida && ReservaView.MesasOcupadas.Fecha_MesasO == DateTime.Now.Date) { ModelState.AddModelError(string.Empty, string.Format("No hay mesas suficiente para hacer su reserva, por favor seleciones una fecha posterior a esta {0}", ReservaView.MesasOcupadas.Fecha_MesasO.ToString("dd/MM/yyyy"))); ViewBag.Error = true; ViewBag.CMesas = CantidadMesas.CMesas(db); return(View(ReservaView)); } else if (CRMesas > cantida && ReservaView.MesasOcupadas.Fecha_MesasO > DateTime.Now.Date) { ModelState.AddModelError(string.Empty, string.Format("No hay mesas suficiente para hacer su reserva, maximo de {0} personas", (CMesas * 4))); ViewBag.Error = true; ViewBag.CMesas = CantidadMesas.CMesas(db); return(View(ReservaView)); } for (int i = 1; i <= CMesas; i++) { if (i2 <= CRMesas) { var Nmesa = ("M " + i); var mesa = db.Mesas.Where(m => m.Numero_Mesa == Nmesa).ToList(); foreach (var item in mesa) { int codMesa = item.Cod_Mesa; int valor = MesasOcupada.Lista(item.Cod_Mesa, ReservaView.MesasOcupadas.Fecha_MesasO, db, ReservaView.MesasOcupadas.HoraIngreso_MesasO).Count(); if (valor == 0) { //int HoraS = ReservaView.MesasOcupadas.HoraIngreso_MesasO.TimeOfDay.Hours; //HoraS = HoraS + 2; var mesasO = new MesasOcupadas { Cod_Mesa = item.Cod_Mesa, Estado_MesasO = true, ConfirmarMesa = false, Reservada = "PaginaWeb", CPersonas_Mesas = ReservaView.MesasOcupadas.CPersonas_Mesas, Fecha_MesasO = ReservaView.MesasOcupadas.Fecha_MesasO, HoraIngreso_MesasO = ReservaView.MesasOcupadas.HoraIngreso_MesasO, HoraSalida_MesasO = TiempoEspera.Salida(ReservaView.MesasOcupadas.HoraIngreso_MesasO, db) //HoraSalida_MesasO = new DateTime(ReservaView.MesasOcupadas.HoraIngreso_MesasO.Year, ReservaView.MesasOcupadas.HoraIngreso_MesasO.Month, ReservaView.MesasOcupadas.HoraIngreso_MesasO.Day, // HoraS, ReservaView.MesasOcupadas.HoraIngreso_MesasO.Minute, ReservaView.MesasOcupadas.HoraIngreso_MesasO.Second) }; db.MesasOcupadas.Add(mesasO); db.SaveChanges(); codMesas = MesasOcupada.Lista(item.Cod_Mesa, ReservaView.MesasOcupadas.Fecha_MesasO, db, ReservaView.MesasOcupadas.HoraIngreso_MesasO).Max(mo => mo.Cod_MesasO); idMesa = codMesas + "," + idMesa; i2++; } } } else { i = CMesas; } } } string[] MenuCantidad = new string[db.Menus.Count()]; int IdMesasO = 0; string ramdo = Ramdon.Numero(); Reserva.DetalleMenuCliente(IdCliente, "," + idMesa, "PaginaWeb-" + ramdo, db, SeparadorMenu.Menu(MenuCantidad, MenuCantidad), IdMesasO, null); addr = new AddR { add = RCM, CPersona = ReservaView.MesasOcupadas.CPersonas_Mesas.ToString(), IdC = IdCliente, IdM = codMesas, IdMesaO = codMesas, NCF = "PaginaWeb-" + ramdo }; if (RCM == null) { await SendEmail.ConfirmarReserva(IdCliente, "PaginaWeb-" + ramdo, db); transacion.Commit(); } else { transacion.Commit(); return(RedirectToAction("MenuVista", "Menus", addr)); } return(RedirectToAction("ConReserva", "MesasOcupadas", addr)); } catch (Exception ex) { ViewBag.CMesas = CantidadMesas.CMesas(db); transacion.Rollback(); ModelState.AddModelError(string.Empty, "Error al Reservar " + ex.Message); ViewBag.Error = true; return(View(ReservaView)); } } } ViewBag.CMesas = CantidadMesas.CMesas(db); return(View(ReservaView)); }