/// <summary> /// Método de la capa business para aplicar el vale de finlag /// </summary> /// <param name="aplicaValeRequest"></param> /// <returns></returns> public ResponseBussiness <OperationResponse> ProcesarAplicarValeFinlag(AplicaValeRequest aplicaValeRequest) { return(tryCatch.SafeExecutor(() => { using (TransactionScope scope = new TransactionScope()) { OperationResponse operationResponse = new OperationResponse(); // Se procesa en el servicio externo de Finlag para procesar la venta var respuestaWS = AplicarValeInternal(aplicaValeRequest); // Se procesa el movimiento Pago localmente if (respuestaWS.NumeroCodigo == 100) { // Si resultado OK se solicita y persiste la trama de impresión ConsultaValeFinlagRequest consultaValeFinlagRequest = new ConsultaValeFinlagRequest(); consultaValeFinlagRequest.FolioVale = aplicaValeRequest.FolioVale; ConsultaTramaImpresionResult consultaTramaImpresionResult = this.ObtenerTramaImpresion(consultaValeFinlagRequest); finlagRepository.ProcesarTramaImpresion(token.CodeStore, token.CodeBox, token.CodeEmployee, aplicaValeRequest.FolioOperacionAsociada, consultaTramaImpresionResult); // -------------- Si resultado OK se procesa el pago Finlag en base de datos localmente // Se procesan las promociones por venta foreach (var item in aplicaValeRequest.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados) { OperationResponse response = new OperationResponse(); response = paymentProcessingRepository.PersistirPromocionesVenta(aplicaValeRequest.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 aplicaValeRequest.DescuentosPromocionalesPorLineaAplicados.DescuentoPromocionesAplicados) { OperationResponse response = new OperationResponse(); response = paymentProcessingRepository.PersistirPromocionesLineaVenta(aplicaValeRequest.FolioOperacionAsociada, token.CodeStore, token.CodeBox, item.Secuencia, item.ImporteDescuento , item.CodigoPromocionAplicado, item.DescripcionCodigoPromocionAplicado, item.PorcentajeDescuento, item.CodigoRazonDescuento, item.FormaPagoCodigoPromocionAplicado); } // Se persiste la información del cobro operationResponse = finlagRepository.ProcesarMovimientoAplicarVale(token.CodeStore, token.CodeBox, token.CodeEmployee, aplicaValeRequest); scope.Complete(); return operationResponse; } else { // Si resultado ERROR se regresa operationResponse.CodeNumber = respuestaWS.NumeroCodigo.ToString(); operationResponse.CodeDescription = respuestaWS.DescripcionCodigo; return operationResponse; } } })); }
private AplicaValeResponse AplicarValeInternal(AplicaValeRequest aplicaValeRequest) { AplicaValeResponse aplicaValeResponse = new AplicaValeResponse(); DateTime dateTime = Convert.ToDateTime(aplicaValeRequest.FechaNacimiento); // Invocar servicio externo var tablaRespuestaProxy = proxy.AplicaVale(aplicaValeRequest.FolioVale, aplicaValeRequest.IdDistribuidora, aplicaValeRequest.ImporteVentaTotal, aplicaValeRequest.Quincenas , aplicaValeRequest.TipoPago, token.CodeBox, dateTime, aplicaValeRequest.INE, aplicaValeRequest.Nombre, aplicaValeRequest.Apaterno, aplicaValeRequest.Amaterno, aplicaValeRequest.Calle, aplicaValeRequest.NumExt, aplicaValeRequest.Colonia, aplicaValeRequest.Estado, aplicaValeRequest.Municipio, aplicaValeRequest.CP, aplicaValeRequest.Sexo, aplicaValeRequest.FolioOperacionAsociada, infoService.UserName, infoService.Password, aplicaValeRequest.puntosUtilizados, aplicaValeRequest.efectivoPuntos); // Procesar la respuesta del servicio externo aplicaValeResponse = ConvertToAplicaVale(tablaRespuestaProxy).FirstOrDefault(); if (aplicaValeResponse.IdTransaccion == "") { // En caso de que el WS regrese un error aplicaValeResponse.NumeroCodigo = 201; aplicaValeResponse.DescripcionCodigo = aplicaValeResponse.EstatusMovimiento; } return(aplicaValeResponse); }
/// <summary> /// Procesar movimiento con un vale de Finlag /// </summary> /// <param name="codigoTienda">Código de tienda</param> /// <param name="codigoCaja">Código de caja</param> /// <param name="codigoEmpleado">Código de empleado</param> /// <param name="aplicaValeRequest">Objeto petición de procesamiento de movimiento vale Finlag</param> /// <returns>Resultado de la operacion</returns> public OperationResponse ProcesarMovimientoAplicarVale(int codigoTienda, int codigoCaja, int codigoEmpleado, AplicaValeRequest aplicaValeRequest) { OperationResponse operationResponse = new OperationResponse(); String nombreCompleto = aplicaValeRequest.Nombre + " " + aplicaValeRequest.Apaterno + " " + aplicaValeRequest.Amaterno; operationResponse = this.PersistirMovimientoAplicarVale(codigoTienda, codigoCaja, codigoEmpleado, aplicaValeRequest.FolioOperacionAsociada, aplicaValeRequest.CodigoFormaPagoImporte, aplicaValeRequest.Estatus, aplicaValeRequest.SecuenciaFormaPagoImporte, aplicaValeRequest.ImporteVentaTotal, "0", 0, 0, aplicaValeRequest.FolioVale, nombreCompleto); //TODO: Almacenar la transacción hacia File System si aplica return(operationResponse); }
public ResponseBussiness <OperationResponse> AplicaVale(AplicaValeRequest aplicaValeRequest) { TokenDto token = new TokenService().Get(); return(new FinlagBusiness(token).ProcesarAplicarValeFinlag(aplicaValeRequest)); }