예제 #1
0
        /// <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;
                    }
                }
            }));
        }
예제 #2
0
        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);
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        public ResponseBussiness <OperationResponse> AplicaVale(AplicaValeRequest aplicaValeRequest)
        {
            TokenDto token = new TokenService().Get();

            return(new FinlagBusiness(token).ProcesarAplicarValeFinlag(aplicaValeRequest));
        }