예제 #1
0
        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();
        }
예제 #2
0
        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");
        }