Exemple #1
0
        public ActionResult Create([Bind(Include = "EstadoFactura_Id,Descripcion,Termino")] EstadosFactura estadosFactura)
        {
            if (ModelState.IsValid)
            {
                db.EstadosFactura.Add(estadosFactura);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(estadosFactura));
        }
Exemple #2
0
        public ActionResult Create([Bind(Include = "Usuario_Id,RolId")] UsuariosRoles usuariosRoles)
        {
            if (ModelState.IsValid)
            {
                db.usuariosroles.Add(usuariosRoles);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(usuariosRoles));
        }
        public ActionResult Create([Bind(Include = "Id,FechaInicio,TipoContrato_Id,Persona_Id,ObjetoContractual,Plazo,FechaTerminacion,PersonaAbogado_Id,PersonaSuperviosr_Id,Crp,Cdp,FechaActaInicio,TipoEstadoContrato_Id,Year,ValorContrato,ValorAdministrar,Honorarios,Ejecucion,PorcentajeFacturado,PorcentajeFacturadoHonorarios,PersonaSupervisorTecnico_Id,ContratoMarco_Id")] Contratos contratos)
        {
            if (ModelState.IsValid)
            {
                db.Contratos.Add(contratos);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(contratos));
        }
Exemple #4
0
        public ActionResult Create([Bind(Include = "fase_Id,Descripcion")] FasesContrato fasesContrato)
        {
            if (ModelState.IsValid)
            {
                db.FasesContrato.Add(fasesContrato);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(fasesContrato));
        }
Exemple #5
0
        public ActionResult Create([Bind(Include = "TipoContrato_Id,Descripcion,Termino")] TiposContratos tiposContratos)
        {
            if (ModelState.IsValid)
            {
                db.TiposContratos.Add(tiposContratos);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(tiposContratos));
        }
Exemple #6
0
        public ActionResult Create(Modulos modulos)
        {
            if (ModelState.IsValid)
            {
                db.Modulos.Add(modulos);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(modulos));
        }
        public ActionResult Create([Bind(Include = "DocumentoId,Descripcion,Prefijo")] TiposDocumentos tiposDocumentos)
        {
            if (ModelState.IsValid)
            {
                db.TiposDocumentos.Add(tiposDocumentos);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(tiposDocumentos));
        }
        public ActionResult Create([Bind(Include = "EstadoActividad_Id,Descripcion")] EstadosActividad estadosActividad)
        {
            if (ModelState.IsValid)
            {
                db.EstadosActividad.Add(estadosActividad);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(estadosActividad));
        }
Exemple #9
0
 public ActionResult Create(Permisos permisos)
 {
     if (ModelState.IsValid)
     {
         db.Permisos.Add(permisos);
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.ModuloId = new SelectList(db.Modulos.OrderBy(x => x.Descripción), "ModuloId", "Descripción");
     return(View(permisos));
 }
Exemple #10
0
        public ActionResult Create([Bind(Include = "TiposEstadoContrato_Id,Descripcion")] TiposEstadoContrato tiposEstadoContrato)
        {
            if (ModelState.IsValid)
            {
                db.TiposEstadoContrato.Add(tiposEstadoContrato);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(tiposEstadoContrato));
        }
Exemple #11
0
        public ActionResult Create([Bind(Include = "ContratoMarco_Id,Descripcion")] ContratosMarco contratosMarco)
        {
            if (ModelState.IsValid)
            {
                db.ContratosMarcoes.Add(contratosMarco);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(contratosMarco));
        }
Exemple #12
0
        public ActionResult Create([Bind(Include = "Naturaleza_Id,Descripcion")] TiposNaturaleza tiposNaturaleza)
        {
            if (ModelState.IsValid)
            {
                db.TiposNaturaleza.Add(tiposNaturaleza);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(tiposNaturaleza));
        }
Exemple #13
0
        public ActionResult Create([Bind(Include = "Id,Descripcion")] FormaPago formaPago)
        {
            if (ModelState.IsValid)
            {
                db.FormaPagoes.Add(formaPago);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(formaPago));
        }
        public ActionResult Create([Bind(Include = "ActividadesEtapasId,Descripción")] ActividadesEtapas actividadesEtapas)
        {
            if (ModelState.IsValid)
            {
                db.ActividadesEtapas.Add(actividadesEtapas);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(actividadesEtapas));
        }
        public ActionResult Create([Bind(Include = "Persona_Id,Nombres,Apellidos,Direccion,Telefono,Correo,TipoPersona_Id")] Personas personas)
        {
            if (ModelState.IsValid)
            {
                db.Personas.Add(personas);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.TipoPersona_Id = new SelectList(db.TiposPersonas, "TipoPersona_Id", "Descripcion", personas.TipoPersona_Id);
            return(View(personas));
        }
Exemple #16
0
        public ActionResult Create([Bind(Include = "TipoPersona_Id,Descripcion,Naturaleza_Id,Cargo")] TiposPersona tiposPersona)
        {
            if (ModelState.IsValid)
            {
                db.TiposPersona.Add(tiposPersona);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.Naturaleza_Id = new SelectList(db.TiposNaturaleza, "Naturaleza_Id", "Descripcion", tiposPersona.Naturaleza_Id);
            return(View(tiposPersona));
        }
Exemple #17
0
        public ActionResult Create([Bind(Include = "Actividad_Id,Contratos_Id,FaseContrato_Id,Item,Descripción,DiasHabiles,FechaInicio,FechaFinal,EstadoActividad_Id")] ActividadesFases actividadesFases)
        {
            if (ModelState.IsValid)
            {
                db.ActividadesFases.Add(actividadesFases);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.EstadoActividad_Id = new SelectList(db.EstadosActividads, "EstadoActividad_Id", "Descripcion", actividadesFases.EstadoActividad_Id);
            ViewBag.FaseContrato_Id    = new SelectList(db.FasesContratoes, "FaseContrato_Id", "Descripcion", actividadesFases.FaseContrato_Id);
            return(View(actividadesFases));
        }
Exemple #18
0
        public ActionResult Create([Bind(Include = "Id,NumeroContrato,FechaInicio,TipoContrato_Id,Persona_Id,ObjetoContractual,Plazo,FechaTerminacion,PersonaAbogado_Id,PersonaSuperviosr_Id,Crp,Cdp,FechaActaInicio,TipoEstadoContrato_Id,Year,ValorContrato,ValorAdministrar,Honorarios,Ejecucion,PorcentajeFacturado,PorcentajeFacturadoHonorarios,PersonaSupervisorTecnico_Id,ContratoMarco_Id")] Contratos contratos)
        {
            if (ModelState.IsValid)
            {
                contratos.ValorContrato    = Convert.ToDecimal(contratos.ValorContrato);
                contratos.ValorAdministrar = Convert.ToDecimal(contratos.ValorAdministrar);
                contratos.Honorarios       = Convert.ToDecimal(contratos.Honorarios);

                db.Contratos.Add(contratos);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            ViewBag.PersonaCliente_Id           = new SelectList(db.Personas.Where(x => x.TipoPersona_Id == 2), "Persona_Id", "NombreCompleto");
            ViewBag.PersonaAbogado_Id           = new SelectList(db.Personas.Where(x => x.TipoPersona_Id == 2), "Persona_Id", "NombreCompleto");
            ViewBag.PersonaSupervisor_Id        = new SelectList(db.Personas.Where(x => x.TipoPersona_Id == 2), "Persona_Id", "NombreCompleto");
            ViewBag.PersonaSupervisorTecnico_Id = new SelectList(db.Personas.Where(x => x.TipoPersona_Id == 4), "Persona_Id", "NombreCompleto");
            ViewBag.TiposEstadoContrato_Id      = new SelectList(db.TiposEstadoContratoes, "TiposEstadoContrato_Id", "Descripcion");
            ViewBag.Contrato_Id     = new SelectList(db.Contratos.Where(c => c.ContratoMarco_Id == null), "Contrato_Id", "NumeroContrato");
            ViewBag.TipoContrato_Id = new SelectList(db.TiposContratos, "TipoContrato_Id", "Descripcion");

            return(View(contratos));
        }
Exemple #19
0
 public ActionResult CrearContratoFase([Bind(Include = "Fase_Id,Contrato_Id")] Registrofacescontratos registrofacescontratos)
 {
     if (ModelState.IsValid)
     {
         if (registrofacescontratos.Fase_Id != 0)
         {
             if (db.Registrofacescontratos.Where(x => x.Fase_Id == registrofacescontratos.Fase_Id && x.Contrato_Id == registrofacescontratos.Contrato_Id).Select(x => x).ToList().Count() == 0)
             {
                 db.Registrofacescontratos.Add(registrofacescontratos);
                 db.SaveChanges();
                 return(RedirectToAction("Index"));
             }
             else
             {
                 TempData["Error"] = "Error. Este fase ya se encuentra asignada al contrato";
                 return(RedirectToAction("Index"));
             }
         }
         TempData["Error"] = "Error. Seleciona una Fase.";
     }
     return(RedirectToAction("Index"));
 }
        public ActionResult Create(Rol rol, String[] PermisosId)
        {
            if (ModelState.IsValid)
            {
                using (var transacction = db.Database.BeginTransaction())
                {
                    try
                    {
                        db.Rols.Add(rol);


                        if (PermisosId != null)
                        {
                            foreach (var item in PermisosId)
                            {
                                db.PermisosRoles.Add(new PermisosRoles {
                                    RolId = rol.RolId, PermisoId = Convert.ToInt32(item), Estado = true
                                });
                            }
                        }

                        db.SaveChanges();
                        transacction.Commit();
                        return(RedirectToAction("Index"));
                    }
                    catch (Exception ex)
                    {
                        transacction.Rollback();
                        ModelState.AddModelError("", "Error " + ex + " " + "Favor validar información o comunicarse con el administrador del sistema");
                        return(View());
                    }
                }
            }

            ViewBag.PermisosId = new SelectList(db.Permisos.OrderBy(x => x.Descripción), "PermisoId", "Descripción");
            return(View(rol));
        }
        public JsonResult GuardarFaseContrato(int idContrato, int idFase)
        {
            string mensaje = "";
            string error   = "";

            string numeroContrato = db.Contratos.Where(c => c.Contrato_Id == idContrato).Select(c => c.NumeroContrato).FirstOrDefault();
            string nombreFase     = db.FasesContrato.Where(f => f.fase_Id == idFase).Select(f => f.Descripcion).FirstOrDefault();

            Registrofacescontratos rfc = new Registrofacescontratos();

            rfc.Contrato_Id = idContrato;
            rfc.Fase_Id     = idFase;

            if (rfc.Fase_Id != 0)
            {
                if (db.Registrofacescontratos.Where(x => x.Fase_Id == rfc.Fase_Id && x.Contrato_Id == rfc.Contrato_Id).Select(x => x).ToList().Count() == 0)
                {
                    try
                    {
                        db.Registrofacescontratos.Add(rfc);
                        db.SaveChanges();
                        mensaje = "La fase "" + nombreFase.Trim() + "" fue agregada exitosamente al contrato " + numeroContrato + ".";
                    }
                    catch (Exception)
                    {
                        error = "Ocurrió un error al intentar agregar la fase "" + nombreFase.Trim() + "" al contrato " + numeroContrato + ".";
                    }
                }
                else
                {
                    error = "<b>Error:</b> La fase &quot;" + nombreFase.Trim() + "&quot; ya se encuentra asignada al contrato" + numeroContrato + ".";
                }
            }

            return(Json("{ \"mensaje\": \"" + mensaje + "\", \"error\": \"" + error + "\" }"));
        }
        private ActionResult GuardarUsuario(Usuarios usuarios, FormCollection form, bool esModificado)
        {
            bool   exito   = false;
            string mensaje = string.Empty;

            try
            {
                if (usuarios == null)
                {
                    return(HttpNotFound());
                }

                string email = string.Empty;
                try
                {
                    email = db.Usuarios.Where(x => x.CorreoElectronico == usuarios.CorreoElectronico).FirstOrDefault().CorreoElectronico;
                }
                catch (Exception)
                {
                }

                if (!string.IsNullOrEmpty(email))
                {
                    List <Contratos> contratos = db.Contratos.OrderByDescending(c => c.NumeroContrato).ToList();
                    ViewBag.Contratos    = contratos;
                    ViewBag.MensajeError = "El correo electrónico ya se encuentra en uso.";
                    return(View(usuarios));
                }

                UserManager um = new UserManager();

                if (!string.IsNullOrEmpty(usuarios.PasswordAux))
                {
                    usuarios.Password = um.Base64Encode(usuarios.PasswordAux);
                }
                else
                if (!esModificado)
                {
                    usuarios.Password = um.Base64Encode(usuarios.Password);
                }

                usuarios.RolId = usuarios.RolId;

                if (ModelState.IsValid)
                {
                    // Lógica para recuperar valores de contratos
                    string esSuperUsuario    = form["esSuperUsuario"];
                    string tipoPermiso       = form["tipoPermiso"];
                    bool   todosLosContratos = usuarios.TodosLosContratos;

                    if (string.IsNullOrEmpty(esSuperUsuario))
                    {
                        usuarios.IdRoles = rolUsuarioNormal;

                        if (tipoPermiso != null && tipoPermiso == "W")
                        {
                            usuarios.TipoPermisos = "W"; // Escritura
                        }
                        else
                        {
                            usuarios.TipoPermisos = "R"; // Lectura
                        }
                        if (!todosLosContratos)
                        {
                            string[] idContratos = form.GetValues("contratos");
                            if (idContratos != null && idContratos.Length > 0)
                            {
                                usuarios.IdContratos = string.Join(",", idContratos);
                            }
                            else
                            {
                                mensaje = "Debe elegir al menos un contrato sobre el cual el usuario debe tener permisos.";
                            }
                        }
                    }
                    else
                    {
                        if (esSuperUsuario == "0")
                        {
                            usuarios.IdRoles = rolSuperUsuario;
                        }
                    }

                    if (string.IsNullOrEmpty(mensaje))
                    {
                        if (esModificado)
                        {
                            db.Entry(usuarios).State = EntityState.Modified;
                        }
                        else
                        {
                            db.Usuarios.Add(usuarios);
                        }

                        // Solamente se deben guardar los cambios cuando NADA falle
                        exito = (db.SaveChanges() > 0);
                    }
                }
                else
                {
                    var    errors  = ModelState.Values.SelectMany(v => v.Errors);
                    string errores = string.Empty;
                    foreach (var error in errors)
                    {
                        errores += error.ErrorMessage + "<br />";
                    }
                    mensaje = "No fue posible " + (ViewBag.IsEdit ? "actualizar" : "crear") + " el usuario: " + errores;
                }
            }
            catch (Exception e)
            {
                mensaje = "Ha ocurrido un error al " + (ViewBag.IsEdit ? "actualizar" : "crear") + " el usuario: " + e.Message;
            }

            if (exito)
            {
                return(RedirectToAction("Index"));
            }
            else
            {
                List <Contratos> contratos = db.Contratos.OrderByDescending(c => c.NumeroContrato).ToList();
                ViewBag.Contratos    = contratos;
                ViewBag.MensajeError = mensaje;
                return(View(usuarios));
            }
        }
        private ActionResult GuardarContrato(Contratos contratos, FormCollection form, bool esModificado, String[] PersonaNotificar_Id)
        {
            bool   exito   = false;
            string mensaje = string.Empty;

            try
            {
                if (contratos == null)
                {
                    return(HttpNotFound());
                }

                if (!AutorizacionContrato(contratos.Contrato_Id, true))
                {
                    return(RedirectToAction("AccessDenied", "Account"));
                }

                //if (ModelState.IsValid)
                //{
                double valorContratoAux = Convert.ToDouble(contratos.ValorContratoAux.Replace(",", "").Replace(".00", ""));
                contratos.ValorContrato = valorContratoAux;

                double valorAdministrarAux = Convert.ToDouble(contratos.ValorAdministrarAux.Replace(",", "").Replace(".00", ""));
                contratos.ValorAdministrar = valorAdministrarAux;

                if (!string.IsNullOrEmpty(contratos.HonorariosAux))
                {
                    double honorariosAux = Convert.ToDouble(contratos.HonorariosAux.Replace(",", "").Replace(".00", ""));
                    contratos.Honorarios = honorariosAux;
                }

                if (!string.IsNullOrEmpty(contratos.ValorPolizaAux))
                {
                    double valorPolizaAux = Convert.ToDouble(contratos.ValorPolizaAux.Replace(",", "").Replace(".00", ""));
                    contratos.ValorPoliza = valorPolizaAux;
                }

                if (!string.IsNullOrEmpty(contratos.ValorCdpAux))
                {
                    double valorCdpAux = Convert.ToDouble(contratos.ValorCdpAux.Replace(",", "").Replace(".00", ""));
                    contratos.ValorCDP = valorCdpAux;
                }

                if (!string.IsNullOrEmpty(contratos.ValorCrpAux))
                {
                    double valorCrpAux = Convert.ToDouble(contratos.ValorCrpAux.Replace(",", "").Replace(".00", ""));
                    contratos.ValorCRP = valorCrpAux;
                }

                if (esModificado)
                {
                    db.Entry(contratos).State = EntityState.Modified;
                }
                else
                {
                    db.Contratos.Add(contratos);
                    db.SaveChanges();
                }

                int id = contratos.Contrato_Id;

                if (!string.IsNullOrEmpty(contratos.Observaciones))
                {
                    //Almaceno la observacion en la tabla historiaobservaciones
                    HistoriaObservaciones historiaObs = new HistoriaObservaciones
                    {
                        Observaciones = contratos.Observaciones,
                        Fecha         = DateTime.Now,
                        ContratoId    = id,
                    };
                    db.HistoriaObservaciones.Add(historiaObs);
                }

                //Almaceno las personas a notificar
                if (PersonaNotificar_Id != null)
                {
                    foreach (var item in PersonaNotificar_Id)
                    {
                        Notificaciones notificacion = new Notificaciones()
                        {
                            ContractId = id,
                            PersonId   = Convert.ToInt32(item)
                        };
                        db.Notificaciones.Add(notificacion);
                    }
                }

                // Revisión de pagos - No aplican para los contratos que sean CIAD
                //Se desactiva el condicional para que guarde los pagos al contrato asi no sean interadministrativos
                //int idTipoContratoCIAD = (new ContratosHelper()).ObtenerIdCIAD();
                //if (contratos.TipoContrato_Id != idTipoContratoCIAD)
                //{
                List <PagoContrato> pagosActuales    = null;
                List <int>          pagosModificados = new List <int>();
                if (esModificado)
                {
                    pagosActuales = db.PagoContrato.Where(p => p.Contrato_Id == id).ToList <PagoContrato>();
                }

                string strNumeroPagos = form["numeroPagos"];

                if (!string.IsNullOrEmpty(strNumeroPagos))
                {
                    int numeroPagos = int.Parse(strNumeroPagos);
                    for (int i = 0; i < numeroPagos; i++)
                    {
                        string idPagoAux = form["idPago_" + i];

                        double valorPagoAux = Convert.ToDouble(form["valorPago_" + i].Replace(",", "").Replace(".00", ""));

                        PagoContrato pago = null;
                        if (esModificado && !string.IsNullOrEmpty(idPagoAux))
                        {
                            int idPago = int.Parse(idPagoAux);
                            pagosModificados.Add(idPago);
                            pago                 = pagosActuales.Where(p => p.PagosContrato_Id == idPago).FirstOrDefault <PagoContrato>();
                            pago.Valor           = valorPagoAux;
                            pago.Fecha           = DateTime.Parse(form["fechaPago_" + i]);
                            pago.Notas           = !string.IsNullOrEmpty(form["notasPago_" + i]) ? form["notasPago_" + i] : string.Empty;
                            db.Entry(pago).State = EntityState.Modified;
                        }
                        else
                        {
                            pago = new PagoContrato
                            {
                                Contrato_Id = id,
                                Valor       = valorPagoAux,
                                Fecha       = DateTime.Parse(form["fechaPago_" + i]),
                                Notas       = !string.IsNullOrEmpty(form["notasPago_" + i]) ? form["notasPago_" + i] : string.Empty
                            };
                            db.PagoContrato.Add(pago);
                        }
                    }
                }
                else
                {
                    mensaje = "No se agregaron pagos al contrato. Por favor verifique.";
                }

                //if (pagosActuales != null && pagosActuales.Count > 0 && pagosModificados != null && pagosModificados.Count > 0)
                //{
                //    List<PagoContrato> pagosContrato = new List<PagoContrato>();
                //    foreach (var pago in pagosActuales)
                //    {
                //        if (!pagosModificados.Contains(pago.PagosContrato_Id))
                //            db.Entry(pago).State = EntityState.Deleted;
                //        else
                //            pagosContrato.Add(pago);
                //    }

                //    contratos.PagoContrato = pagosContrato;

                //}
                //}

                // Solamente se deben guardar los cambios cuando NADA falle
                exito = (db.SaveChanges() > 0);
                //}
                //else
                //{
                //    mensaje = "No fue posible " + (ViewBag.IsEdit ? "actualizar" : "crear") + " el contrato";
                //}
            }
            catch (Exception e)
            {
                mensaje = "Ha ocurrido un error al " + (ViewBag.IsEdit ? "actualizar" : "crear") + " el contrato: " + e.Message;
            }

            if (exito)
            {
                return(RedirectToAction("Index"));
            }
            else
            {
                ViewBag.Persona_Id                  = new SelectList(db.Personas.Where(x => x.TipoPersona_Id == 3), "Persona_Id", "NombreCompleto", contratos.Persona_Id);
                ViewBag.PersonaAbogado_Id           = new SelectList(db.Personas.Where(x => x.TipoPersona_Id == 1), "Persona_Id", "NombreCompleto", contratos.PersonaAbogado_Id);
                ViewBag.PersonaSuperviosr_Id        = new SelectList(db.Personas.Where(x => x.TipoPersona_Id == 2), "Persona_Id", "NombreCompleto", contratos.PersonaSuperviosr_Id);
                ViewBag.PersonaSupervisorTecnico_Id = new SelectList(db.Personas.Where(x => x.TipoPersona_Id == 4), "Persona_Id", "NombreCompleto", contratos.PersonaSupervisorTecnico_Id);
                ViewBag.TipoEstadoContrato_Id       = new SelectList(db.TiposEstadoContrato, "TiposEstadoContrato_Id", "Descripcion", contratos.TipoEstadoContrato_Id);
                ViewBag.ContratoMarco_Id            = new SelectList(db.Contratos.Where(c => c.ContratoMarco_Id == null), "Contrato_Id", "NumeroContrato", contratos.ContratoMarco_Id);
                ViewBag.TipoContrato_Id_Aux         = new SelectList(db.TiposContratos, "TipoContrato_Id", "Descripcion", contratos.TipoContrato_Id);
                ViewBag.FormaPagoId                 = new SelectList(db.FormaPagoes, "Id", "Descripcion");
                ViewBag.PersonaNotificar_Id         = new SelectList(db.Personas, "Persona_Id", "NombreCompleto");

                ViewBag.MensajeError = mensaje;

                return(View(contratos));
            }
        }
        public ActionResult Create(Factura factura, FormCollection collection)
        {
            ViewBag.Accion = CREAR;
            ViewBag.IsEdit = false;

            try
            {
                // Validar si se seleccionó al menos un pago
                string[] idsPagosContrato = collection.GetValues("idPagoContrato");
                if (idsPagosContrato == null)
                {
                    throw new Exception("Debe seleccionar al menos un pago del contrato " + factura.Contrato.NumeroContrato);
                }

                // Validar si la factura tiene pagos asociados
                List <PagoContrato> pagosContrato = db.PagoContrato.Where(p => p.Contrato_Id == factura.Contrato_Id && p.Factura_Id == null).ToList();
                if (pagosContrato == null || pagosContrato.Count == 0)
                {
                    throw new Exception("El contrato " + factura.Contrato.NumeroContrato + " no tiene pagos asociados.");
                }

                // Se filtra el arreglo de pagos para las coincidencias con los pagos seleccionados
                pagosContrato = pagosContrato.Where(p => idsPagosContrato.Contains(p.PagosContrato_Id.ToString())).ToList();

                // Validación adicional de seguridad
                if (pagosContrato == null || pagosContrato.Count == 0)
                {
                    throw new Exception("Los pagos seleccionados no coinciden con los pagos del contrato " + factura.Contrato.NumeroContrato + ".");
                }

                double totalHonorariosAux = Convert.ToDouble(factura.TotalHonorariosAux.Replace(",", "").Replace(".00", ""));
                factura.TotalHonorarios = totalHonorariosAux;

                double valorBaseAux = Convert.ToDouble(factura.ValorBaseAux.Replace(",", "").Replace(".00", ""));
                factura.ValorBase = valorBaseAux;

                double valorIvaAux = Convert.ToDouble(factura.ValorIvaAux.Replace(",", "").Replace(".00", ""));
                factura.ValorIva = valorIvaAux;

                if (!string.IsNullOrEmpty(factura.ValorCanceladoAux))
                {
                    double valorCanceladoAux = Convert.ToDouble(factura.ValorCanceladoAux.Replace(",", "").Replace(".00", ""));
                    factura.ValorCancelado = valorCanceladoAux;
                }
                else
                {
                    factura.ValorCancelado = 0;
                }

                // Se asocian los pagos a la factura
                if (factura.PagoContrato == null)
                {
                    factura.PagoContrato = new List <PagoContrato>();
                }
                factura.PagoContrato.AddRange(pagosContrato);

                db.Factura.Add(factura);
                db.SaveChanges();

                return(RedirectToAction("Index"));
            }
            catch (Exception e)
            {
                CargarListados(collection["Estado_Id"], collection["Municipio_Id"], collection["Mes"]);
                ViewBag.MensajeError = "Ha ocurrido un error al crear la factura: " + e.Message;
                ViewBag.Accion       = CREAR;

                factura.ValorBase          = 0;
                factura.ValorBaseAux       = string.Empty;
                factura.ValorCancelado     = 0;
                factura.ValorCanceladoAux  = string.Empty;
                factura.ValorIva           = 0;
                factura.ValorIvaAux        = string.Empty;
                factura.TotalHonorarios    = 0;
                factura.TotalHonorariosAux = string.Empty;

                return(View(factura));
            }
        }