private async Task ActualizarPlanAdquisicion(int pciId, PlanAdquisicion planAdquisicion) { DateTime fechaActual = _generalInterface.ObtenerFechaHoraActual(); ActividadEspecifica actividadEspecificaBD = null; int operacion = 1; // operacion=1=>suma; operacion=2=>resta int areaId = 0; await using var transaction = await _dataContext.Database.BeginTransactionAsync(); #region Obtener Area if (planAdquisicion.DependenciaId > 0) { Dependencia dependencia = _dataContext.Dependencia.Where(x => x.DependenciaId == planAdquisicion.DependenciaId).FirstOrDefault(); if (dependencia != null) { areaId = dependencia.AreaId; } } #endregion Obtener Area #region Registrar nuevos if (planAdquisicion.EstadoModificacion == (int)EstadoModificacion.Insertado) { PlanAdquisicion planAdquisicionNuevo = new PlanAdquisicion(); planAdquisicionNuevo.PlanDeCompras = planAdquisicion.PlanDeCompras; planAdquisicionNuevo.ActividadGeneralId = planAdquisicion.ActividadEspecifica.ActividadGeneral.ActividadGeneralId; planAdquisicionNuevo.ActividadEspecificaId = planAdquisicion.ActividadEspecifica.ActividadEspecificaId; planAdquisicionNuevo.ValorAct = planAdquisicion.ValorAct; planAdquisicionNuevo.SaldoAct = planAdquisicion.ValorAct; planAdquisicionNuevo.AplicaContrato = planAdquisicion.AplicaContrato; planAdquisicionNuevo.UsuarioId = planAdquisicion.UsuarioId; planAdquisicionNuevo.DependenciaId = planAdquisicion.DependenciaId; planAdquisicionNuevo.AreaId = areaId; planAdquisicionNuevo.PciId = pciId; planAdquisicionNuevo.EstadoId = (int)EstadoPlanAdquisicion.Generado; if (planAdquisicion.RubroPresupuestal != null) { planAdquisicionNuevo.RubroPresupuestalId = planAdquisicion.RubroPresupuestal.RubroPresupuestalId; planAdquisicionNuevo.DecretoId = planAdquisicion.RubroPresupuestal.PadreRubroId.Value; } actividadEspecificaBD = await _repoActividad.ObtenerActividadEspecificaBase(planAdquisicion.ActividadEspecifica.ActividadEspecificaId); if (actividadEspecificaBD != null) { operacion = 2; // resta await _serviceActividad.ActualizarActividadEspecifica(actividadEspecificaBD, planAdquisicion.ValorAct, operacion); } await _dataContext.PlanAdquisicion.AddAsync(planAdquisicionNuevo); await _dataContext.SaveChangesAsync(); } #endregion Registrar nuevos #region Actualizar registros if (planAdquisicion.EstadoModificacion == (int)EstadoModificacion.Modificado) { decimal valor = 0; PlanAdquisicion planAdquisicionBD = await _repo.ObtenerPlanAnualAdquisicionBase(planAdquisicion.PlanAdquisicionId); if (planAdquisicionBD != null) { if (planAdquisicionBD.ValorAct > planAdquisicion.ValorAct) { operacion = 1; // Suma valor = planAdquisicionBD.ValorAct - planAdquisicion.ValorAct; } else { operacion = 2; // Resta valor = planAdquisicion.ValorAct - planAdquisicionBD.ValorAct; } planAdquisicionBD.PlanDeCompras = planAdquisicion.PlanDeCompras; planAdquisicionBD.AplicaContrato = planAdquisicion.AplicaContrato; planAdquisicionBD.SaldoAct = planAdquisicion.ValorAct; planAdquisicionBD.ValorAct = planAdquisicion.ValorAct; planAdquisicionBD.AplicaContrato = planAdquisicion.AplicaContrato; planAdquisicionBD.DependenciaId = planAdquisicion.DependenciaId; planAdquisicionBD.Crp = planAdquisicion.Crp; planAdquisicionBD.AreaId = areaId; await _dataContext.SaveChangesAsync(); actividadEspecificaBD = await _repoActividad.ObtenerActividadEspecificaBase(planAdquisicion.ActividadEspecifica.ActividadEspecificaId); if (actividadEspecificaBD != null) { await _serviceActividad.ActualizarActividadEspecifica(actividadEspecificaBD, valor, operacion); } } } #endregion Actualizar registros await transaction.CommitAsync(); }
public async Task <ActionResult> RegistrarSolicitudCDP(SolicitudCDP solicitudCDP) { usuarioId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value); SolicitudCDP solicitud = null; DetalleSolicitudCDP detalle = null; PlanAdquisicion planAdquisicion = null; List <DetalleSolicitudCDP> listaDetalle = new List <DetalleSolicitudCDP>(); await using var transaction = await _dataContext.Database.BeginTransactionAsync(); try { if (solicitudCDP != null) { if (solicitudCDP.TipoOperacion.TipoOperacionId == (int)TipoOperacionEnum.SOLICITUD_INICIAL) { #region Cabecera Solicitud CDP solicitud = new SolicitudCDP(); solicitud.TipoOperacionId = solicitudCDP.TipoOperacion.TipoOperacionId; solicitud.UsuarioId = usuarioId; solicitud.UsuarioIdRegistro = usuarioId; solicitud.FechaRegistro = _generalInterface.ObtenerFechaHoraActual(); solicitud.EstadoSolicitudCDPId = solicitudCDP.EstadoSolicitudCDP.EstadoId; solicitud.NumeroActividad = solicitudCDP.NumeroActividad; solicitud.AplicaContrato = solicitudCDP.AplicaContrato; solicitud.NombreBienServicio = solicitudCDP.NombreBienServicio; solicitud.ProyectoInversion = solicitudCDP.ProyectoInversion; solicitud.NombreBienServicio = solicitudCDP.NombreBienServicio; solicitud.ActividadProyectoInversion = solicitudCDP.ActividadProyectoInversion; solicitud.ObjetoBienServicioContratado = solicitudCDP.ObjetoBienServicioContratado; solicitud.Observaciones = solicitudCDP.Observaciones; solicitud.Cdp = null; solicitud.TipoDetalleCDPId = null; await _dataContext.SolicitudCDP.AddAsync(solicitud); await _dataContext.SaveChangesAsync(); #endregion Cabecera Solicitud CDP #region Registrar Detalle Solicitud CDP if (solicitudCDP.DetalleSolicitudCDPs != null && solicitudCDP.DetalleSolicitudCDPs.Count > 0) { foreach (var item in solicitudCDP.DetalleSolicitudCDPs) { detalle = new DetalleSolicitudCDP(); detalle.SolicitudCDPId = solicitud.SolicitudCDPId; detalle.PlanAdquisicionId = item.PlanAdquisicionId; detalle.RubroPresupuestalId = item.RubroPresupuestal.RubroPresupuestalId; detalle.ValorActividad = item.ValorActividad; detalle.SaldoActividad = item.SaldoActividad; detalle.ValorSolicitud = item.ValorSolicitud; listaDetalle.Add(detalle); } //Insertar Detalle await _dataContext.DetalleSolicitudCDP.AddRangeAsync(listaDetalle); await _dataContext.SaveChangesAsync(); } #endregion Registrar Detalle Solicitud CDP #region Actualizar Plan de adquisición if (solicitudCDP.DetalleSolicitudCDPs != null && solicitudCDP.DetalleSolicitudCDPs.Count > 0) { foreach (var item in solicitudCDP.DetalleSolicitudCDPs) { planAdquisicion = await _planAdquisicionRepo.ObtenerPlanAnualAdquisicionBase(item.PlanAdquisicionId.Value); planAdquisicion.SaldoAct = planAdquisicion.SaldoAct - item.ValorSolicitud; planAdquisicion.EstadoId = (int)EstadoPlanAdquisicion.ConCDP; await _dataContext.SaveChangesAsync(); } } #endregion Actualizar Plan de adquisición } else { #region Cabecera Solicitud CDP solicitud = new SolicitudCDP(); solicitud.TipoOperacionId = solicitudCDP.TipoOperacion.TipoOperacionId; solicitud.UsuarioId = usuarioId; solicitud.UsuarioIdRegistro = usuarioId; solicitud.FechaRegistro = _generalInterface.ObtenerFechaHoraActual(); solicitud.EstadoSolicitudCDPId = solicitudCDP.EstadoSolicitudCDP.EstadoId; solicitud.NumeroActividad = solicitudCDP.NumeroActividad; solicitud.AplicaContrato = solicitudCDP.AplicaContrato; solicitud.NombreBienServicio = solicitudCDP.NombreBienServicio; solicitud.ProyectoInversion = solicitudCDP.ProyectoInversion; solicitud.NombreBienServicio = solicitudCDP.NombreBienServicio; solicitud.ActividadProyectoInversion = solicitudCDP.ActividadProyectoInversion; solicitud.ObjetoBienServicioContratado = solicitudCDP.ObjetoBienServicioContratado; solicitud.Observaciones = solicitudCDP.Observaciones; solicitud.Cdp = solicitudCDP.Cdp; solicitud.TipoDetalleCDPId = solicitudCDP.TipoDetalleCDP.TipoDetalleCDPId; await _dataContext.SolicitudCDP.AddAsync(solicitud); await _dataContext.SaveChangesAsync(); #endregion Cabecera Solicitud CDP #region Registrar Detalle Solicitud CDP if (solicitudCDP.DetalleSolicitudCDPs != null && solicitudCDP.DetalleSolicitudCDPs.Count > 0) { foreach (var item in solicitudCDP.DetalleSolicitudCDPs) { detalle = new DetalleSolicitudCDP(); detalle.SolicitudCDPId = solicitud.SolicitudCDPId; detalle.PlanAdquisicionId = item.PlanAdquisicionId; detalle.RubroPresupuestalId = item.RubroPresupuestal.RubroPresupuestalId; detalle.ValorActividad = item.ValorActividad; detalle.SaldoActividad = item.SaldoActividad; detalle.ValorSolicitud = item.ValorSolicitud; listaDetalle.Add(detalle); } await _dataContext.DetalleSolicitudCDP.AddRangeAsync(listaDetalle); await _dataContext.SaveChangesAsync(); } #endregion Registrar Detalle Solicitud CDP #region Actualizar Plan de adquisición if (solicitudCDP.DetalleSolicitudCDPs != null && solicitudCDP.DetalleSolicitudCDPs.Count > 0) { foreach (var item in solicitudCDP.DetalleSolicitudCDPs) { planAdquisicion = await _planAdquisicionRepo.ObtenerPlanAnualAdquisicionBase(item.PlanAdquisicionId.Value); switch (solicitudCDP.TipoOperacion.TipoOperacionId) { case (int)TipoOperacionEnum.ADICION: { planAdquisicion.SaldoAct = planAdquisicion.SaldoAct - item.ValorSolicitud; break; } case (int)TipoOperacionEnum.REDUCCION: { planAdquisicion.SaldoAct = planAdquisicion.SaldoAct + item.ValorSolicitud; break; } case (int)TipoOperacionEnum.ANULACION: { planAdquisicion.SaldoAct = planAdquisicion.SaldoAct + item.ValorSolicitud; break; } } planAdquisicion.EstadoId = (int)EstadoPlanAdquisicion.ConCDP; await _dataContext.SaveChangesAsync(); } } #endregion Actualizar Plan de adquisición } await transaction.CommitAsync(); return(Ok(solicitudCDP.SolicitudCDPId)); } } catch (Exception) { throw; } throw new Exception($"No se pudo registrar la solicitud de CDP"); }