/// <summary> /// Regresa el saldo maximo por el cual puede ser redimido el cupon /// </summary> /// <returns></returns> public CuponRedimirResponse SaldoRedimir(ValidarCuponRequest validarCuponRequest) { return(tryCatch.SafeExecutor(() => { CuponRedimirRequest cuponRedimirRequest = new CuponRedimirRequest(); CuponRedimirResponse cuponRedimirResponse = new CuponRedimirResponse(); ProxyCupones.Respuesta consultaCuponResponseWs = new ProxyCupones.Respuesta(); cuponRedimirRequest.FolioCupon = validarCuponRequest.FolioCupon; cuponRedimirRequest.FolioVenta = validarCuponRequest.FolioVenta; cuponRedimirRequest.CodigoCaja = this.token.CodeBox; cuponRedimirRequest.CodigoTienda = this.token.CodeStore; try { consultaCuponResponseWs = proxyCupones.ConsultaCupon(this.token.CodeStore, this.token.CodeBox, validarCuponRequest.FolioCupon); if (consultaCuponResponseWs.sError != "") { cuponRedimirRequest.Sesion = Convert.ToInt32(consultaCuponResponseWs.lSesion); // No encuentra el cupon en el WS de milano, busca localmente if (consultaCuponResponseWs.sError == "El folio de cupón no existe; Verifique") { cuponRedimirRequest.SaldoCupon = 0; cuponRedimirRequest.CodigoPromocion = 0; cuponRedimirResponse = repository.ValidarSaldo(cuponRedimirRequest); } else { cuponRedimirResponse.MensajeRedencion = consultaCuponResponseWs.sError; cuponRedimirResponse.Saldo = 0; } } else { cuponRedimirRequest.SaldoCupon = Convert.ToDouble(consultaCuponResponseWs.dSaldo); cuponRedimirRequest.CodigoPromocion = consultaCuponResponseWs.iCodigoPromocion; cuponRedimirRequest.Sesion = Convert.ToInt32(consultaCuponResponseWs.lSesion); cuponRedimirResponse = repository.ValidarSaldo(cuponRedimirRequest); } } catch (Exception exception) { TryCatchBusinessExecutor tryCatch = new TryCatchBusinessExecutor(); tryCatch.AddErrorLog <OperationResponse>(exception.Message, exception.StackTrace, "Servicio milano", exception.ToString(), "Error de comunicacion servicios milano"); cuponRedimirRequest.SaldoCupon = 0; cuponRedimirRequest.CodigoPromocion = 0; cuponRedimirRequest.Sesion = 0; cuponRedimirResponse = repository.ValidarSaldo(cuponRedimirRequest); } return cuponRedimirResponse; })); }
/// <summary> /// Valida el saldo del cupón /// </summary> /// <param name="cuponRedimirRequest"></param> /// <returns></returns> public CuponRedimirResponse ValidarSaldo(CuponRedimirRequest cuponRedimirRequest) { CuponRedimirResponse cuponRedimirResponse = new CuponRedimirResponse(); var parameters = new Dictionary <string, object>(); parameters.Add("@FolioVentaRedencion", cuponRedimirRequest.FolioVenta); parameters.Add("@FolioCupon", cuponRedimirRequest.FolioCupon); parameters.Add("@CodigoTienda", cuponRedimirRequest.CodigoTienda); parameters.Add("@CodigoCaja", cuponRedimirRequest.CodigoCaja); parameters.Add("@SaldoCupon", cuponRedimirRequest.SaldoCupon); parameters.Add("@CodigoPromocion", cuponRedimirRequest.CodigoPromocion); List <System.Data.SqlClient.SqlParameter> parametersOut = new List <System.Data.SqlClient.SqlParameter>(); parametersOut.Add(new System.Data.SqlClient.SqlParameter() { ParameterName = "@MaximoRedencionOut", Direction = ParameterDirection.Output, SqlDbType = SqlDbType.Decimal, Precision = 11, Scale = 2 }); parametersOut.Add(new System.Data.SqlClient.SqlParameter() { ParameterName = "@MensajeRedencionOut", Direction = ParameterDirection.Output, SqlDbType = SqlDbType.NVarChar, Size = 4000 }); parametersOut.Add(new System.Data.SqlClient.SqlParameter() { ParameterName = "@CodigoTipoTrxCab", Direction = ParameterDirection.Output, SqlDbType = SqlDbType.NVarChar, Size = 4000 }); parametersOut.Add(new System.Data.SqlClient.SqlParameter() { ParameterName = "@Transaccion", Direction = ParameterDirection.Output, SqlDbType = SqlDbType.Int }); parametersOut.Add(new System.Data.SqlClient.SqlParameter() { ParameterName = "@EsRedimibleHoy", Direction = ParameterDirection.Output, SqlDbType = SqlDbType.Int }); var result = data.ExecuteProcedure("[dbo].[sp_vanti_PrmRedimirCupon]", parameters, parametersOut); cuponRedimirResponse.Saldo = Convert.ToDecimal(result["@MaximoRedencionOut"]); cuponRedimirResponse.MensajeRedencion = result["@MensajeRedencionOut"].ToString(); cuponRedimirResponse.CodigoTipoTrxCab = result["@CodigoTipoTrxCab"].ToString(); cuponRedimirResponse.Transaccion = Convert.ToInt32(result["@Transaccion"]); cuponRedimirResponse.EsRedimibleHoy = Convert.ToInt32(result["@EsRedimibleHoy"]); return(cuponRedimirResponse); }
/// <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; } })); }