public ActionResult Create([Bind(Include = "matricula,marcaVehiculo,modeloVehiculo,fechaInicio,fechaFin,precio,observaciones,condicionadoPolizaId")] GestionPoliza gestionPoliza, string clienteId)
        {
            if (ModelState.IsValid == false || gestionPolizaBLL.FieldsFormatCreate(gestionPoliza, clienteId) == false)
            {
                TempData["mensaje"] = ItemMensaje.ErrorDatosNoValidosCrear(Poliza.GetNombreModelo());
                return(RedirectToAction("Index"));
            }
            Cliente cliente = unitOfWork.Cliente.Get(int.Parse(clienteId));

            if (gestionPolizaBLL.ValidarFormatoMatricula(gestionPoliza.matricula) == false)
            {
                TempData["mensaje"] = ItemMensaje.ErrorValidarFormatoMatricula(Poliza.GetNombreModelo());
                return(RedirectToAction("Create", new { clienteDni = cliente.dniCliente }));
            }
            if (gestionPolizaBLL.ExistMatriculaInPolizasActivas(gestionPoliza.matricula) == true)
            {
                TempData["mensaje"] = ItemMensaje.ErrorValidarMatriculaDuplicada(Poliza.GetNombreModelo(), gestionPoliza.matricula);
                return(RedirectToAction("Index"));
            }
            // Validaciones de rangos de fecha.
            DateTime today = DateTime.Today;

            if (gestionPoliza.fechaInicio < today)
            {
                TempData["mensaje"] = ItemMensaje.ErrorFechaInicioMenorHoy(Poliza.GetNombreModelo());
                return(RedirectToAction("Create", new { clienteDni = cliente.dniCliente }));
            }
            if (gestionPoliza.fechaFin > gestionPoliza.fechaInicio.AddYears(1))
            {
                TempData["mensaje"] = ItemMensaje.ErrorFechasMaxRangoInicioFin(Poliza.GetNombreModelo(), 365);
                return(RedirectToAction("Create", new { clienteDni = cliente.dniCliente }));
            }
            if (gestionPoliza.fechaFin > today.AddYears(1).AddMonths(6))
            {
                TempData["mensaje"] = ItemMensaje.ErrorFechasMaxRangoHoyFin(Poliza.GetNombreModelo(), 547);
                return(RedirectToAction("Create", new { clienteDni = cliente.dniCliente }));
            }
            try
            {
                var    usuario      = GetUsuarioLogado();
                Poliza polizaCreada = gestionPolizaBLL.CreatePolizaAndFirstGestionPoliza(gestionPoliza, usuario, cliente);
                TempData["mensaje"] = ItemMensaje.SuccessCrear(Poliza.GetNombreModelo(), polizaCreada.polizaId.ToString(CultureInfo.GetCultureInfo("es-ES")));
                return(RedirectToAction("Index"));
            }
            catch (Exception ex)
            {
                gestionPolizaBLL.UnCreatePoliza(cliente);
                TempData["mensaje"] = ItemMensaje.ErrorExcepcionCrear(Poliza.GetNombreModelo(), ex.GetType().ToString());
                return(RedirectToAction("Create", new { clienteDni = cliente.dniCliente }));
            }
        }
        public ActionResult EditPost(int id)
        {
            GestionPoliza gestionPoliza = gestionPolizaBLL.GetLastGestionPoliza(id);

            if (gestionPoliza == null)
            {
                TempData["mensaje"] = ItemMensaje.ErrorDatosNoValidosEditar(Poliza.GetNombreModelo());
                return(RedirectToAction("Index"));
            }
            var matriculaEstadoPrevio = gestionPoliza.matricula;

            if (TryUpdateModel(gestionPoliza, "", new string[] { "condicionadoPolizaId", "precio", "observaciones", "matricula", "marcaVehiculo", "modeloVehiculo" }) == false || gestionPolizaBLL.FieldsFormatEdit(gestionPoliza) == false)
            {
                TempData["mensaje"] = ItemMensaje.ErrorDatosNoValidosEditar(Poliza.GetNombreModelo());
                return(RedirectToAction("Details", new { id = gestionPoliza.gestionPolizaId }));
            }

            if (gestionPolizaBLL.ValidarFormatoMatricula(gestionPoliza.matricula) == false)
            {
                TempData["mensaje"] = ItemMensaje.ErrorValidarFormatoMatricula(Poliza.GetNombreModelo());
                return(RedirectToAction("Details", new { id = gestionPoliza.gestionPolizaId }));
            }
            // Si se ha modificado la matrícula, verifica que no esté en una póliza Activa.
            if (matriculaEstadoPrevio != gestionPoliza.matricula && gestionPolizaBLL.ExistMatriculaInPolizasActivas(gestionPoliza.matricula) == true)
            {
                TempData["mensaje"] = ItemMensaje.ErrorValidarMatriculaDuplicada(Poliza.GetNombreModelo(), gestionPoliza.matricula);
                return(RedirectToAction("Details", new { id = gestionPoliza.gestionPolizaId }));
            }
            try
            {
                Usuario usuarioLogado = GetUsuarioLogado();
                gestionPolizaBLL.UpdateGestionPoliza(gestionPoliza, usuarioLogado);
                TempData["mensaje"] = ItemMensaje.SuccessEditar(Poliza.GetNombreModelo(), gestionPoliza.polizaId.ToString(CultureInfo.GetCultureInfo("es-ES")));
                return(RedirectToAction("Index"));
            }
            catch (Exception ex)
            {
                ViewBag.mensaje = ItemMensaje.ErrorExcepcionEditar(Poliza.GetNombreModelo(), ex.GetType().ToString());
                IEnumerable <CondicionadoPoliza> condicionadosActivos = unitOfWork.CondicionadoPoliza.Where(c => c.activo == 1);
                ViewBag.condicionadoPolizaId = new SelectList(condicionadosActivos, "condicionadoPolizaId", "tipoCondicionado", gestionPoliza.condicionadoPolizaId);
                return(View(gestionPoliza));
            }
        }