public ActionResult ViewModalFacturar(Guid Id_Doc)
        {
            Documento           documento           = new Documento();
            IngresoVehiculoView ingresoVehiculoView = new IngresoVehiculoView();

            try
            {
                List <Documento> ltsDocumentos = db.Documento.ToList();
                documento = ltsDocumentos.Where(t => t.Id_Doc == Id_Doc && t.FechaCreacion_Doc.Date <= DateTime.Now.Date).FirstOrDefault();
                if (documento != null)
                {
                    documento = GetCalculoHoraValor(documento);
                }
                else
                {
                    documento                  = new Documento();
                    documento.Id_Doc           = Guid.NewGuid();
                    documento.Parqueadero      = new Parqueadero();
                    documento.DetalleDocumento = new List <DetalleDocumento>();
                    documento.Vehiculo         = new Vehiculo();
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, string.Format("Error al visualizar el modal de factura: {0}", ex.Message));
                return(View("Index", CagarVista(ingresoVehiculoView)));
            }
            return(PartialView("_ModalFacturarViewPartial", documento));
        }
        public ActionResult Index()
        {
            IngresoVehiculoView ingresoVehiculoView = new IngresoVehiculoView();

            try
            {
                ingresoVehiculoView = CagarVista(ingresoVehiculoView);
            }
            catch (Exception ex)
            {
                ingresoVehiculoView.TipoVehiculos = new List <TipoVehiculos>();
                ingresoVehiculoView.Parqueadero   = db.Documento.Where(t => t.Usuario_Doc == IdUsuario).FirstOrDefault().Parqueadero;
                ingresoVehiculoView.Documento     = new List <Documento>();
                ingresoVehiculoView.Vehiculo      = new Vehiculo();

                ModelState.AddModelError(string.Empty, string.Format("Error al iniciar: {0}", ex.Message));
                return(View("Index", ingresoVehiculoView));
            }


            return(View(ingresoVehiculoView));
        }
        public IngresoVehiculoView CagarVista(IngresoVehiculoView ingresoVehiculoView)
        {
            try
            {
                IdUsuario = User.Identity.GetUserId();
                Parqueadero               Parqueadero               = new Parqueadero();
                List <TipoVehiculos>      ltstiPoVehiculos          = new List <TipoVehiculos>();
                List <Documento>          ltsDocumentos             = new List <Documento>();
                Vehiculo                  vehiculo                  = new Vehiculo();
                ParqueaderoUsuarioDetalle parqueaderoUsuarioDetalle = new ParqueaderoUsuarioDetalle();
                parqueaderoUsuarioDetalle = db.ParqueaderoUsuarioDetalle.Where(t => t.IdUser_PUD == IdUsuario).FirstOrDefault();
                Parqueadero      = db.Parqueaderoes.Find(parqueaderoUsuarioDetalle.Id_Parq);
                ltstiPoVehiculos = db.TipoVehiculos.ToList();

                foreach (Documento item in db.Documento.Where(t => t.Id_Parq == Parqueadero.Id_Parq && t.Estado_Doc == true).ToList())
                {
                    Documento documento = GetCalculoHoraValor(item);

                    if (documento.FechaCreacion_Doc.Date == DateTime.Now.Date)
                    {
                        documento.VehiculosHoy = true;
                    }

                    ltsDocumentos.Add(documento);
                }

                ingresoVehiculoView.TipoVehiculos = ltstiPoVehiculos;
                ingresoVehiculoView.Vehiculo      = vehiculo;
                ingresoVehiculoView.Parqueadero   = Parqueadero;
                ingresoVehiculoView.Documento     = ltsDocumentos.ToList();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return(ingresoVehiculoView);
        }
        public ActionResult IngresarVehiculos(Guid?TipoVehiculosView, Guid?Id_Parq, string Placa, bool?Lavar, bool?Casillero, int?CantidadCasillero, string ObservacionCasillero)
        {
            using (var transaccion = db.Database.BeginTransaction())
            {
                IngresoVehiculoView ingresoVehiculoView = new IngresoVehiculoView();
                Mensaje             mensaje             = new Mensaje();
                try
                {
                    string IdUsuario = User.Identity.GetUserId();
                    if (Id_Parq == null || Id_Parq == Guid.Empty)
                    {
                        throw new Exception("No tiene ningun parqueadero asignado.");
                    }


                    if (TipoVehiculosView == null || TipoVehiculosView == Guid.Empty)
                    {
                        throw new Exception("Por favor seleccionar un tipo de vehiculo.");
                    }

                    if (string.IsNullOrWhiteSpace(Placa))
                    {
                        throw new Exception("Por favor ingrese la placa del vehiculo.");
                    }

                    if (Placa.Length <= 4)
                    {
                        throw new Exception("Por favor la placa del vehiculo debe tener mas de 4 caracteres.");
                    }

                    Lavar             = (Lavar == null) ? false : Lavar;
                    Casillero         = (Casillero == null) ? false : Casillero;
                    CantidadCasillero = (CantidadCasillero == null) ? 0 : CantidadCasillero;

                    if (Casillero.Value)
                    {
                        if (CantidadCasillero <= 0 || string.IsNullOrWhiteSpace(ObservacionCasillero))
                        {
                            throw new Exception("Por favor ingresar la cantidad o nombre de los articulos.");
                        }
                    }

                    DateTime         dateTime         = DateTime.Now;
                    Vehiculo         vehiculo         = new Vehiculo();
                    Parqueadero      parqueadero      = new Parqueadero();
                    Documento        documento        = new Documento();
                    DetalleDocumento detalleDocumento = new DetalleDocumento();
                    vehiculo    = db.Vehiculo.Where(t => t.Placa_Veh.ToLower() == Placa.ToLower()).FirstOrDefault();
                    parqueadero = db.Parqueaderoes.Find(Id_Parq);

                    if (vehiculo == null)
                    {
                        TipoVehiculos tipoVehiculos = new TipoVehiculos();
                        tipoVehiculos = db.TipoVehiculos.Find(TipoVehiculosView);
                        if (tipoVehiculos == null || tipoVehiculos.Id_TVeh == Guid.Empty)
                        {
                            throw new Exception("El tipo de vehiculo seleccionado no existe.");
                        }

                        ingresoVehiculoView.Vehiculo            = new Vehiculo();
                        ingresoVehiculoView.Vehiculo.Id_Veh     = Guid.NewGuid();
                        ingresoVehiculoView.Vehiculo.Estado_veh = true;
                        ingresoVehiculoView.Vehiculo.Id_TVeh    = tipoVehiculos.Id_TVeh;
                        ingresoVehiculoView.Vehiculo.Placa_Veh  = Placa;
                        vehiculo = ingresoVehiculoView.Vehiculo;
                        db.Vehiculo.Add(vehiculo);
                        db.SaveChanges();
                    }

                    if (vehiculo.Documento != null)
                    {
                        if (vehiculo.Documento.Where(t => t.Estado_Doc == true && t.Id_Parq == Id_Parq).Count() > 0)
                        {
                            throw new Exception(string.Format("El vehiculo de tipo {0} con placa {1} ya tiene un ingreso en el parqueadero", vehiculo.TipoVehiculo.Nombre_TVeh, vehiculo.Placa_Veh.ToUpper()));
                        }
                    }

                    if (Lavar.Value)
                    {
                        if (vehiculo.TipoVehiculo.ValorLavado_TVeh > 0)
                        {
                            documento.ValorLavado = vehiculo.TipoVehiculo.ValorLavado_TVeh;
                        }
                        else
                        {
                            throw new Exception($"El tipo de vehiculo {vehiculo.TipoVehiculo.Nombre_TVeh} no tiene valor configurado para el lavado de vehiculos.");
                        }
                    }

                    if (Casillero.Value)
                    {
                        if (vehiculo.TipoVehiculo.ValorLavado_TVeh > 0)
                        {
                            documento.ValorCasillero = vehiculo.TipoVehiculo.ValorCasillero_TVeh * CantidadCasillero.Value;
                        }
                        else
                        {
                            throw new Exception($"El tipo de vehiculo {vehiculo.TipoVehiculo.Nombre_TVeh} no tiene valor configurado para el casillero de vehiculos.");
                        }
                    }

                    if (CantidadCasillero > 0 && !string.IsNullOrWhiteSpace(ObservacionCasillero))
                    {
                        documento.Observaciones = $"{CantidadCasillero.Value}, {ObservacionCasillero}";
                    }

                    documento.Id_Veh                = vehiculo.Id_Veh;
                    documento.Id_Parq               = parqueadero.Id_Parq;
                    documento.Id_Doc                = Guid.NewGuid();
                    documento.Usuario_Doc           = IdUsuario;
                    documento.Valor_Doc             = 0;
                    documento.Consecutivo           = db.Documento.ToList().Count + 1;
                    documento.Estado_Doc            = true;
                    documento.FechaCreacion_Doc     = dateTime;
                    documento.FachaFinalizacion_Doc = DateTime.MaxValue;

                    db.Documento.Add(documento);
                    db.SaveChanges();

                    detalleDocumento.Estado_DDoc = true;
                    detalleDocumento.Horas_DDoc  = dateTime;
                    detalleDocumento.Id_DDoc     = Guid.NewGuid();
                    detalleDocumento.Id_Doc      = documento.Id_Doc;
                    db.DetalleDocumento.Add(detalleDocumento);
                    db.SaveChanges();

                    ImprimirTicket imprimirTicket = new ImprimirTicket();
                    Imprimir       imprimir       = new Imprimir();
                    imprimir.NombreParqueadero = documento.Parqueadero.NombreEmpresa_Parq.ToUpper();
                    imprimir.Direccion         = documento.Parqueadero.Direccion_Parq.ToUpper();
                    imprimir.NitParqueadero    = documento.Parqueadero.NitEmpresa_Parq.ToUpper();
                    imprimir.TipoVehiculo      = db.TipoVehiculos.Find(vehiculo.Id_TVeh).Nombre_TVeh.ToUpper();
                    imprimir.Placa             = vehiculo.Placa_Veh.ToUpper();
                    imprimir.Fecha             = DateTime.Now.Date;
                    imprimir.Horas             = documento.DetalleDocumento.FirstOrDefault().Horas_DDoc;
                    imprimir.Impresora         = documento.Parqueadero.Impresora_Parq;
                    imprimir.ValorParqueadero  = 0;
                    imprimir.Lavar             = Lavar.Value;
                    imprimir.Casillero         = Casillero.Value;
                    imprimir.ValotLavar        = documento.ValorLavado;
                    imprimir.ValotCasillero    = documento.ValorCasillero;
                    imprimir.Observaciones     = documento.Observaciones;
                    imprimir.ValorXVehiculo    = vehiculo.TipoVehiculo.Valor_TVeh;
                    imprimir.TiempoXVehiculo   = parqueadero.PagoMinutos_Parq;
                    imprimir.HoraApertura      = parqueadero.HoraApertura_Parq;
                    imprimir.HoraCierre        = parqueadero.HoraCierre_Parq;
                    //imprimir.Transcurrido = GetCalculoHoraValor(documento).DetalleDocumento.FirstOrDefault().Transcurrido_DDoc;
                    imprimir.Transcurrido = "Inicio";
                    //imprimirTicket.Generar(imprimir, documento.Parqueadero.ImprimirIngreso_Parq, false);

                    transaccion.Commit();
                    return(PartialView("_FacturaViewPartial", imprimir));
                }
                catch (Exception ex)
                {
                    transaccion.Rollback();
                    mensaje.DescripcionMensaje = string.Format("Error al ingresar vehiculo: {0}", ex.Message);
                    //ModelState.AddModelError(string.Empty, string.Format("Error al ingresar vehiculo: {0}", ex.Message));
                    return(PartialView("AlertMensajerViewPartial", mensaje));
                    //return View("Index", CagarVista(ingresoVehiculoView));
                }
            }
            return(RedirectToAction("Index"));
        }
        public ActionResult Facturar(Guid?Id_Doc, decimal ValorPagado_Doc, decimal Valor_Doc, decimal ValorLavado, decimal ValorCasillero)
        {
            IngresoVehiculoView ingresoVehiculoView = new IngresoVehiculoView();
            ImprimirTicket      imprimirTicket      = new ImprimirTicket();
            Imprimir            imprimir            = new Imprimir();

            using (var transaccion = db.Database.BeginTransaction())
            {
                Mensaje mensaje = new Mensaje();
                try
                {
                    if (ValorPagado_Doc <= 0)
                    {
                        throw new Exception("Por favor ingrese un valor total valido.");
                    }

                    DateTime  dateTime   = DateTime.Now;
                    Documento documento1 = db.Documento.Find(Id_Doc);

                    if (documento1 == null || documento1.Id_Doc == Guid.Empty)
                    {
                        throw new Exception("por favor envié un documento valido.");
                    }

                    if (documento1.Parqueadero.Lavar)
                    {
                        if (ValorLavado > 0)
                        {
                            documento1.ValorLavado = ValorLavado;
                        }
                    }

                    if (documento1.Parqueadero.Casillero)
                    {
                        if (ValorCasillero > 0)
                        {
                            documento1.ValorCasillero = ValorCasillero;
                        }
                    }

                    documento1.Valor_Doc             = Valor_Doc;
                    documento1.ValorPagado_Doc       = ValorPagado_Doc;
                    documento1.FachaFinalizacion_Doc = dateTime;
                    documento1.Estado_Doc            = false;
                    db.Entry(documento1).State       = EntityState.Modified;

                    foreach (var item in db.DetalleDocumento.Where(t => t.Id_Doc == documento1.Id_Doc).ToList())
                    {
                        DetalleDocumento detalleDocumento1 = item;
                        detalleDocumento1.Estado_DDoc = false;
                        db.Entry(documento1).State    = EntityState.Modified;
                    }

                    DetalleDocumento detalleDocumento = new DetalleDocumento();
                    detalleDocumento.Estado_DDoc = false;
                    detalleDocumento.Horas_DDoc  = dateTime;
                    detalleDocumento.Id_Doc      = documento1.Id_Doc;
                    detalleDocumento.Id_DDoc     = Guid.NewGuid();
                    db.DetalleDocumento.Add(detalleDocumento);
                    db.SaveChanges();

                    Parqueadero parqueadero = db.Parqueaderoes.Find(documento1.Id_Parq);

                    imprimir.NombreParqueadero = documento1.Parqueadero.NombreEmpresa_Parq.ToUpper();
                    imprimir.Direccion         = documento1.Parqueadero.Direccion_Parq.ToUpper();
                    imprimir.NitParqueadero    = documento1.Parqueadero.NitEmpresa_Parq.ToUpper();
                    imprimir.TipoVehiculo      = db.TipoVehiculos.Find(documento1.Vehiculo.TipoVehiculo.Id_TVeh).Nombre_TVeh.ToUpper();
                    imprimir.Placa             = documento1.Vehiculo.Placa_Veh.ToUpper();
                    imprimir.Fecha             = DateTime.Now.Date;
                    imprimir.Horas             = documento1.DetalleDocumento.FirstOrDefault().Horas_DDoc;
                    imprimir.Impresora         = documento1.Parqueadero.Impresora_Parq;
                    imprimir.ValorParqueadero  = Valor_Doc;
                    imprimir.ValotTotal        = documento1.ValorPagado_Doc;
                    imprimir.Lavar             = (ValorLavado > 0) ? true : false;
                    imprimir.Casillero         = (ValorCasillero > 0) ? true : false;
                    imprimir.ValotCasillero    = ValorCasillero;
                    imprimir.ValotLavar        = ValorLavado;
                    imprimir.Observaciones     = documento1.Observaciones;
                    imprimir.Transcurrido      = GetCalculoHoraValor(documento1).DetalleDocumento.FirstOrDefault().Transcurrido_DDoc;
                    imprimir.ValorXVehiculo    = documento1.Vehiculo.TipoVehiculo.Valor_TVeh;
                    imprimir.TiempoXVehiculo   = parqueadero.PagoMinutos_Parq;
                    imprimir.HoraApertura      = parqueadero.HoraApertura_Parq;
                    imprimir.HoraCierre        = parqueadero.HoraCierre_Parq;
                    //imprimirTicket.Generar(imprimir, documento1.Parqueadero.ImprimirFactura_Parq, true);

                    transaccion.Commit();
                    return(PartialView("_FacturaViewPartial", imprimir));
                }
                catch (Exception ex)
                {
                    transaccion.Rollback();
                    //ModelState.AddModelError(string.Empty, string.Format("Error al facturar: {0}", ex.Message));
                    //return Json(new { data = ex.Message }, JsonRequestBehavior.AllowGet);
                    mensaje.DescripcionMensaje = string.Format("Error al ingresar vehiculo: {0}", ex.Message);
                    return(PartialView("AlertMensajerViewPartial", mensaje));
                    //return View("Index", CagarVista(ingresoVehiculoView));
                }
            }
            return(Json(new { data = imprimir }, JsonRequestBehavior.AllowGet));
            //return View("Index", CagarVista(ingresoVehiculoView));
        }