예제 #1
0
        /// <summary>
        /// Metodo para procesar redenciones de cupones promocionales
        /// </summary>
        /// <param name="request">Movimiento redención cupon promocional</param>
        /// <returns>Respuesta de la operación y saldo aplicado asociado</returns>
        public ResponseBussiness <ProcesarMovimientoRedencionCuponResponse> ProcesarRedencionCuponPromocional(ProcesarMovimientoRedencionCuponRequest request)
        {
            return(tryCatch.SafeExecutor(() =>
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    // Se procesan las promociones por venta
                    foreach (var item in request.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados)
                    {
                        OperationResponse response = new OperationResponse();
                        response = repository.PersistirPromocionesVenta(request.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 request.DescuentosPromocionalesPorLineaAplicados.DescuentoPromocionesAplicados)
                    {
                        OperationResponse response = new OperationResponse();
                        response = repository.PersistirPromocionesLineaVenta(request.FolioOperacionAsociada, token.CodeStore, token.CodeBox, item.Secuencia, item.ImporteDescuento
                                                                             , item.CodigoPromocionAplicado, item.DescripcionCodigoPromocionAplicado, item.PorcentajeDescuento, item.CodigoRazonDescuento, item.FormaPagoCodigoPromocionAplicado);
                    }

                    // Se procesa el cupón para obtener el monto que aplica
                    RedencionCuponPromocionalBusiness redencionCuponPromocionalBusiness = new RedencionCuponPromocionalBusiness(token);
                    CuponesRedimirBusiness cuponesRedimirBusiness = new CuponesRedimirBusiness(this.token);
                    CuponRedimirResponse cuponRedimirResponse = new CuponRedimirResponse();
                    ValidarCuponRequest validarCuponRequest = new ValidarCuponRequest();
                    validarCuponRequest.FolioCupon = request.FolioCuponPromocional;
                    validarCuponRequest.FolioVenta = request.FolioOperacionAsociada;
                    cuponRedimirResponse = cuponesRedimirBusiness.SaldoRedimir(validarCuponRequest);
                    request.ImporteVentaTotal = cuponRedimirResponse.Saldo;

                    // Se procesa el pago en base de datos localmente y llamando a Ws Milano si el saldo es superior a 0.00 pesos
                    ProcesarMovimientoRedencionCuponResponse procesarMovimientoRedencionCuponResponse = new ProcesarMovimientoRedencionCuponResponse();
                    if (cuponRedimirResponse.Saldo == 0)
                    {
                        procesarMovimientoRedencionCuponResponse.CodeNumber = "703";
                        procesarMovimientoRedencionCuponResponse.CodeDescription = cuponRedimirResponse.MensajeRedencion;
                    }
                    else
                    {
                        OperationResponse responseRealizarVenta = redencionCuponPromocionalBusiness.RealizarVentaCuponPromocional(token.CodeEmployee, request.FolioOperacionAsociada, request.FolioCuponPromocional, cuponRedimirResponse.Transaccion, request.ImporteVentaTotal, cuponRedimirResponse.CodigoTipoTrxCab);
                        if (responseRealizarVenta.CodeNumber == "0")
                        {
                            // El cupon se puede redimir el mismo dia de la creacion
                            if (cuponRedimirResponse.EsRedimibleHoy == 1 && responseRealizarVenta.CodeDescription == "El folio de venta no existe")
                            {
                                procesarMovimientoRedencionCuponResponse = repository.ProcesarMovimientoRedencionCuponPromocional(token.CodeStore, token.CodeBox, token.CodeEmployee, request);
                                procesarMovimientoRedencionCuponResponse.CodeDescription = cuponRedimirResponse.MensajeRedencion;
                                scope.Complete();
                            }
                            else
                            {
                                procesarMovimientoRedencionCuponResponse.CodeNumber = "703";
                                procesarMovimientoRedencionCuponResponse.CodeDescription = responseRealizarVenta.CodeDescription;
                            }
                        }
                        else
                        {
                            procesarMovimientoRedencionCuponResponse = repository.ProcesarMovimientoRedencionCuponPromocional(token.CodeStore, token.CodeBox, token.CodeEmployee, request);
                            procesarMovimientoRedencionCuponResponse.CodeDescription = cuponRedimirResponse.MensajeRedencion;
                            scope.Complete();
                        }
                    }
                    return procesarMovimientoRedencionCuponResponse;
                }
            }));
        }
예제 #2
0
        public ResponseBussiness <ProcesarMovimientoRedencionCuponResponse> RealizarPagoCuponPromociones(ProcesarMovimientoRedencionCuponRequest procesarMovimientoRedencionCuponRequest)
        {
            TokenDto token = new TokenService().Get();
            ResponseBussiness <ProcesarMovimientoRedencionCuponResponse> response = new PaymentProcessingBusiness(token).ProcesarRedencionCuponPromocional(procesarMovimientoRedencionCuponRequest);

            return(response);
        }