Beispiel #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;
                    }
                }
            }));
        }
Beispiel #2
0
        /// <summary>
        /// Metodo para procesar tarjetas bancarias VISA/MASTERCARD
        /// </summary>
        /// <param name="request">Movimiento tarjeta bancaria</param>
        /// <returns>Respuesta de la operación</returns>
        public ResponseBussiness <PagoBancarioResponse> ProcesarTarjetaBancariaVisaMaster(ProcesarMovimientoTarjetaBancariaRequest request)
        {
            try
            {
                //return tryCatch.SafeExecutor(() =>
                //{
                PagoBancarioResponse respuesta = new PagoBancarioResponse();
                using (TransactionScope scope = new TransactionScope())
                {
                    TarjetaBancariaBusiness tarjeta = new TarjetaBancariaBusiness(this.token);
                    var funcionesCaja = funcionesRepository.GetFunctions(token.CodeBox, token.CodeStore);

                    s.LogEntry(this.token.ToString(), 3);
                    s.LogEntry(token.CodeBox.ToString(), 3);
                    s.LogEntry(token.CodeStore.ToString(), 3);
                    s.LogEntry(" vaciado token", 3);

                    if (funcionesCaja != null)
                    {
                        s.LogEntry(" Entro a funciones caja diferente de nulo", 3);
                        //s.LogEntry(" DescuentoPromocionesAplicados: " + request.Venta.ToString(), 1);

                        if (request == null)
                        {
                            s.LogEntry(" request null", 3);
                        }
                        else
                        {
                            s.LogEntry(" request no  null", 3);
                        }


                        if (request.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados == null)
                        {
                            s.LogEntry(" Las promiciones son nulas", 3);
                        }
                        else
                        {
                            s.LogEntry(" Las promiciones son NO es nulo", 3);

                            s.LogEntry($" TTTTT Las promiciones son NO es nulo {request.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados.Length}", 3);
                        }

                        if (request.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados.Length > 0)
                        {
                            s.LogEntry(" Las promiciones son cero", 3);
                        }
                        else
                        {
                            s.LogEntry($"es mayor a 0: {request.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados.Length}", 1);
                        }

                        // Se procesan las promociones por venta
                        foreach (var item in request.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados)
                        {
                            OperationResponse response = new OperationResponse();
                            response = repository.PersistirPromocionesVenta(request.Venta.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.Venta.FolioOperacionAsociada, token.CodeStore, token.CodeBox, item.Secuencia, item.ImporteDescuento
                                                                                 , item.CodigoPromocionAplicado, item.DescripcionCodigoPromocionAplicado, item.PorcentajeDescuento, item.CodigoRazonDescuento, item.FormaPagoCodigoPromocionAplicado);
                        }
                        s.LogEntry(" antes de tarjeta.CobroVisaMasterCard", 3);

                        s.LogEntry($"  funcionesCaja.UrlLecturaBancaria: { funcionesCaja.UrlLecturaBancaria}", 3);
                        s.LogEntry($"  token.CodeStore: {  token.CodeStore}", 3);
                        s.LogEntry($"  request.Venta.FolioOperacionAsociada: {  request.Venta.FolioOperacionAsociada}", 3);
                        s.LogEntry($"  request.Venta.MesesFinanciamiento: { request.Venta.MesesFinanciamiento}", 3);
                        s.LogEntry($"  request.Venta.MesesParcialidades: { request.Venta.MesesParcialidades}", 3);
                        s.LogEntry($"  request.Venta.CodigoPromocion: {request.Venta.CodigoPromocion}", 3);
                        s.LogEntry($"  request.Venta.ImporteVentaTotal: {request.Venta.CodigoPromocion}", 3);
                        s.LogEntry($"  request.Venta.SecuenciaFormaPagoImporte: {request.Venta.SecuenciaFormaPagoImporte}", 3);



                        respuesta = tarjeta.CobroVisaMasterCard(funcionesCaja.UrlLecturaBancaria, token.CodeStore, request.Venta.FolioOperacionAsociada, request.Venta.MesesFinanciamiento, request.Venta.MesesParcialidades, request.Venta.CodigoPromocion, request.Venta.ImporteVentaTotal, request.Venta.SecuenciaFormaPagoImporte);
                        s.LogEntry(" despues de tarjeta.CobroVisaMasterCard", 3);
                        if (!respuesta.SePuedePagarConPuntos && !respuesta.SePuedeRetirar)
                        {
                            if (respuesta.CodeNumber == 0)
                            {
                                request.Venta.CodigoFormaPagoImporte = respuesta.TipoTarjeta;
                                var repuestaLocal = repository.ProcesarMovimientoTarjetaBancariaVenta(token.CodeStore, token.CodeBox, token.CodeEmployee, respuesta.Authorization, respuesta.CardNumber, request);
                                scope.Complete();
                            }
                        }
                    }
                    else
                    {
                        respuesta.CodeNumber      = 103;
                        respuesta.CodeDescription = "No existe funciones asociadas a la caja, revise las funciones registradas de la caja";
                    }
                }
                s.LogEntry("Sin errores", 1);
                return(respuesta);
                //});
            }
            catch (Exception ex)
            {
                s.LogEntry(ex.Message, 3);
                s.LogEntry(ex.InnerException.Message, 3);
                return(null);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Método para finalizar la compra por tarjeta de MM
        /// </summary>
        /// <param name="request">Objeto petición con información de TCMM asociada</param>
        /// <returns></returns>
        public ResponseBussiness <FinalizarCompraResponse> FinalizarCompraTCMM(FinalizarCompraRequest request)
        {
            //request.PlanFinanciamiento: ID del plan de financiamiento
            //request.ImporteVentaTotal: Monto autorizado con la TCMM
            string mesesFinanciados;
            string montoMensualidad;

            //OCG: Recuparar número de meses para el financiamiento
            mesesFinanciados = request.MesesFinanciados.ToString();

            return(tryCatch.SafeExecutor(() =>
            {
                FinalizarCompraResponse response = new FinalizarCompraResponse();
                InfoService infoService = new InfoService();
                InformacionServiciosExternosBusiness informacionServiciosExternosBusiness = new InformacionServiciosExternosBusiness();
                infoService = informacionServiciosExternosBusiness.ObtenerCadenaServicioExterno(7);
                var cadenaURL = infoService.UrlService;
                HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(cadenaURL + "/getPurchaseAuthorization");
                httpWebRequest.Headers.Add("Authorization", credenciales.Licence);
                httpWebRequest.Method = "POST";
                httpWebRequest.ContentType = "application/json";
                var serializer = new Newtonsoft.Json.JsonSerializer();

                // Inicia la Transaccion
                using (TransactionScope scope = new TransactionScope())
                {
                    // Se procesan las promociones por venta
                    foreach (var item in request.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados)
                    {
                        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)
                    {
                        repository.PersistirPromocionesLineaVenta(request.FolioOperacionAsociada, token.CodeStore, token.CodeBox, item.Secuencia, item.ImporteDescuento
                                                                  , item.CodigoPromocionAplicado, item.DescripcionCodigoPromocionAplicado, item.PorcentajeDescuento, item.CodigoRazonDescuento, item.FormaPagoCodigoPromocionAplicado);
                    }

                    //OCG:
                    // Se procesa la persistencia localmente
                    var movimientoVenta = repository.ProcesarMovimientoTarjetaMelodyMilano(token.CodeStore, token.CodeBox, token.CodeEmployee, "", request.NumeroTarjeta, request);

                    // Se invoca el Servicio de Milano
                    using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
                    {
                        using (var textWriter = new Newtonsoft.Json.JsonTextWriter(streamWriter))
                        {
                            serializer.Serialize(textWriter,
                                                 new
                            {
                                User = credenciales.UserName,
                                Pwd = credenciales.Password,
                                CardId = request.NumeroTarjeta,
                                BranchId = token.CodeStore,
                                TerminalNumber = token.CodeBox,
                                VoucherNumber = movimientoVenta.Transaccion,
                                TransactionAmount = request.ImporteVentaTotal,
                                EntryMode = 12,
                                FinancingSchemeId = request.PlanFinanciamiento
                            });
                        }
                    }
                    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                    {
                        var responseText = streamReader.ReadToEnd();
                        JToken responseJObject = JObject.Parse(responseText);
                        response.CodigoRespuestaTCMM = new CodigoRespuestaTCMM();
                        response.CodigoRespuestaTCMM.CodigoRespuesta = Convert.ToString(responseJObject.SelectToken("ErrorCode"));
                        response.CodigoRespuestaTCMM.MensajeRetorno = Convert.ToString(responseJObject.SelectToken("Message"));

                        //OCG: Recuperar los valores del financiamiento para poder actualizar la tabla
                        UpdatePlanFinanciamientoTCMM planesFinanciamiento = new UpdatePlanFinanciamientoTCMM();

                        planesFinanciamiento.folioOperacion = request.FolioOperacionAsociada;
                        planesFinanciamiento.montoMensualidad = Convert.ToString(responseJObject.SelectToken("Response.MonthlyPayment"));
                        planesFinanciamiento.financiamientoId = request.MesesFinanciados.ToString();
                        planesFinanciamiento.codigoFormaPago = request.CodigoFormaPagoImporte;
                        planesFinanciamiento.codigoTienda = token.CodeStore;
                        planesFinanciamiento.fechaActualizacion = DateTime.Now;
                        planesFinanciamiento.codigoCaja = token.CodeBox;

                        repository.spMilano_ActualizaPlazoFinanciamiento(planesFinanciamiento);
                        //--


                        if (response.CodigoRespuestaTCMM.CodigoRespuesta == "0")
                        {
                            // Actualizar la autorización regresada por WS Milano
                            response.Authorization = Convert.ToString(responseJObject.SelectToken("Response").SelectToken("AuthorizationNumber"));
                            repository.ActualizarMovimientoTarjetaMelodyMilano(token.CodeStore, token.CodeBox, movimientoVenta.Transaccion, response.Authorization, request);
                            scope.Complete();
                        }
                    }
                }
                // Finalizar la Transacción

                return response;
            }));
        }
Beispiel #4
0
        /// <summary>
        /// Método para asociar las formas de pago a una transacción
        /// </summary>
        /// <param name="codeStore">Código de tienda</param>
        /// <param name="codeBox">Código de caja</param>
        /// <param name="codeEmployee">Código de empleado cajero</param>
        /// <param name="folioOperacion">Folio de la operación</param>
        /// <param name="formasPagoUtilizadas">Formas de pago utilizadas</param>
        /// <param name="clasificacionVenta">Clasificación de la venta</param>
        public void AsociarFormasPago(int codeStore, int codeBox, int codeEmployee, String folioOperacion, FormaPagoUtilizado[] formasPagoUtilizadas, string clasificacionVenta)
        {
            Divisa[]      divisas      = this.ObtenerFormasPagoEfectivoMonedaExtranjera(codeStore);
            List <string> listaDivisas = new List <string>();

            foreach (Divisa divisa in divisas)
            {
                listaDivisas.Add(divisa.Codigo);
            }
            FormaPagoResponse[] formasPagoVales      = this.getFormasPagoVales(codeStore);
            List <string>       listaFormasPagoVales = new List <string>();

            foreach (FormaPagoResponse formaPagoVale in formasPagoVales)
            {
                listaFormasPagoVales.Add(formaPagoVale.CodigoFormaPago);
            }
            PaymentProcessingRepository paymentProcessingRepository = new PaymentProcessingRepository();

            foreach (var formaPagoUtilizada in formasPagoUtilizadas)
            {
                // Pagos que deben registrarse exitosamente al momento de finalizar
                if (formaPagoUtilizada.Estatus == "PP")
                {
                    formaPagoUtilizada.Estatus = "PE";
                    // Pagos con Vales
                    if (validarCodigoFormaPago(formaPagoUtilizada.CodigoFormaPagoImporte, listaFormasPagoVales.ToArray()))
                    {
                        paymentProcessingRepository.ProcesarMovimientoVales(codeStore, codeBox, codeEmployee, folioOperacion, formaPagoUtilizada, clasificacionVenta);
                        // Se procesan las promociones por venta
                        foreach (var item in formaPagoUtilizada.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados)
                        {
                            OperationResponse response = new OperationResponse();
                            response = paymentProcessingRepository.PersistirPromocionesVenta(folioOperacion, codeStore, 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 formaPagoUtilizada.DescuentosPromocionalesPorLineaAplicados.DescuentoPromocionesAplicados)
                        {
                            OperationResponse response = new OperationResponse();
                            response = paymentProcessingRepository.PersistirPromocionesLineaVenta(folioOperacion, codeStore, codeBox, item.Secuencia, item.ImporteDescuento
                                                                                                  , item.CodigoPromocionAplicado, item.DescripcionCodigoPromocionAplicado, item.PorcentajeDescuento, item.CodigoRazonDescuento, item.FormaPagoCodigoPromocionAplicado);
                        }
                    }
                    // Pagos con Efectivo y con Moneda Extranjera
                    if (validarCodigoFormaPago(formaPagoUtilizada.CodigoFormaPagoImporte, listaDivisas.ToArray()))
                    {
                        paymentProcessingRepository.ProcesarMovimientoEfectivo(codeStore, codeBox, codeEmployee, folioOperacion, formaPagoUtilizada);
                        // Se procesan las promociones por venta
                        foreach (var item in formaPagoUtilizada.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados)
                        {
                            OperationResponse response = new OperationResponse();
                            response = paymentProcessingRepository.PersistirPromocionesVenta(folioOperacion, codeStore, 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 formaPagoUtilizada.DescuentosPromocionalesPorLineaAplicados.DescuentoPromocionesAplicados)
                        {
                            OperationResponse response = new OperationResponse();
                            response = paymentProcessingRepository.PersistirPromocionesLineaVenta(folioOperacion, codeStore, codeBox, item.Secuencia, item.ImporteDescuento
                                                                                                  , item.CodigoPromocionAplicado, item.DescripcionCodigoPromocionAplicado, item.PorcentajeDescuento, item.CodigoRazonDescuento, item.FormaPagoCodigoPromocionAplicado);
                        }
                    }
                }

                // Pagos que ya estan registrados y solo deben asociarse al momento de finalizar
                if (formaPagoUtilizada.Estatus == "PR")
                {
                    paymentProcessingRepository.AsociarMovimientoRegistrado(codeStore, codeBox, folioOperacion, formaPagoUtilizada);
                }
            }
        }