Example #1
0
        public async Task <IActionResult> RegistraryAprobarSolicitudPago(FormatoSolicitudPagoParaGuardarDto formatoDto)
        {
            await using var transaction = await _dataContext.Database.BeginTransactionAsync();

            FormatoSolicitudPago        formato              = null;
            RespuestaSolicitudPago      respuestaSolicitud   = new RespuestaSolicitudPago();
            Numeracion                  numeracionDisponible = null;
            DetalleFormatoSolicitudPago detalleSolicitud     = null;

            try
            {
                usuarioId  = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);
                valorPciId = User.FindFirst(ClaimTypes.Role).Value;
                if (!string.IsNullOrEmpty(valorPciId))
                {
                    pciId = int.Parse(valorPciId);
                }

                if (formatoDto != null)
                {
                    #region Mapear datos

                    formato                           = new FormatoSolicitudPago();
                    formato.TerceroId                 = formatoDto.TerceroId;
                    formato.PlanPagoId                = formatoDto.PlanPagoId;
                    formato.Crp                       = formatoDto.Crp;
                    formato.NumeroFactura             = formatoDto.NumeroFactura;
                    formato.ValorFacturado            = formatoDto.valorFacturado;
                    formato.ActividadEconomicaId      = formatoDto.ActividadEconomicaId;
                    formato.FechaInicio               = formatoDto.FechaInicio;
                    formato.FechaFinal                = formatoDto.FechaFinal;
                    formato.Observaciones             = formatoDto.Observaciones;
                    formato.ValorBaseGravableRenta    = formatoDto.ValorBaseGravableRenta;
                    formato.ValorIva                  = formatoDto.ValorIva;
                    formato.NumeroPlanilla            = formatoDto.NumeroPlanilla;
                    formato.MesId                     = formatoDto.MesId;
                    formato.BaseCotizacion            = formatoDto.BaseCotizacion;
                    formato.SupervisorId              = formatoDto.SupervisorId;
                    formato.ObservacionesModificacion = formatoDto.Observaciones;
                    formato.PciId                     = pciId;
                    formato.EstadoId                  = (int)EstadoSolicitudPago.Aprobado;

                    formato.UsuarioIdRegistro     = usuarioId;
                    formato.UsuarioIdModificacion = usuarioId;
                    formato.FechaRegistro         = _generalInterface.ObtenerFechaHoraActual();
                    formato.FechaModificacion     = _generalInterface.ObtenerFechaHoraActual();
                    formato.EsSaludVencida        = (formatoDto.FechaInicio.Month != formatoDto.MesId) ? true : false;

                    #endregion Mapear datos

                    #region Numeracion Disponible

                    var parametroLiquidacionTercero = await _terceroRepository.ObtenerParametrizacionLiquidacionXTercero(formatoDto.TerceroId, pciId);

                    if (parametroLiquidacionTercero != null && parametroLiquidacionTercero.FacturaElectronicaId == 0)
                    {
                        numeracionDisponible = await _repo.ObtenerUltimaNumeracionDisponible(pciId);

                        if (numeracionDisponible != null)
                        {
                            formato.NumeroFactura = numeracionDisponible.NumeroConsecutivo;
                        }
                    }

                    #endregion Numeracion Disponible

                    _dataContext.FormatoSolicitudPago.Add(formato);
                    await _dataContext.SaveChangesAsync();

                    #region Registrar Rubros Presupuestales

                    if (formato.EstadoId == (int)EstadoSolicitudPago.Aprobado)
                    {
                        if (formatoDto.DetallesFormatoSolicitudPago != null &&
                            formatoDto.DetallesFormatoSolicitudPago.Count > 0)
                        {
                            foreach (var item in formatoDto.DetallesFormatoSolicitudPago)
                            {
                                if (item.ValorAPagar > 0)
                                {
                                    detalleSolicitud = new DetalleFormatoSolicitudPago();
                                    detalleSolicitud.FormatoSolicitudPagoId      = formato.FormatoSolicitudPagoId;
                                    detalleSolicitud.RubroPresupuestalId         = item.RubroPresupuestal.Id;
                                    detalleSolicitud.ValorAPagar                 = item.ValorAPagar;
                                    detalleSolicitud.Dependencia                 = item.Dependencia;
                                    detalleSolicitud.ClavePresupuestalContableId = item.ClavePresupuestalContableId.HasValue ? item.ClavePresupuestalContableId.Value : null;
                                    _dataContext.DetalleFormatoSolicitudPago.Add(detalleSolicitud);
                                }
                            }
                        }
                        await _dataContext.SaveChangesAsync();
                    }

                    #endregion Registrar Rubros Presupuestales

                    #region Actualizar el plan de pago

                    var cantidadPlanPagoxCompromiso = await _planPagoRepository.CantidadPlanPagoParaCompromiso(formatoDto.Crp, pciId);


                    var planPagoBD = await _planPagoRepository.ObtenerPlanPagoBase(formatoDto.PlanPagoId);

                    if (cantidadPlanPagoxCompromiso > 1)
                    {
                        planPagoBD.EstadoPlanPagoId = (int)EstadoPlanPago.PorObligar;
                    }
                    planPagoBD.NumeroRadicadoProveedor  = formato.FormatoSolicitudPagoId.ToString();
                    planPagoBD.FechaRadicadoProveedor   = _generalInterface.ObtenerFechaHoraActual();
                    planPagoBD.NumeroRadicadoSupervisor = formato.FormatoSolicitudPagoId.ToString();
                    planPagoBD.FechaRadicadoSupervisor  = _generalInterface.ObtenerFechaHoraActual();
                    planPagoBD.ValorFacturado           = formatoDto.valorFacturado;
                    planPagoBD.UsuarioIdModificacion    = usuarioId;
                    planPagoBD.SaldoDisponible          = planPagoBD.SaldoDisponible.Value - formatoDto.valorFacturado;
                    planPagoBD.FechaModificacion        = _generalInterface.ObtenerFechaHoraActual();
                    await _dataContext.SaveChangesAsync();

                    #endregion Actualizar el plan de pago

                    #region Actualizar Numeracion Utilizada

                    if (parametroLiquidacionTercero != null && parametroLiquidacionTercero.FacturaElectronicaId == 0)
                    {
                        if (numeracionDisponible != null)
                        {
                            var numeracionBase = await _repo.ObtenerNumeracionBase(numeracionDisponible.NumeracionId);

                            if (numeracionBase != null)
                            {
                                numeracionBase.FormatoSolicitudPagoId = formato.FormatoSolicitudPagoId;
                                numeracionBase.Utilizado = true;
                                numeracionBase.PciId     = pciId;
                                await _dataContext.SaveChangesAsync();
                            }
                        }
                    }

                    #endregion Actualizar Numeracion Utilizada

                    await transaction.CommitAsync();

                    respuestaSolicitud.FormatoSolicitudPagoId = formato.FormatoSolicitudPagoId;
                    respuestaSolicitud.NumeroFactura          = formato.NumeroFactura;

                    return(Ok(respuestaSolicitud));
                }
            }
            catch (Exception)
            {
                throw;
            }
            throw new Exception($"No se pudo registrar el formato de liquidación");
        }
Example #2
0
        public async Task <IActionResult> RegistrarFormatoSolicitudPago(FormatoSolicitudPagoParaGuardarDto formatoDto)
        {
            await using var transaction = await _dataContext.Database.BeginTransactionAsync();

            FormatoSolicitudPago   formato              = null;
            RespuestaSolicitudPago respuestaSolicitud   = new RespuestaSolicitudPago();
            Numeracion             numeracionDisponible = null;

            try
            {
                usuarioId  = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);
                valorPciId = User.FindFirst(ClaimTypes.Role).Value;
                if (!string.IsNullOrEmpty(valorPciId))
                {
                    pciId = int.Parse(valorPciId);
                }

                if (formatoDto != null)
                {
                    #region Mapear datos

                    formato = _mapper.Map <FormatoSolicitudPago>(formatoDto);
                    formato.EsSaludVencida       = (formatoDto.FechaInicio.Month != formatoDto.MesId) ? true : false;
                    formato.ActividadEconomicaId = formatoDto.ActividadEconomicaId;
                    formato.EstadoId             = (int)EstadoSolicitudPago.Generado;
                    formato.UsuarioIdRegistro    = usuarioId;
                    formato.PciId         = pciId;
                    formato.FechaRegistro = _generalInterface.ObtenerFechaHoraActual();

                    #endregion Mapear datos

                    #region Numeracion Disponible

                    var parametroLiquidacionTercero = await _terceroRepository.ObtenerParametrizacionLiquidacionXTercero(formatoDto.TerceroId, pciId);

                    if (parametroLiquidacionTercero != null && parametroLiquidacionTercero.FacturaElectronicaId == 0)
                    {
                        numeracionDisponible = await _repo.ObtenerUltimaNumeracionDisponible(pciId);

                        if (numeracionDisponible != null)
                        {
                            formato.NumeroFactura = numeracionDisponible.NumeroConsecutivo;
                        }
                    }

                    #endregion Numeracion Disponible

                    _dataContext.FormatoSolicitudPago.Add(formato);
                    await _dataContext.SaveChangesAsync();

                    #region Actualizar el plan de pago

                    var cantidadPlanPagoxCompromiso = await _planPagoRepository.CantidadPlanPagoParaCompromiso(formatoDto.Crp, pciId);

                    if (cantidadPlanPagoxCompromiso > 1)
                    {
                        var planPagoBD = await _planPagoRepository.ObtenerPlanPagoBase(formatoDto.PlanPagoId);

                        planPagoBD.EstadoPlanPagoId      = (int)EstadoPlanPago.ConSolicitudPago;
                        planPagoBD.UsuarioIdModificacion = usuarioId;
                        planPagoBD.FechaModificacion     = _generalInterface.ObtenerFechaHoraActual();
                        await _dataContext.SaveChangesAsync();
                    }

                    #endregion Actualizar el plan de pago

                    #region Actualizar Numeracion Utilizada

                    if (parametroLiquidacionTercero != null && parametroLiquidacionTercero.FacturaElectronicaId == 0)
                    {
                        if (numeracionDisponible != null)
                        {
                            var numeracionBase = await _repo.ObtenerNumeracionBase(numeracionDisponible.NumeracionId);

                            if (numeracionBase != null)
                            {
                                numeracionBase.FormatoSolicitudPagoId = formato.FormatoSolicitudPagoId;
                                numeracionBase.Utilizado = true;
                                numeracionBase.PciId     = pciId;
                                await _dataContext.SaveChangesAsync();
                            }
                        }
                    }

                    #endregion Actualizar Numeracion Utilizada

                    await transaction.CommitAsync();

                    respuestaSolicitud.FormatoSolicitudPagoId = formato.FormatoSolicitudPagoId;
                    respuestaSolicitud.NumeroFactura          = formato.NumeroFactura;

                    return(Ok(respuestaSolicitud));
                }
            }
            catch (Exception)
            {
                throw;
            }

            throw new Exception($"No se pudo registrar el formato de liquidación");
        }