public int Actualiza(int pIntIdExpediente, int pIntIdProyecto, String pStrDescripcion, String pStrEspecificaciones,
            Decimal pDecValorReferencial, String pStrTipoEjecutor, String pStrNomEjecutor, String pStrApeEjecutor, String pStrRazonSocialEjecutor,
            String pStrNomContacto, String pStrApeContaco, String pStrEmailContacto,
            String pStrTelfContacto, String pStrDireccionContacto, String pStrNomSupervisor,
            String pStrApeSupervisor, String pStrTelfSupervisor, String pStrEmailSupervisor,
            int pIntIdEjecutor, int pIntIdContacto, int pIntIdSupervisor, List<DocumentoExpedienteTecnicoOP> pLstDocumentos)
        {
            int intResultado = -999;

            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();

                ObjectParameter objResult = new ObjectParameter("pIntIdExp_out", typeof(int));

                objContext.sp_gop_upd_exp(pIntIdExpediente, pIntIdProyecto, pStrDescripcion, pStrEspecificaciones, pDecValorReferencial,
                   pStrTipoEjecutor, pStrNomEjecutor, pStrApeEjecutor, pStrRazonSocialEjecutor, pStrNomContacto,
                   pStrApeContaco, pStrEmailContacto, pStrTelfContacto, pStrDireccionContacto, pStrNomSupervisor, pStrApeSupervisor,
                   pStrTelfSupervisor, pStrEmailSupervisor, pIntIdEjecutor, pIntIdContacto,pIntIdSupervisor, objResult);

                var lstDocumentos = objContext.OP_DOCUMENTO_EXPEDIENTE_TECNICO.Where(doc => doc.coExpediente == pIntIdExpediente).ToList();

                foreach (OP_DOCUMENTO_EXPEDIENTE_TECNICO objDoc in lstDocumentos)
                {
                    objContext.OP_DOCUMENTO_EXPEDIENTE_TECNICO.DeleteObject(objDoc);
                }

                if (pLstDocumentos != null)
                {
                    foreach (DocumentoExpedienteTecnicoOP objDocumento in pLstDocumentos)
                    {
                        OP_DOCUMENTO_EXPEDIENTE_TECNICO objDocumentoExpTec = new OP_DOCUMENTO_EXPEDIENTE_TECNICO();
                        objDocumentoExpTec.coExpediente = pIntIdExpediente;
                        objDocumentoExpTec.feEmision = objDocumento.FechaEmision;
                        objDocumentoExpTec.noTipoDocExpTec = objDocumento.TipoDocumento;
                        objDocumentoExpTec.nuNroDOcumento = objDocumento.NroDocumento;
                        objDocumentoExpTec.txDescripcion = objDocumento.Descripcion;
                        objDocumentoExpTec.txRutaArchivo = objDocumento.RutaArchivo;
                        objDocumentoExpTec.nomArchivo = objDocumento.NomArchivo;
                        objContext.AddToOP_DOCUMENTO_EXPEDIENTE_TECNICO(objDocumentoExpTec);
                    }
                }
                objContext.SaveChanges();

                int intIdExpediente = Convert.ToInt32(objResult.Value.ToString());

                if (intIdExpediente > 0)
                {
                    intResultado = 1;
                }
                else{
                    intResultado = intIdExpediente;
                }
            }
            catch (Exception ex)
            {

            }
            return intResultado;
        }
        public int Actualiza(int pIntIdCronograma, int pIntIdExpediente, int pIntPlazoEjecucion)
        {
            int intResultado = -999;
            int intRows=0;
            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();
                OP_CRONOGRAMA_EJECUCION objCronogramaEjecucion = objContext.OP_CRONOGRAMA_EJECUCION.First(x => x.coCronograma == pIntIdCronograma);

                if (objCronogramaEjecucion != null) {
                    objCronogramaEjecucion.nuPlazoEjecucion = pIntPlazoEjecucion;

                    intRows = objContext.SaveChanges();

                    if (intRows > 0)
                    {
                        intResultado = 1;
                    }
                }
            }
            catch (Exception ex)
            {
            }
            return intResultado;
        }
        public int Inserta(int pIntIdExpediente, int pIntPlazoEjecucion)
        {
            int intResultado = -999;
            int intRows;
            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();

                OP_CRONOGRAMA_EJECUCION objCronogramaEjecucion = new OP_CRONOGRAMA_EJECUCION();
                objCronogramaEjecucion.coExpediente = pIntIdExpediente;
                objCronogramaEjecucion.feEmision = DateTime.Now;
                objCronogramaEjecucion.nuPlazoEjecucion = pIntPlazoEjecucion;

                objContext.AddToOP_CRONOGRAMA_EJECUCION(objCronogramaEjecucion);
                intRows = objContext.SaveChanges();

                if (intRows > 0)
                {
                    intResultado = 1;
                }
            }
            catch (Exception ex)
            {
                intResultado = -999;
            }
            return intResultado;
        }
        public int Actualiza(int pIntIdProyecto, String pStrCodSNIP, String pStrDescripcion,
            String pStrNombre, int pIntIdVia, String pStrUbicacion, int pIntBeneficiarios, Decimal pDblValor, String pStrIdEstado)
        {
            int intResultado = -999;
            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();

                var lstProyectosTmp = (from pi in objContext.OP_PROYECTO_INVERSION_PUBLICA
                                       where pi.coSNIP == pStrCodSNIP && pi.coProyecto != pIntIdProyecto
                                       select new { pi}).ToList();

                if (lstProyectosTmp.Count == 0)
                {
                    OP_PROYECTO_INVERSION_PUBLICA objProyecto = objContext.OP_PROYECTO_INVERSION_PUBLICA.First(pi => pi.coProyecto == pIntIdProyecto);

                    if (objProyecto == null)
                    {
                        intResultado = -996;
                    }
                    else
                    {
                        if (objProyecto.noEstado != ProyectoInversion.STR_ID_ESTADO_EN_CONSULTA)
                        {
                            intResultado = -998;
                        }
                        else
                        {
                            if (pStrIdEstado != ProyectoInversion.STR_ID_ESTADO_INVIABLE)
                            {
                                objProyecto.coSNIP = pStrCodSNIP;
                            }
                            objProyecto.txDescripcion = pStrDescripcion;
                            objProyecto.noNombre = pStrNombre;
                            objProyecto.coVia = pIntIdVia;
                            objProyecto.txUbicacion = pStrUbicacion;
                            objProyecto.nuBeneficiarios = pIntBeneficiarios;
                            objProyecto.nuValorReferencialPerfil = pDblValor;
                            objProyecto.noEstado = pStrIdEstado;
                            intResultado = objContext.SaveChanges();
                        }
                    }
                }
                else
                {
                    intResultado = -997;
                }
            }
            catch (Exception ex)
            {
            }
            return intResultado;
        }
        public int Actualiza(int pIntIdEntrega, int pIntIdProyecto, DateTime pDatFecEntregaProg, DateTime pDatFecEntregaEfec, String pStrObservaciones,
            String pStrTipoEntrega, int pIntIdProveedor, int pIntIdMaterial, int pIntCantidad)
        {
            int intResultado = -999;
            ObrasPublicasEntities objContext = new ObrasPublicasEntities();

            try
            {
                ProyectoInversion_DAL objProyectoInversion_DAL = new ProyectoInversion_DAL();
                ProyectoInversion objProyectoInversion =  objProyectoInversion_DAL.ObtieneXId(pIntIdProyecto);

                if (objProyectoInversion.IdEstado == ProyectoInversion.STR_ID_ESTADO_ADJUDICADO)
                {
                    intResultado = -998;
                }
                else
                {
                    OP_ENTREGA_MATERIAL objEntregaMaterial = objContext.OP_ENTREGA_MATERIAL.Where(ent => ent.coEntrega == pIntIdEntrega).First();

                    if (objEntregaMaterial != null)
                    {
                        objEntregaMaterial.coMaterial = pIntIdMaterial;
                        objEntregaMaterial.coProveedor = pIntIdProveedor;
                        objEntregaMaterial.feEntregaEfectiva = pDatFecEntregaEfec;
                        objEntregaMaterial.feEntregaProgramada = pDatFecEntregaProg;
                        objEntregaMaterial.noTipoEntrega = pStrTipoEntrega;
                        objEntregaMaterial.nuCantidad = pIntCantidad;
                        objEntregaMaterial.txObservaciones = pStrObservaciones;

                        int intRows = objContext.SaveChanges();

                        if (intRows > 0)
                        {
                            intResultado = 1;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex.ToString().Contains("IX_op_proyecto_inversion_publica"))
                {
                    intResultado = -998;
                }
            }
            return intResultado;
        }
        public List<ProyectoInversion> BuscarXFiltro(String pStrCodSNIP, String pStrNombre, String pStrUbicacion, String pStrIdEstado)
        {
            List<ProyectoInversion> lstProyectos = new List<ProyectoInversion>();
            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();

                if (String.IsNullOrWhiteSpace(pStrNombre))
                {
                    pStrNombre = "";
                }
                if (String.IsNullOrWhiteSpace(pStrUbicacion))
                {
                    pStrUbicacion = "";
                }
                if (String.IsNullOrWhiteSpace(pStrIdEstado))
                {
                    pStrIdEstado = "0";
                }

                var objResult = objContext.sp_gop_get_proy_x_filtro(pStrNombre, pStrCodSNIP, pStrUbicacion, pStrIdEstado).ToList();

                List<sp_gop_get_proy_x_filtro_Result> lstProyectosTmp = objResult;

                foreach (var objProyTmp in lstProyectosTmp)
                {
                    ProyectoInversion objProyecto = new ProyectoInversion();
                    objProyecto.CodSNIP = objProyTmp.coSNIP;
                    objProyecto.Nombre = objProyTmp.noNombre;
                    objProyecto.IdProyecto = objProyTmp.coProyecto;
                    objProyecto.Ubicacion = objProyTmp.txUbicacion;
                    objProyecto.NomVia = objProyTmp.noNomVia;
                    objProyecto.TipoVia = objProyTmp.noTipoVia;
                    objProyecto.IdEstado = objProyTmp.noEstado;
                    objProyecto.NomEstado = ObtieneEstados(null).Where(e => e.Id == objProyTmp.noEstado).First().Nombre;

                    lstProyectos.Add(objProyecto);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            return lstProyectos;
        }
        public int ActualizaActividad(int pIntIdCronograma, int pIntIdExpediente, int pIntIdActividad, ActividadCronogramaOP pObjActividadCronogramaOP)
        {
            int intResultado = -999;
            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();
                ObjectParameter objResult = new ObjectParameter("pIntResult_out", typeof(int));

                objContext.sp_gop_upd_act_cron_ejec_obra(pIntIdCronograma, pIntIdActividad, pObjActividadCronogramaOP.Nombre,
                    pObjActividadCronogramaOP.FechaIniProg, pObjActividadCronogramaOP.FechaFinProg,
                    pObjActividadCronogramaOP.FechaIniEjec, pObjActividadCronogramaOP.FechaFinEjec,
                    pObjActividadCronogramaOP.Costo, pObjActividadCronogramaOP.CantidadRRHH, pObjActividadCronogramaOP.IdTipoResponsable,
                    pObjActividadCronogramaOP.IdEmpleado, objResult);

                intResultado = Convert.ToInt32(objResult.Value.ToString());
            }
            catch (Exception ex)
            {
            }
            return intResultado;
        }
        public List<MaterialOP> ObtieneMateriales()
        {
            List<MaterialOP> lstMateriales = new List<MaterialOP>();
            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();
                var lstMaterialesTmp = objContext.OP_MATERIAL;

                foreach (var objMaterialTmp in lstMaterialesTmp)
                {
                    MaterialOP objMaterialOP = new MaterialOP();
                    objMaterialOP.IdMaterial = objMaterialTmp.coMaterial;
                    objMaterialOP.Nombre = objMaterialTmp.noMaterial;
                    lstMateriales.Add(objMaterialOP);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            return lstMateriales;
        }
        public CronogramaEjecucionOP ObtieneXId(int pIntIdExpediente, int pIntIdCronograma)
        {
            CronogramaEjecucionOP objCronogramaEjecucionObra = null;
            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();

                var lstCronograma = (from cro in objContext.OP_CRONOGRAMA_EJECUCION
                                      join exp in objContext.OP_EXPEDIENTE_TECNICO on cro.coExpediente equals exp.coExpediente
                                      join proy in objContext.OP_PROYECTO_INVERSION_PUBLICA on exp.coProyecto equals proy.coProyecto
                                      where exp.coExpediente == pIntIdExpediente && cro.coCronograma == pIntIdCronograma
                                      select new { exp, proy, cro }).ToList();

                if (lstCronograma != null)
                {
                    objCronogramaEjecucionObra = new CronogramaEjecucionOP();

                    ProyectoInversion objProyectoInversion = new ProyectoInversion();
                    objProyectoInversion.IdProyecto = lstCronograma[0].proy.coProyecto;
                    objProyectoInversion.Nombre = lstCronograma[0].proy.noNombre;
                    objCronogramaEjecucionObra.ProyectoInversion = objProyectoInversion;

                    ExpedienteTecnicoOP objExpedienteTecnicoOP = new ExpedienteTecnicoOP();
                    objExpedienteTecnicoOP.IdExpediente = lstCronograma[0].exp.coExpediente;

                    objCronogramaEjecucionObra.ExpedienteTecnico = objExpedienteTecnicoOP;

                    if (lstCronograma[0].cro.feEmision.HasValue)
                    {
                        objCronogramaEjecucionObra.FechaEmision = lstCronograma[0].cro.feEmision.Value;
                    }
                    objCronogramaEjecucionObra.IdCronograma = lstCronograma[0].cro.coCronograma;
                    if (lstCronograma[0].cro.nuPlazoEjecucion.HasValue)
                    {
                        objCronogramaEjecucionObra.PlazoEjecucion = lstCronograma[0].cro.nuPlazoEjecucion.Value;
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            return objCronogramaEjecucionObra;
        }
        public List<ItemCombo> ObtieneEmpleadosPersonaNatural(int pIntIdArea)
        {
            List<ItemCombo> lstEmpleados = new List<ItemCombo>();
            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();
                var objResult = objContext.sp_gop_get_emp_pern_x_area(pIntIdArea).ToList();

                List<sp_gop_get_emp_pern_x_area_Result> lstEmpleadosTmp = objResult;

                foreach (sp_gop_get_emp_pern_x_area_Result objEmpleado in lstEmpleadosTmp)
                {
                    ItemCombo objItemCombo = new ItemCombo();

                    objItemCombo.Id = objEmpleado.idEmpleado.ToString();
                    objItemCombo.Nombre = objEmpleado.ApellidoPaterno + " " + objEmpleado.Nombres;

                    lstEmpleados.Add(objItemCombo);
                    break;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            return lstEmpleados;
        }
        public List<ItemCombo> ObtieneEmpleadosPersonaJuridica()
        {
            List<ItemCombo> lstEmpleados = new List<ItemCombo>();
            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();
                var objResult = objContext.sp_gop_get_emp_perj().ToList();

                List<sp_gop_get_emp_perj_Result> lstEmpleadosTmp = objResult;

                foreach (sp_gop_get_emp_perj_Result objEmpleado in lstEmpleadosTmp)
                {
                    ItemCombo objItemCombo = new ItemCombo();

                    objItemCombo.Id = objEmpleado.idEmpleado.ToString();
                    objItemCombo.Nombre = objEmpleado.RazonSocial;
                    lstEmpleados.Add(objItemCombo);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            return lstEmpleados;
        }
        public List<ItemCombo> ObtieneAreas()
        {
            List<ItemCombo> lstAreas = new List<ItemCombo>();
            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();
                var objResult = objContext.sp_gop_get_areas().ToList();

                List<sp_gop_get_areas_Result> lstAreasTmp = objResult;

                foreach (sp_gop_get_areas_Result objArea in lstAreasTmp)
                {
                    ItemCombo objItemCombo = new ItemCombo();

                    objItemCombo.Id = objArea.idArea.ToString();
                    objItemCombo.Nombre = objArea.descArea;

                    lstAreas.Add(objItemCombo);
                    break;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            return lstAreas;
        }
        public int Inserta(int pIntIdProyecto, String pStrDescripcion, String pStrEspecificaciones, 
            Decimal pDecValorReferencial, String pStrTipoEjecutor, String pStrNomEjecutor, String pStrApeEjecutor, String pStrRazonSocialEjecutor,
            String pStrNomContacto, String pStrApeContaco, String pStrEmailContacto,
            String pStrTelfContacto, String pStrDireccionContacto, String pStrNomSupervisor,
            String pStrApeSupervisor, String pStrTelfSupervisor, String pStrEmailSupervisor,
            List<DocumentoExpedienteTecnicoOP> pLstDocumentos)
        {
            int intResultado = -999;

            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();

                ObjectParameter objResult = new ObjectParameter("pIntIdExp_out", typeof(int));
                //int intRes =
                 objContext.sp_gop_ins_exp(pIntIdProyecto, pStrDescripcion, pStrEspecificaciones, pDecValorReferencial,
                    pStrTipoEjecutor, pStrNomEjecutor, pStrApeEjecutor, pStrRazonSocialEjecutor, pStrNomContacto,
                    pStrApeContaco, pStrEmailContacto, pStrTelfContacto, pStrDireccionContacto, pStrNomSupervisor, pStrApeSupervisor,
                    pStrTelfSupervisor, pStrEmailSupervisor, objResult);

                 int intIdExpediente = Convert.ToInt32(objResult.Value.ToString());

                 foreach (var objDoc in pLstDocumentos) {
                     OP_DOCUMENTO_EXPEDIENTE_TECNICO objOP_DOCUMENTO_EXPEDIENTE_TECNICO = new OP_DOCUMENTO_EXPEDIENTE_TECNICO();
                     objOP_DOCUMENTO_EXPEDIENTE_TECNICO.coDocumento = objDoc.IdDocumento;
                     objOP_DOCUMENTO_EXPEDIENTE_TECNICO.coExpediente = intIdExpediente;
                     objOP_DOCUMENTO_EXPEDIENTE_TECNICO.feEmision = DateTime.Now;
                     objOP_DOCUMENTO_EXPEDIENTE_TECNICO.nomArchivo = objDoc.NomArchivo;
                     objOP_DOCUMENTO_EXPEDIENTE_TECNICO.noTipoDocExpTec = objDoc.TipoDocumento;
                     objOP_DOCUMENTO_EXPEDIENTE_TECNICO.nuNroDOcumento = objDoc.NroDocumento;
                     objOP_DOCUMENTO_EXPEDIENTE_TECNICO.txDescripcion = objDoc.Descripcion;
                     objOP_DOCUMENTO_EXPEDIENTE_TECNICO.txRutaArchivo = objDoc.RutaArchivo;

                     objContext.AddToOP_DOCUMENTO_EXPEDIENTE_TECNICO(objOP_DOCUMENTO_EXPEDIENTE_TECNICO);
                 }
                 objContext.SaveChanges();

                 if (intIdExpediente > 0)
                 {
                     intResultado = 1;
                 }
                 else {
                     intResultado = intIdExpediente;
                 }
            }
            catch (Exception ex) {

            }
            return intResultado;
        }
        public EntregaMaterialOP ObtieneEntregaXId(int pIntIdProyecto, int pIntIdEntrega)
        {
            EntregaMaterialOP objEntregaMaterialOP = null;
            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();

                var objResult = objContext.sp_gop_get_ent_mat_x_id(pIntIdProyecto,pIntIdEntrega).ToList();

                List<sp_gop_get_ent_mat_x_id_Result> lstEntregaTmp = objResult;

                //var lstEntregasTmp = (from ent in objContext.OP_ENTREGA_MATERIAL
                //                      join prov in objContextIntegrado.MA_PROVEEDOR on ent.coProveedor equals prov.IdProveedor
                //                      join emp in objContextIntegrado.MA_PERSONAJURIDICA on prov.IdPersona equals emp.idPersona
                //                     join mat in objContext.OP_MATERIAL on ent.coMaterial equals mat.coMaterial
                //                     where( ent.coEntrega == pIntIdEntrega)
                //                     select new { ent, prov, emp, mat }).ToList();

                //where(ent.coEntrega == pIntIdProyecto)

                if (lstEntregaTmp != null && lstEntregaTmp.Count() == 1)
                {
                    foreach (var objEntregaTmp in lstEntregaTmp)
                    {
                        objEntregaMaterialOP = new EntregaMaterialOP();
                        objEntregaMaterialOP.IdEntrega = objEntregaTmp.coEntrega;

                        ProyectoInversion objProyectoInversion = new ProyectoInversion();
                        if (objEntregaTmp.coProyecto.HasValue) {
                            objProyectoInversion.IdProyecto = objEntregaTmp.coProyecto.Value;
                        }
                        objProyectoInversion.Nombre = objEntregaTmp.noNombre;
                        objEntregaMaterialOP.Proyecto = objProyectoInversion;

                        Proveedor objProveedor = new Proveedor();
                        objProveedor.IdProveedor = objEntregaTmp.coProveedor;
                        objProveedor.RazonSocial = objEntregaTmp.RazonSocial;
                        objEntregaMaterialOP.Proveedor = objProveedor;

                        if (objEntregaTmp.nuCantidad.HasValue)
                        {
                            objEntregaMaterialOP.Cantidad = objEntregaTmp.nuCantidad.Value;
                        }
                        if (objEntregaTmp.feEntregaEfectiva.HasValue)
                        {
                            objEntregaMaterialOP.FecEntregaEfec = objEntregaTmp.feEntregaEfectiva.Value;
                        }
                        if (objEntregaTmp.feEntregaProgramada.HasValue)
                        {
                            objEntregaMaterialOP.FecEntregaProg = objEntregaTmp.feEntregaProgramada.Value;
                        }

                        MaterialOP objMaterial = new MaterialOP();
                        objMaterial.IdMaterial = objEntregaTmp.coMaterial;
                        objMaterial.Nombre = objEntregaTmp.noMaterial;
                        objEntregaMaterialOP.Material = objMaterial;

                        objEntregaMaterialOP.Observaciones = objEntregaTmp.txObservaciones;
                        objEntregaMaterialOP.TipoEntrega = objEntregaTmp.noTipoEntrega;
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            return objEntregaMaterialOP;
        }
        public ProyectoInversion ObtieneXId(int pIntIdProyecto)
        {
            ProyectoInversion objProyecto = null;
            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();

                //var lstProyectosTmp = (from pi in objContext.OP_PROYECTO_INVERSION_PUBLICA
                //                       join via in objContextIntegrado.MA_VIA on pi.coVia equals via.coVia
                //                       where pi.coProyecto == pIntIdProyecto
                //                       select new { pi, via }).ToList();

                var objResult = objContext.sp_gop_get_proy_x_id(pIntIdProyecto).ToList();

                List<sp_gop_get_proy_x_id_Result> lstProyectosTmp = objResult;

                //var lstProyectosTmp = objContext.op_proyecto_inversion_publica.Where(p => p.coProyecto == pIntIdProyecto).ToList();

                if (lstProyectosTmp.Count == 1)
                {
                    objProyecto = new ProyectoInversion();
                    objProyecto.CodSNIP = lstProyectosTmp[0].coSNIP;
                    objProyecto.IdProyecto = lstProyectosTmp[0].coProyecto;
                    objProyecto.Nombre = lstProyectosTmp[0].noNombre;
                    objProyecto.Ubicacion = lstProyectosTmp[0].txUbicacion;
                    objProyecto.IdVia = lstProyectosTmp[0].coVia;
                    objProyecto.Ubicacion = lstProyectosTmp[0].txUbicacion;
                    objProyecto.Descripcion = lstProyectosTmp[0].txDescripcion;
                    objProyecto.IdEstado = lstProyectosTmp[0].noEstado;
                    objProyecto.NomEstado = ObtieneEstados(null).Where(e => e.Id == lstProyectosTmp[0].noEstado).First().Nombre;
                    if (lstProyectosTmp[0].nuBeneficiarios.HasValue)
                    {
                        objProyecto.Beneficiarios = lstProyectosTmp[0].nuBeneficiarios.Value;
                    }
                    objProyecto.ValorReferencial = lstProyectosTmp[0].nuValorReferencialPerfil;
                    objProyecto.TipoVia = lstProyectosTmp[0].noTipoVia;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            return objProyecto;
        }
        public int Inserta(String pStrCodSNIP, String pStrDescripcion, String pStrNombre, int pIntIdVia, String pStrUbicacion, int pIntBeneficiarios, Decimal pDblValor)
        {
            int intResultado = -999;
            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();

                OP_PROYECTO_INVERSION_PUBLICA objProyectoInversion = new OP_PROYECTO_INVERSION_PUBLICA();

                objProyectoInversion.feRegistro = DateTime.Now;
                objProyectoInversion.noNombre = pStrNombre;
                objProyectoInversion.txUbicacion = pStrUbicacion;
                objProyectoInversion.coVia = pIntIdVia;
                objProyectoInversion.txDescripcion = pStrDescripcion;
                objProyectoInversion.nuBeneficiarios = pIntBeneficiarios;
                objProyectoInversion.nuValorReferencialPerfil = pDblValor;
                objProyectoInversion.noEstado = ProyectoInversion.STR_ID_ESTADO_EN_CONSULTA;

                objContext.AddToOP_PROYECTO_INVERSION_PUBLICA(objProyectoInversion);
                int intRows = objContext.SaveChanges();

                if (intRows > 0)
                {
                    intResultado = 1;
                }
            }
            catch (Exception ex)
            {
                if (ex.ToString().Contains("IX_op_proyecto_inversion_publica"))
                {
                    intResultado = -998;
                }
            }
            return intResultado;
        }
        public List<ProyectoInversion> BuscarXFiltroConCronograma(String pStrCodSNIP, String pStrNombre, String pStrUbicacion, String pStrIdEstado)
        {
            List<ProyectoInversion> lstProyectos = new List<ProyectoInversion>();
            ProyectoInversion_DAL objProyectoInversion_DAL = new ProyectoInversion_DAL();
            try
            {
                if (String.IsNullOrWhiteSpace(pStrNombre))
                {
                    pStrNombre = "";
                }
                if (String.IsNullOrWhiteSpace(pStrUbicacion))
                {
                    pStrUbicacion = "";
                }
                if (String.IsNullOrWhiteSpace(pStrIdEstado))
                {
                    pStrIdEstado = "0";
                }

                //var lstProyectosTmp = (from pi in objContext.OP_PROYECTO_INVERSION_PUBLICA
                //                       join via in objContextIntegrado.MA_VIA on pi.coVia equals via.coVia
                //                       join exp in objContext.OP_EXPEDIENTE_TECNICO on pi.coProyecto equals exp.coProyecto
                //                       join cro in objContext.OP_CRONOGRAMA_EJECUCION on exp.coExpediente equals cro.coExpediente
                //                       where ((via.noTipoVia + " " + via.noNomVia + " " + pi.txUbicacion).ToLower().Contains(pStrUbicacion.ToLower()) || pStrUbicacion == "")
                //                       && (pi.noNombre.ToLower().Contains(pStrNombre.ToLower()) || pStrNombre == "")
                //                       && (pi.noEstado == pStrIdEstado || pStrIdEstado == "0")
                //                       select new { pi, via, exp, cro }).OrderBy(x=>x.exp.coExpediente).ThenBy(x=> x.cro.feEmision);

                ObrasPublicasEntities objContext = new ObrasPublicasEntities();
                var objResult = objContext.sp_gop_get_proy_con_cro(pStrNombre, pStrCodSNIP, pStrUbicacion, pStrIdEstado).ToList();

                List<sp_gop_get_proy_con_cro_Result> lstProyectosTmp = objResult;

                foreach (var objProyTmp in lstProyectosTmp)
                {
                    ProyectoInversion objProyecto = new ProyectoInversion();
                    objProyecto.CodSNIP = objProyTmp.coSNIP;
                    objProyecto.Nombre = objProyTmp.noNombre;
                    objProyecto.IdProyecto = objProyTmp.coProyecto;
                    objProyecto.Ubicacion = objProyTmp.txUbicacion;
                    objProyecto.NomVia = objProyTmp.noNomVia;
                    objProyecto.TipoVia = objProyTmp.noTipoVia;
                    objProyecto.IdEstado = objProyTmp.noEstado;
                    objProyecto.NomEstado = ObtieneEstados(null).Where(e => e.Id == objProyTmp.noEstado).First().Nombre;

                    objProyecto.IdExpediente = objProyTmp.coExpediente;
                    objProyecto.IdCronograma = objProyTmp.coCronograma;
                    if (objProyTmp.feEmision.HasValue)
                    {
                        objProyecto.FechaEmisionCrono = objProyTmp.feEmision.Value;
                    }
                    if (objProyTmp.nuPlazoEjecucion.HasValue)
                    {
                        objProyecto.PlazoEjecucionCrono = objProyTmp.nuPlazoEjecucion.Value;
                    }
                    lstProyectos.Add(objProyecto);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            return lstProyectos;
        }
        public ActividadCronogramaOP ObtieneActvidadXId(int pIntIdCronograma, int pIntIdActividad)
        {
            ActividadCronogramaOP objActividadCronograma = null;
            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();
                var objResult = objContext.sp_gop_get_act_cron_ejec_obra_x_id(pIntIdCronograma, pIntIdActividad).ToList();

                List<sp_gop_get_act_cron_ejec_obra_x_id_Result> lstActividad = objResult;

                foreach (sp_gop_get_act_cron_ejec_obra_x_id_Result objAct in lstActividad)
                {
                    objActividadCronograma = new ActividadCronogramaOP();
                    if (objAct.NUCANTIDADRRHH.HasValue)
                    {
                        objActividadCronograma.CantidadRRHH = objAct.NUCANTIDADRRHH.Value;
                    }
                    if (objAct.NUCOSTODIRECTO.HasValue)
                    {
                        objActividadCronograma.Costo = objAct.NUCOSTODIRECTO.Value;
                    }
                    if (objAct.FEFINEJECUCION.HasValue)
                    {
                        objActividadCronograma.FechaFinEjec = objAct.FEFINEJECUCION.Value;
                    }
                    if (objAct.FEFINPROGRAMADA.HasValue)
                    {
                        objActividadCronograma.FechaFinProg = objAct.FEFINPROGRAMADA.Value;
                    }
                    if (objAct.FEINICIOEJECUCION.HasValue)
                    {
                        objActividadCronograma.FechaIniEjec = objAct.FEINICIOEJECUCION.Value;
                    }
                    if (objAct.FEINICIOPROGRAMADA.HasValue)
                    {
                        objActividadCronograma.FechaIniProg = objAct.FEINICIOPROGRAMADA.Value;
                    }
                    if (objAct.idPersonaNatural.HasValue)
                    {
                        objActividadCronograma.IdEmpleado = objAct.idEmpleado;
                        objActividadCronograma.ResponsableNom = objAct.NOMBRES;
                        objActividadCronograma.ResponsableApe = objAct.APELLIDOPATERNO;
                        objActividadCronograma.IdTipoResponsable = "P";
                        if (objAct.idArea.HasValue)
                        {
                            objActividadCronograma.IdArea = objAct.idArea.Value;
                        }
                    }
                    if (objAct.idPersonaJuridica.HasValue)
                    {
                        objActividadCronograma.IdEmpleado = objAct.idEmpleado;
                        objActividadCronograma.ResponsableRazSoc = objAct.RAZONSOCIAL;
                        objActividadCronograma.IdTipoResponsable = "E";
                    }
                    objActividadCronograma.Nombre = objAct.noActividad;

                    break;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            return objActividadCronograma;
        }
        public ExpedienteTecnicoOP ObtieneXId(int pIntIdExpediente)
        {
            ExpedienteTecnicoOP objExpedienteTecnicoOP = null;
            try
            {
                ObrasPublicasEntities objContext = new ObrasPublicasEntities();

                var objResult = objContext.sp_gop_get_exp_x_id(pIntIdExpediente).ToList();

                List<sp_gop_get_exp_x_id_Result> lstExpediente = objResult;
                //var lstExpedientes = (from exp in objContext.OP_EXPEDIENTE_TECNICO
                //                      from ejecEmp in objContextIntegrado.MA_PERSONAJURIDICA
                //                          .Where(ejecEmp2 => ejecEmp2.idPersonaJuridica == exp.coEjecutor).DefaultIfEmpty()
                //                      from ejecPer in objContextIntegrado.MA_PERSONANATURAL
                //                              .Where(ejecPer => ejecPer.idPersonaNatural == exp.coEjecutor).DefaultIfEmpty()
                //                      join super in objContextIntegrado.MA_PERSONANATURAL on exp.coSupervisor equals super.idPersonaNatural
                //                      join contac in objContextIntegrado.MA_PERSONANATURAL on exp.coContacto equals contac.idPersonaNatural
                //                      join super2 in objContextIntegrado.MA_PERSONA on exp.coSupervisor equals super2.idPersona
                //                      join contac2 in objContextIntegrado.MA_PERSONA on exp.coContacto equals contac2.idPersona
                //                      join proy in objContext.OP_PROYECTO_INVERSION_PUBLICA on exp.coProyecto equals proy.coProyecto
                //                      where exp.coExpediente == pIntIdExpediente
                //                      select new { exp, ejecEmp, ejecPer, super, contac, contac2, super2, proy }).ToList();

                if (lstExpediente.Count == 1)
                {
                    var lstDocumentos = objContext.OP_DOCUMENTO_EXPEDIENTE_TECNICO.Where(doc => doc.coExpediente == pIntIdExpediente).ToList();

                    objExpedienteTecnicoOP = new ExpedienteTecnicoOP();
                    objExpedienteTecnicoOP.IdExpediente = pIntIdExpediente;

                    if (lstExpediente[0].coContacto.HasValue) {
                        objExpedienteTecnicoOP.ContactoId = lstExpediente[0].coContacto.Value;
                    }
                    objExpedienteTecnicoOP.ContactoApe = lstExpediente[0].CONT_APE_PAT;
                    objExpedienteTecnicoOP.ContactoDireccion = lstExpediente[0].CONT_DIRECCION;
                    objExpedienteTecnicoOP.ContactoEmail = lstExpediente[0].CONT_CORREO;
                    objExpedienteTecnicoOP.ContactoNom = lstExpediente[0].CONT_NOM;
                    objExpedienteTecnicoOP.ContactoTelefono = lstExpediente[0].CONT_TELF;
                    objExpedienteTecnicoOP.Descripcion = lstExpediente[0].txDescripcion;
                    if (lstExpediente[0].coEjecutor.HasValue) {
                        objExpedienteTecnicoOP.EjecutorId = lstExpediente[0].coEjecutor.Value;
                    }
                    if (lstExpediente[0].EJEC_ID_PERN.HasValue)
                    {
                        objExpedienteTecnicoOP.EjecutorApe = lstExpediente[0].EJEC_APE_PAT;
                        objExpedienteTecnicoOP.EjecutorNom = lstExpediente[0].EJEC_NOM;
                        objExpedienteTecnicoOP.TipoEjecutor = "P";
                    }
                    if (lstExpediente[0].EJEC_ID_PERJ.HasValue)
                    {
                        objExpedienteTecnicoOP.EjecutorRazonSocial = lstExpediente[0].EJEC_RAZSOC;
                        objExpedienteTecnicoOP.TipoEjecutor = "E";
                    }
                    objExpedienteTecnicoOP.Especificaciones = lstExpediente[0].txEspecificacionesTecnicas;
                    if (lstExpediente[0].coSupervisor.HasValue) {
                        objExpedienteTecnicoOP.SupervisorId = lstExpediente[0].coSupervisor.Value;
                    }
                    objExpedienteTecnicoOP.SupervisorApe = lstExpediente[0].SUP_APE_PAT;
                    objExpedienteTecnicoOP.SupervisorEmail = lstExpediente[0].SUP_CORREO;
                    objExpedienteTecnicoOP.SupervisorNom = lstExpediente[0].SUP_NOM;
                    objExpedienteTecnicoOP.SupervisorTelefono = lstExpediente[0].SUP_TELF;

                    if (lstExpediente[0].coProyecto.HasValue)
                    {
                        ProyectoInversion objProyectoInversion = new ProyectoInversion();
                        objProyectoInversion.IdProyecto = lstExpediente[0].coProyecto.Value;
                        objProyectoInversion.Nombre = lstExpediente[0].NOM_PROYECTO;
                        objExpedienteTecnicoOP.Proyecto = objProyectoInversion;
                    }
                    if (lstExpediente[0].nuValorReferencial.HasValue)
                    {
                        objExpedienteTecnicoOP.ValorReferencial = lstExpediente[0].nuValorReferencial.Value;
                    }

                    List<DocumentoExpedienteTecnicoOP> lstDocumentosNew = new List<DocumentoExpedienteTecnicoOP>();
                    foreach (var objDocumento in lstDocumentos)
                    {
                        DocumentoExpedienteTecnicoOP objDocumentoExpedienteTecnicoOP = new DocumentoExpedienteTecnicoOP();
                        objDocumentoExpedienteTecnicoOP.Descripcion = objDocumento.txRutaArchivo;
                        if (objDocumento.feEmision.HasValue)
                        {
                            objDocumentoExpedienteTecnicoOP.FechaEmision = objDocumento.feEmision.Value;
                        }
                        objDocumentoExpedienteTecnicoOP.IdDocumento = objDocumento.coDocumento;
                        objDocumentoExpedienteTecnicoOP.IdExpediente = objDocumento.coExpediente;
                        objDocumentoExpedienteTecnicoOP.NomArchivo = objDocumento.nomArchivo;
                        objDocumentoExpedienteTecnicoOP.RutaArchivo = objDocumento.txRutaArchivo;
                        objDocumentoExpedienteTecnicoOP.NroDocumento = objDocumento.nuNroDOcumento;
                        objDocumentoExpedienteTecnicoOP.TipoDocumento = objDocumento.noTipoDocExpTec;
                        objDocumentoExpedienteTecnicoOP.Descripcion = objDocumento.txDescripcion;
                        objDocumentoExpedienteTecnicoOP.NomTipoDocumento = ObtieneTiposDocumento(null).Where(doc => doc.Id == objDocumento.noTipoDocExpTec).First().Nombre;

                        lstDocumentosNew.Add(objDocumentoExpedienteTecnicoOP);
                    }
                    objExpedienteTecnicoOP.Documentos = lstDocumentosNew;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            return objExpedienteTecnicoOP;
        }