public ResponseBussiness <OperationResponse> RealizarPagoNotaCredito(ProcesarMovimientoNotaCreditoRequest procesarMovimientoNotaCreditoRequest) { TokenDto token = new TokenService().Get(); ResponseBussiness <OperationResponse> response = new PaymentProcessingBusiness(token).ProcesarNotaCredito(procesarMovimientoNotaCreditoRequest); return(response); }
/// <summary> /// Metodo para procesar una nota de crédito /// </summary> /// <param name="procesarMovimientoNotaCreditoRequest">Movimiento Nota de Crédito</param> /// <returns>Respuesta de la operación</returns> public ResponseBussiness <OperationResponse> ProcesarNotaCredito(ProcesarMovimientoNotaCreditoRequest procesarMovimientoNotaCreditoRequest) { OperationResponse respuestaValidacion = new OperationResponse(); return(tryCatch.SafeExecutor(() => { //Validar que la nota si la nota de credito se quiere cobrar el mismo día que se redimio respuestaValidacion = EsNotaCreditoOffline(token.CodeStore, token.CodeBox, procesarMovimientoNotaCreditoRequest.FolioNotaCredito); using (TransactionScope scope = new TransactionScope()) { //TarjetaRegalosBusiness tarjeta = new TarjetaRegalosBusiness(this.token); NotaCreditoBusiness notaCredito = new NotaCreditoBusiness(token); // Se procesan las promociones por venta foreach (var item in procesarMovimientoNotaCreditoRequest.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados) { OperationResponse response = new OperationResponse(); response = repository.PersistirPromocionesVenta(procesarMovimientoNotaCreditoRequest.FolioOperacionAsociada, token.CodeStore, token.CodeBox, item.ImporteDescuento , item.CodigoPromocionAplicado, item.DescripcionCodigoPromocionAplicado, item.PorcentajeDescuento, item.CodigoRazonDescuento, item.FormaPagoCodigoPromocionAplicado); } // Se procesan las promociones por línea de venta foreach (var item in procesarMovimientoNotaCreditoRequest.DescuentosPromocionalesPorLineaAplicados.DescuentoPromocionesAplicados) { OperationResponse response = new OperationResponse(); response = repository.PersistirPromocionesLineaVenta(procesarMovimientoNotaCreditoRequest.FolioOperacionAsociada, token.CodeStore, token.CodeBox, item.Secuencia, item.ImporteDescuento , item.CodigoPromocionAplicado, item.DescripcionCodigoPromocionAplicado, item.PorcentajeDescuento, item.CodigoRazonDescuento, item.FormaPagoCodigoPromocionAplicado); } // Se procesa el pago en base de datos localmente OperationResponse respuestaLocal = new OperationResponse(); // Se procesa el pago en Web Service Externo Milano if (respuestaValidacion.CodeNumber == "0") { respuestaLocal = repository.PersistirMovimientoNotaCredito(token.CodeStore, token.CodeBox, token.CodeEmployee, procesarMovimientoNotaCreditoRequest, 0); var respuesta = notaCredito.Cobro(this.token.CodeEmployee, procesarMovimientoNotaCreditoRequest.FolioNotaCredito, respuestaLocal.Transaccion, procesarMovimientoNotaCreditoRequest.FolioOperacionAsociada, respuestaLocal.CodigoTipoTrxCab, procesarMovimientoNotaCreditoRequest.ImporteVentaTotal); if (respuesta.CodeNumber != "0") { respuesta.CodeNumber = respuestaLocal.CodeNumber; scope.Complete(); } return respuesta; } // Se procesa el pago con Redención Local if (respuestaValidacion.CodeNumber == "100") { respuestaLocal = repository.PersistirMovimientoNotaCredito(token.CodeStore, token.CodeBox, token.CodeEmployee, procesarMovimientoNotaCreditoRequest, 1); if (respuestaLocal.CodeNumber == "353") { scope.Complete(); return respuestaLocal; } else { // Ocurrió algún error return respuestaLocal; } } // No es posible procesar el pago else { return respuestaValidacion; } } })); }