示例#1
0
        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));
        }
示例#2
0
        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));
        }