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"); }
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"); }