// POST api/projects public int Post(JObject value) { dynamic data = value; string action = (string)data.action; string userName = null; int elementId = 0; if (data.userId != null) { userName = Context.GetUsuarioById((int)data.userId).UserName; } switch (action) { case "addGeneral": { Pry_Proyectos proyecto = new Pry_Proyectos() { CustomerId = (int)data.proyecto.idCliente, IdTipo = (int)data.proyecto.idTipo, Codigo = (string)data.proyecto.codigo, Nombre = (string)data.proyecto.nombre, Area = (string)data.proyecto.area, Region = (string)data.proyecto.region, Beneficiarios = (string)data.proyecto.beneficiarios, FechaInicio = (DateTime)data.proyecto.fechaInicio, FechaFin = (DateTime)data.proyecto.fechaFin, IdEmpresa = (int)data.proyecto.idEmpresa, IdUsuarioResponsable = (int)data.proyecto.idUsuarioResponsable, IdUsuarioDigitador = (int)data.proyecto.idUsuarioDigitador, IdUsuarioEvaluador = (int)data.proyecto.idUsuarioEvaluador, IDPROYECTOPADRE = data.proyecto.idproyectopadre != null ? (int)data.proyecto.idproyectopadre : (int?)null, MONTOFINANCIAMIENTO = data.proyecto.montofinanciamiento != null ? (double)data.proyecto.montofinanciamiento : (double?)null, MONTOCONTRAPARTIDA = data.proyecto.montocontrapartida != null ? (double)data.proyecto.montocontrapartida : (double?)null, Presupuesto = data.proyecto.presupuesto != null ? (double)data.proyecto.presupuesto : (double?)null, IdMoneda = data.proyecto.idMoneda != null ? (int)data.proyecto.idMoneda : (int?)null, Logo = (string)data.proyecto.logo, DiasNotificacion = data.proyecto.diasNotificacion != null ? (int)data.proyecto.diasNotificacion : 0, IdEstado = 1 //Formulation }; Context.addProyecto(proyecto); //PRY_PERIODOSPROYECTOS DateTime fechaInicio = proyecto.FechaInicio.Value; DateTime fechaFin = proyecto.FechaFin.Value; var tmpdate = new DateTime(fechaInicio.Year, fechaInicio.Month, 1); int count = 1; do { PRY_PERIODOSPROYECTOS periodoProyecto = new PRY_PERIODOSPROYECTOS { FechaFin = tmpdate.AddMonths(1).AddSeconds(-1), FechaInicio = tmpdate, IdProyecto = proyecto.IdProyecto, Nombre = "Periodo " + count, Secuencia = count, Activo = true }; Context.addPeriodoProyecto(periodoProyecto); tmpdate = periodoProyecto.FechaFin.AddSeconds(+1); count++; } while (tmpdate <= fechaFin); //Pry_Proyectos_NivelAceptacion foreach (var _nivelaceptacion in data.proyecto.nivelesAceptacion) { Pry_Proyectos_NivelAceptacion nivelAceptacion = new Pry_Proyectos_NivelAceptacion { IdProyecto = proyecto.IdProyecto, IdNivelAceptacion = (int)_nivelaceptacion.idNivelAceptacion, Valor = (double)_nivelaceptacion.valor }; Context.addNivelAceptacionProyecto(nivelAceptacion); } elementId = proyecto.IdProyecto; } break; case "modifyGeneral": { Pry_Proyectos proyecto = Context.GetProyectoById((int)data.idProyecto); bool modified = false; bool datesModified = false; if (!proyecto.Codigo.Equals((string)data.proyecto.codigo)) { proyecto.Codigo = (string)data.proyecto.codigo; modified = true; } if (!proyecto.Nombre.Equals((string)data.proyecto.nombre)) { proyecto.Nombre = (string)data.proyecto.nombre; modified = true; } if (!proyecto.Area.Equals((string)data.proyecto.area)) { proyecto.Area = (string)data.proyecto.area; modified = true; } if (!proyecto.Region.Equals((string)data.proyecto.region)) { proyecto.Region = (string)data.proyecto.region; modified = true; } if (!proyecto.Beneficiarios.Equals((string)data.proyecto.beneficiarios)) { proyecto.Beneficiarios = (string)data.proyecto.beneficiarios; modified = true; } if (proyecto.FechaInicio != (DateTime)data.proyecto.fechaInicio) { proyecto.FechaInicio = (DateTime)data.proyecto.fechaInicio; modified = true; datesModified = true; } if (proyecto.FechaFin != (DateTime)data.proyecto.fechaFin) { proyecto.FechaFin = (DateTime)data.proyecto.fechaFin; modified = true; datesModified = true; } if (proyecto.IdEmpresa != (int)data.proyecto.idEmpresa) { proyecto.IdEmpresa = (int)data.proyecto.idEmpresa; modified = true; } if (proyecto.IdUsuarioResponsable != (int)data.proyecto.idUsuarioResponsable) { proyecto.IdUsuarioResponsable = (int)data.proyecto.idUsuarioResponsable; modified = true; } if (proyecto.IdUsuarioDigitador != (int)data.proyecto.idUsuarioDigitador) { proyecto.IdUsuarioDigitador = (int)data.proyecto.idUsuarioDigitador; modified = true; } if (proyecto.IdUsuarioEvaluador != (int)data.proyecto.idUsuarioEvaluador) { proyecto.IdUsuarioEvaluador = (int)data.proyecto.idUsuarioEvaluador; modified = true; } if (proyecto.IDPROYECTOPADRE != (int?)data.proyecto.idproyectopadre) { proyecto.IDPROYECTOPADRE = (int?)data.proyecto.idproyectopadre; modified = true; } if (proyecto.MONTOFINANCIAMIENTO != (double?)data.proyecto.montofinanciamiento) { proyecto.MONTOFINANCIAMIENTO = (double?)data.proyecto.montofinanciamiento; modified = true; } if (proyecto.MONTOCONTRAPARTIDA != (double?)data.proyecto.montocontrapartida) { proyecto.MONTOCONTRAPARTIDA = (double?)data.proyecto.montocontrapartida; modified = true; } if (proyecto.Presupuesto != (double?)data.proyecto.presupuesto) { proyecto.Presupuesto = (double?)data.proyecto.presupuesto; modified = true; } if (proyecto.IdMoneda != (int?)data.proyecto.idMoneda) { proyecto.IdMoneda = (int?)data.proyecto.idMoneda; modified = true; } if (proyecto.Logo != (string)data.proyecto.logo) { proyecto.Logo = (string)data.proyecto.logo; modified = true; } if (proyecto.DiasNotificacion != (int)data.proyecto.diasNotificacion) { proyecto.DiasNotificacion = (int)data.proyecto.diasNotificacion; modified = true; } if (proyecto.Latitude != (double?)data.proyecto.latitude) { proyecto.Latitude = (double?)data.proyecto.latitude; modified = true; } if (proyecto.Longitude != (double?)data.proyecto.longitude) { proyecto.Longitude = (double?)data.proyecto.longitude; modified = true; } if (proyecto.Problema != (string)data.proyecto.problema) { proyecto.Problema = (string)data.proyecto.problema; modified = true; } if (proyecto.DescripcionProblema != (string)data.proyecto.descripcionProblema) { proyecto.DescripcionProblema = (string)data.proyecto.descripcionProblema; modified = true; } if (proyecto.Justificacion != (string)data.proyecto.justificacion) { proyecto.Justificacion = (string)data.proyecto.justificacion; modified = true; } Context.modifyData(); if (datesModified) { List <PRY_PERIODOSPROYECTOS> periodosProyecto = Context.GetAllPeriodosByProyecto(proyecto.IdProyecto); foreach (PRY_PERIODOSPROYECTOS periodoProyecto in periodosProyecto) { Context.deletePeriodoProyecto(periodoProyecto); } DateTime fechaInicio = proyecto.FechaInicio.Value; DateTime fechaFin = proyecto.FechaFin.Value; var tmpdate = new DateTime(fechaInicio.Year, fechaInicio.Month, 1); int count = 1; do { PRY_PERIODOSPROYECTOS periodoProyecto = new PRY_PERIODOSPROYECTOS { FechaFin = tmpdate.AddMonths(1).AddSeconds(-1), FechaInicio = tmpdate, IdProyecto = proyecto.IdProyecto, Nombre = "Periodo " + count, Secuencia = count, Activo = true }; Context.addPeriodoProyecto(periodoProyecto); tmpdate = periodoProyecto.FechaFin.AddSeconds(+1); count++; } while (tmpdate <= fechaFin); } //Niveles de aceptación JArray nivelesAceptacion = (JArray)data.nivelesAceptacion; foreach (JObject oNivelAceptacion in nivelesAceptacion) { Pry_Proyectos_NivelAceptacion nivelAceptacionProyecto = Context.GetProyectoNivelAceptacion(proyecto.IdProyecto, (int)oNivelAceptacion["idNivelAceptacion"]); double dValor = !string.IsNullOrEmpty(oNivelAceptacion["valor"].ToString()) ? (double)oNivelAceptacion["valor"] : 0; if (nivelAceptacionProyecto == null) { nivelAceptacionProyecto = new Pry_Proyectos_NivelAceptacion() { IdProyecto = proyecto.IdProyecto, IdNivelAceptacion = (int)oNivelAceptacion["idNivelAceptacion"], Valor = dValor }; Context.addNivelAceptacionProyecto(nivelAceptacionProyecto); } else { if (nivelAceptacionProyecto.Valor != dValor) { nivelAceptacionProyecto.Valor = dValor; Context.modifyData(); } } } elementId = proyecto.IdProyecto; } break; case "deleteProyecto": { Pry_Proyectos proyecto = Context.GetProyectoById((int)data.idProyecto); Context.deleteProyecto(proyecto); } break; case "addObjetivo": { string code = Context.GetNextObjetivoCode((int)data.idPadre); Pry_Objetivos objetivo = new Pry_Objetivos() { IdPadre = (int)data.idPadre, IdObjetivoClase = (int)data.idObjetivoClase, Codigo = code, Eliminado = false, IdProyecto = (int)data.idProyecto, Descripcion = (string)data.descripcion }; Context.addObjetivo(objetivo); elementId = objetivo.IdObjetivo; } break; case "modifyObjetivo": { Pry_Objetivos objetivo = Context.GetObjetivoById((int)data.idObjetivo); bool modified = false; var id = value["objetivo"]["$ref"]?.ToString(); var token = $"$.objetivoClase.pry_Objetivos[?(@.$id == '{id}')]"; dynamic subdata = value.SelectToken(token); if (objetivo.IdPadre != (int)data.idPadre) { objetivo.IdPadre = (int)data.idPadre; modified = true; } if (objetivo.IdObjetivoClase != (int)data.idObjetivoClase) { objetivo.IdObjetivoClase = (int)data.idObjetivoClase; modified = true; } if (!objetivo.Codigo.Equals((string)data.codigo)) { objetivo.Codigo = (string)data.codigo; modified = true; } if (objetivo.Descripcion != (string)data.descripcion) { objetivo.Descripcion = (string)data.descripcion; modified = true; } if (objetivo.IdProyecto != (int)data.idProyecto) { objetivo.IdProyecto = (int)data.idProyecto; modified = true; } if (objetivo.Eliminado != (bool?)subdata.eliminado) { objetivo.Eliminado = subdata.eliminado != null ? (bool)subdata.eliminado : false; modified = true; } if (objetivo.IdResponsable != (int?)subdata.idResponsable) { objetivo.IdResponsable = (int?)subdata.idResponsable; modified = true; } if (objetivo.FechaInicio != (DateTime?)subdata.fechaInicio) { objetivo.FechaInicio = (DateTime?)subdata.fechaInicio; modified = true; } if (objetivo.FechaFin != (DateTime?)subdata.fechaFin) { objetivo.FechaFin = (DateTime?)subdata.fechaFin; modified = true; } if (objetivo.CustomerId != (int?)subdata.customerId) { objetivo.CustomerId = (int?)subdata.customerId; modified = true; } if (objetivo.Ponderado != (double?)subdata.ponderado) { objetivo.Ponderado = (double?)subdata.ponderado; modified = true; } Context.modifyData(); } break; case "deleteObjetivo": { Pry_Objetivos objetivo = Context.GetObjetivoById((int)data.idObjetivo); Context.deleteObjetivo(objetivo); } break; case "addIndicador": { Pry_Objetivos objetivo = Context.GetObjetivoById((int)data.idObjetivo); int idSubtipo = 0; if (objetivo.IdObjetivoClase == 1) //GENERAL PURPOSE { idSubtipo = 3; //IMPACT } if (objetivo.IdObjetivoClase == 2) //GENERAL PURPOSE { idSubtipo = 4; //EFFECT } if (objetivo.IdObjetivoClase == 3) //RESULTS { idSubtipo = 10; //RESULT } if (objetivo.IdObjetivoClase == 4) //PRODUCTS { idSubtipo = 5; //PRODUCTS } if (objetivo.IdObjetivoClase == 5) //ACTIVITIES { idSubtipo = 6; //ACTIVITY } Pry_IndicadoresTipos indicadorSubTipo = Context.GetIndicadorTipo(idSubtipo); Pry_IndicadoresTipos indicadorTipo = Context.GetIndicadorTipo(indicadorSubTipo.IdPadre.Value); int nextCode = Context.GetNextIndicatorCode(objetivo.IdObjetivo, indicadorSubTipo.IdTipo, indicadorSubTipo.IdPadre.Value); string indicadorCode = indicadorTipo.Myme + indicadorSubTipo.Myme + nextCode; Pry_Indicadores indicador = new Pry_Indicadores() { IdObjetivo = (int)data.idObjetivo, Codigo = indicadorCode, IdTipo = indicadorTipo.IdTipo, IdSubTipo = indicadorSubTipo.IdTipo, Descripcion = (string)data.descripcion, Definicion = (string)data.definicion, Objetivo = (string)data.objetivo, Cualidades = (string)data.cualidades, Cobertura = (string)data.cobertura, IdResponsableIndicador = (int?)data.idResponsableIndicador, FechaInicio = (DateTime?)data.fechaInicio, FechaFin = (DateTime?)data.fechaFin, Base = (double)data["base"], Meta = (double)data.meta, UnidadMedida = (string)data.unidadMedida, Porcentual = data.porcentual != null ? (bool)data.porcentual : false, UnidadOperativa = (string)data.unidadOperativa, UnidadOperativaId = (string)data.unidadOperativaId, PalabrasClave = (string)data.palabrasClave }; Context.addIndicador(indicador); //added by Ernesto Duarte --save pry_IndicadoresVerificadores List <Pry_IndicadoresVerificadores> verificators = new List <Pry_IndicadoresVerificadores>(); foreach (var verificator in data.pry_IndicadoresVerificadores) { Pry_IndicadoresVerificadores _verificator = new Pry_IndicadoresVerificadores { IdIndicador = indicador.IdIndicador, Descripcion = (string)verificator.descripcion }; verificators.Add(_verificator); } Context.addVerificadores(verificators); elementId = indicador.IdIndicador; } break; case "modifyIndicador": { Pry_Indicadores indicador = Context.GetIndicadorById((int)data.idIndicador); bool modified = false; if (indicador.Descripcion != (string)data.descripcion) { indicador.Descripcion = (string)data.descripcion; modified = true; } if (indicador.Definicion != (string)data.definicion) { indicador.Definicion = (string)data.definicion; modified = true; } if (indicador.Objetivo != (string)data.objetivo) { indicador.Objetivo = (string)data.objetivo; modified = true; } if (indicador.Cualidades != (string)data.cualidades) { indicador.Cualidades = (string)data.cualidades; modified = true; } if (indicador.Cobertura != (string)data.cobertura) { indicador.Cobertura = (string)data.cobertura; modified = true; } if (indicador.IdResponsableIndicador != (int?)data.idResponsableIndicador) { indicador.IdResponsableIndicador = (int?)data.idResponsableIndicador; modified = true; } if (indicador.FechaInicio != (DateTime?)data.fechaInicio) { indicador.FechaInicio = (DateTime?)data.fechaInicio; modified = true; } if (indicador.FechaFin != (DateTime?)data.fechaFin) { indicador.FechaFin = (DateTime?)data.fechaFin; modified = true; } if (indicador.Base != (double)data["base"]) { indicador.Base = (double)data["base"]; modified = true; } if (indicador.Meta != (double)data.meta) { indicador.Meta = (double)data.meta; modified = true; } if (indicador.UnidadMedida != (string)data.unidadMedida) { indicador.UnidadMedida = (string)data.unidadMedida; modified = true; } if (indicador.UnidadOperativa != (string)data.unidadOperativa) { indicador.UnidadOperativa = (string)data.unidadOperativa; modified = true; } if (indicador.UnidadOperativaId != (string)data.unidadOperativaId) { indicador.UnidadOperativaId = (string)data.unidadOperativaId; modified = true; } if (indicador.Porcentual != (data.porcentual != null ? (bool)data.porcentual : false)) { indicador.Porcentual = data.porcentual != null ? (bool)data.porcentual : false; modified = true; } if (indicador.PalabrasClave != (string)data.palabrasClave) { indicador.PalabrasClave = (string)data.palabrasClave; modified = true; } if (indicador.Ponderado != (double?)data.ponderado) { indicador.Ponderado = (double?)data.ponderado; modified = true; } List <Pry_IndicadoresVerificadores> verificators = new List <Pry_IndicadoresVerificadores>(); foreach (var verificator in data.pry_IndicadoresVerificadores) { Pry_IndicadoresVerificadores _verificator = new Pry_IndicadoresVerificadores { IdIndicador = indicador.IdIndicador, Descripcion = (string)verificator.descripcion }; verificators.Add(_verificator); } Context.modifyVerificadores(indicador.IdIndicador, verificators); Context.modifyData(); elementId = indicador.IdIndicador; } break; case "deleteIndicador": { Pry_Indicadores indicador = Context.GetIndicadorById((int)data.idIndicador); Context.deleteIndicador(indicador); } break; case "addSupuesto": { Pry_Supuestos supuesto = new Pry_Supuestos() { IdObjetivo = (int)data.idObjetivo, Descripcion = (string)data.descripcion, Impacto = (int)data.impacto == 1 ? true : false, PlanContingencia = (string)data.planContingencia }; Context.addSupuesto(supuesto); elementId = supuesto.IdSupuesto; } break; case "modifySupuesto": { Pry_Supuestos supuesto = Context.GetSupuestoById((int)data.idSupuesto); bool modified = false; if (supuesto.Descripcion != (string)data.descripcion) { supuesto.Descripcion = (string)data.descripcion; modified = true; } if (supuesto.Impacto != ((int)data.impacto == 1 ? true : false)) { supuesto.Impacto = ((int)data.impacto == 1 ? true : false); modified = true; } if (supuesto.PlanContingencia != (string)data.planContingencia) { supuesto.PlanContingencia = (string)data.planContingencia; modified = true; } Context.modifyData(); } break; case "deleteSupuesto": { Pry_Supuestos supuesto = Context.GetSupuestoById((int)data.idSupuesto); Context.deleteSupuesto(supuesto); } break; case "addInforme": { Pry_Informes informe = new Pry_Informes() { IdProyecto = (int)data.idProyecto, Descripcion = (string)data.descripcion, FechaProgramada = (DateTime)data.fechaProgramada, PresupuestoMeta = data.presupuestoMeta != 0 ? (double)data.presupuestoMeta : 0, AvanceMeta = data.avanceMeta != 0 ? (double)data.avanceMeta : 0 }; Context.addInforme(informe); elementId = informe.IdInforme; } break; case "modifyInforme": { Pry_Informes informe = Context.GetInformeById((int)data.idInforme); bool modified = false; if (informe.Descripcion != (string)data.descripcion) { informe.Descripcion = (string)data.descripcion; modified = true; } if (informe.FechaProgramada != (DateTime)data.fechaProgramada) { informe.FechaProgramada = (DateTime)data.fechaProgramada; modified = true; } if (informe.PresupuestoMeta != (data.presupuestoMeta != 0 ? (double)data.presupuestoMeta : 0)) { informe.PresupuestoMeta = data.presupuestoMeta != 0 ? (double)data.presupuestoMeta : 0; modified = true; } if (informe.AvanceMeta != (data.avanceMeta != 0 ? (double)data.avanceMeta : 0)) { informe.AvanceMeta = data.avanceMeta != 0 ? (double)data.avanceMeta : 0; modified = true; } Context.modifyData(); elementId = informe.IdInforme; } break; case "deleteInforme": { Pry_Informes informe = Context.GetInformeById((int)data.idInforme); Context.deleteInforme(informe); } break; } return(elementId); }