Ejemplo n.º 1
0
        public ResponseBussiness <OperationResponse> RealizarPagoNotaCredito(ProcesarMovimientoNotaCreditoRequest procesarMovimientoNotaCreditoRequest)
        {
            TokenDto token = new TokenService().Get();
            ResponseBussiness <OperationResponse> response = new PaymentProcessingBusiness(token).ProcesarNotaCredito(procesarMovimientoNotaCreditoRequest);

            return(response);
        }
Ejemplo n.º 2
0
        /// <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;
                    }
                }
            }));
        }