public async Task <IActionResult> Update(CobGrabacionCobranzaDto cobGrabacionCobranzaDto) { CobGrabacionCobranzaDto resultDto = new CobGrabacionCobranzaDto(); Metadata metadata = new Metadata { IsValid = true, Message = "" }; ApiResponse <CobGrabacionCobranzaDto> response = new ApiResponse <CobGrabacionCobranzaDto>(resultDto); CobGrabacionCobranzas cobGrabacionCobranza = _mapper.Map <CobGrabacionCobranzas>(cobGrabacionCobranzaDto); CobGeneralCobranza generalCobranza = await _generalCobranzaService.GetGeneralCobranzaPorDocumento((long)cobGrabacionCobranza.Documento); MtrTipoMoneda tipomoneda = await _mtrTipoMonedaService.GetById((long)generalCobranza.IdMtrTipoMoneda); CobEstadoDeCuenta estadoCuenta = await _cobEstadoCuentaService.GetEstadoCuentaById(cobGrabacionCobranzaDto.DocAfecta); if (estadoCuenta != null) { CobGrabacionCobranzas grabacionActual = await _cobGrabacionCobranzasService.GetById(cobGrabacionCobranzaDto.Id); if (cobGrabacionCobranzaDto.Transaccion != "RU") { if (generalCobranza.IdTipoTransaccion != "RET") { bool existeMonedaDocumentoMonedaPago = await _cobMatrixMonedaValidaPagoService.ExisteMonedaDocumentoMonedaPago(estadoCuenta.Moneda, tipomoneda.Descripcion); if (!existeMonedaDocumentoMonedaPago) { metadata.IsValid = false; metadata.Message = "Esta intentando grabar cobro en moneda no valida a el Recibo"; response.Meta = metadata; return(Ok(response)); } } decimal totalAfectadoDocumento = _cobGrabacionCobranzasService.TotalAfectadoDocumento((long)cobGrabacionCobranzaDto.Documento, cobGrabacionCobranzaDto.DocAfecta); decimal totalAfectadoDocumentoResta = totalAfectadoDocumento - (decimal)grabacionActual.Monto; if (totalAfectadoDocumentoResta + (decimal)cobGrabacionCobranzaDto.Monto > (decimal)estadoCuenta.Rpaap) { metadata.IsValid = false; metadata.Message = "Esta intentando grabar monto superior al saldo del documento:" + "Total registrado en recibo: " + totalAfectadoDocumento.ToString() + "Saldo documento: " + estadoCuenta.Rpaap.ToString(); response.Meta = metadata; return(Ok(response)); } } } CobGrabacionCobranzas grabacionCobranzaActual = await _cobGrabacionCobranzasService.GetById(cobGrabacionCobranzaDto.Id); if (grabacionCobranzaActual.DocumentoSap.Length > 1) { metadata.IsValid = false; metadata.Message = "Esta intentando modificar un cobro ya contabilizado"; response.Meta = metadata; return(Ok(response)); } CobGrabacionCobranzas cobranza = await _cobGrabacionCobranzasService.Update(cobGrabacionCobranza); if (cobranza != null) { resultDto = _mapper.Map <CobGrabacionCobranzaDto>(cobranza); metadata.IsValid = true; metadata.Message = "Actualizado Satisfactoriamente"; } else { metadata.IsValid = false; metadata.Message = "Registro No actualizado"; } //ApiResponse<CobGrabacionCobranzaDto> response = new ApiResponse<CobGrabacionCobranzaDto>(resultDto) //{ // Meta = metadata, //}; response.Meta = metadata; response.Data = resultDto; return(Ok(response)); }
public async Task <IActionResult> Insert(CobPagosRetencionesDto cobPagosRetencionesDto) { CobPagosRetencionesDto resultDto = new CobPagosRetencionesDto(); Metadata metadata = new Metadata { IsValid = true, Message = "" }; CobPagosRetenciones cobPagosRetenciones = _mapper.Map <CobPagosRetenciones>(cobPagosRetencionesDto); var retencionValida = await _cobPagosRetencionesService.ValidateInsert(cobPagosRetenciones); if (!retencionValida.IsValid) { metadata = retencionValida; } else { //AGREGAMOS EL REGISTRO cobPagosRetenciones.FechaCrea = DateTime.Now; cobPagosRetenciones.FlagComprobanteNo = false; var grabacionCobranza = await _cobGrabacionCobranzasService.GetById(cobPagosRetenciones.IdCobranza); var estadoCuenta = await _cobEstadoCuentaService.GetEstadoCuentaById(grabacionCobranza.DocAfecta); var ValRet = await _cobValoresRetencionesService.GetById(cobPagosRetenciones.IdTransaccion); //Se determina si la retencion es por la base o por el iva de la factura decimal baseCalculoRetencion = 0; if (ValRet.FlagRetieneSobreImp != true) { baseCalculoRetencion = (decimal)estadoCuenta.BaseImponible; } else { baseCalculoRetencion = (decimal)(estadoCuenta.Iva); } if (estadoCuenta.Moneda == "USD") { var tasa = await _tPaTasaBancoCentralServices.GetTasaByFecha((DateTime)estadoCuenta.FechaDocumento); if (tasa != null) { baseCalculoRetencion = baseCalculoRetencion * (decimal)tasa.Tasa; } else { var ultimaTasa = await _tPaTasaBancoCentralServices.GetTasaByFecha((DateTime)DateTime.Now); baseCalculoRetencion = baseCalculoRetencion * (decimal)ultimaTasa.Tasa; } } cobPagosRetenciones.Monto = Math.Round((cobPagosRetenciones.Porcentaje / Convert.ToDecimal(100.0000)) * Convert.ToDecimal(baseCalculoRetencion), 2); var transaccion = await _cobTransaccionesService.GetById(cobPagosRetencionesDto.IdTransaccion); decimal Diferencia = 0; Diferencia = Math.Abs(cobPagosRetenciones.Monto - cobPagosRetencionesDto.Monto); if (Diferencia <= transaccion.BsHolgura) { cobPagosRetenciones.Monto = cobPagosRetencionesDto.Monto; } var cobranza = await _cobPagosRetencionesService.Insert(cobPagosRetenciones); if (cobranza != null) { if (grabacionCobranza.Transaccion == "RE") { grabacionCobranza.Monto = _cobPagosRetencionesService.GetTotalRetencionesByIdCobranzas(grabacionCobranza.Id);; var grabacionCobranzaResult = await _cobGrabacionCobranzasService.Update(grabacionCobranza); } resultDto = _mapper.Map <CobPagosRetencionesDto>(cobranza); metadata.IsValid = true; metadata.Message = "Creado Satisfactoriamente"; } else { metadata.IsValid = false; metadata.Message = "Registro No actualizado"; } } ApiResponse <CobPagosRetencionesDto> response = new ApiResponse <CobPagosRetencionesDto>(resultDto) { Meta = metadata, }; return(Ok(response)); }