Exemple #1
0
        public ActionResult <IEnumerable <EstadoPagoResp> > EstadoDePago([FromBody] EstadoPago PagoInfo)
        {
            if (Globals.VueltoPermitido == false)
            {
                var VueltoPosible = vueltopuede.CalcularVueltoPosible(PagoInfo.MontoAPagar);


                if (VueltoPosible == true)
                {
                    Globals.VueltoPermitido = true;
                }
                else
                {
                    EstadoPagoResp vueltonoposible = new EstadoPagoResp();
                    vueltonoposible.PagoStatus = false;
                    vueltonoposible.Status     = false;
                    return(Ok(vueltonoposible));
                }
            }
            var            resultado = pagoservice.EstadoDelPAgo(PagoInfo);
            EstadoPagoResp estado    = new EstadoPagoResp();

            estado = resultado;
            return(Ok(estado));
        }
        protected void Timer_DarVuelto(object sender, ElapsedEventArgs e)// timer usado para dar un vuelto normal
        {
            TimerDarVuelto.Stop();
            TimerDarVuelto.Enabled = false;

            try
            {
                EstadoPagoResp estadopago = new EstadoPagoResp();
                Globals.RespaldoParaVuelto.DineroFaltante  = 0;
                Globals.RespaldoParaVuelto.DineroIngresado = 999999;    // monto enviado para hacer saber  a la funcion que la llamada se realiza de este timer( esto por cuestiones de llamadas asyncronas)
                estadopago = EstadoDelPAgo(Globals.RespaldoParaVuelto); // llamada para saber que monto actual de vuelto hay que realizar
                if (estadopago.data.DineroFaltante < 0)
                {
                    Globals.Vuelto.VueltoTotal = estadopago.data.DineroFaltante * -1;
                    var IniciooPago = InicioPago();
                    if (IniciooPago == true)
                    {
                        estadopago.data.DineroFaltante *= -1;
                        while (Globals.MaquinasActivadas == false)// si por alguna razon la maquina se encuentra desactivada al realizar el pago
                        {
                            InicioPago();
                        }
                        Globals.data = new List <string>();
                        Globals.data.Add(estadopago.data.DineroFaltante.ToString());
                        Globals.Servicio2Vuelto         = new PipeClient2();
                        Globals.Servicio2Vuelto.Message = Globals.servicio.BuildMessage(ServicioPago.Comandos.DarVuelto, Globals.data);
                        var DarVuelto = Globals.Servicio2Vuelto.SendMessage(ServicioPago.Comandos.DarVuelto);
                        if (DarVuelto)// si la maquina devuelve que esta dando vueltos
                        {
                            if (Globals.Servicio2Vuelto.Resultado.Data[0].Contains("No hay dinero para dar vuelto"))
                            {
                                Globals.DandoVuelto = false;
                                Globals.HayVuelto   = false;
                            }
                            else
                            {
                                Globals.DandoVuelto = true;
                                Globals.HayVuelto   = true;
                            }
                        }
                        else
                        {// para decir que la maquina no esta dando vuelto y que hay que volver a llamar a al timer
                            Globals.DandoVuelto  = false;
                            Globals.VueltoUnaVEz = false;
                            Globals.HayVuelto    = false;
                        }
                    }
                    else
                    {// para decir que la maquina no esta dando vuelto y que hay que volver a llamar a al timer
                        Globals.DandoVuelto  = false;
                        Globals.VueltoUnaVEz = false;
                    }
                }
            }
            catch (Exception ex)
            {
                Globals.HayVuelto = false;
                //
            }
        }
        protected void Timer_EstadoVueltoMonedas(object sender, ElapsedEventArgs e)// timer llamado cuando se finaliza una operacion completa o se cancela
        {
            EsperarMonedas.Enabled = false;
            EsperarMonedas.Stop();

            try
            {
                EstadoPagoResp estadopago = new EstadoPagoResp();
                Globals.data = new List <string>();
                Globals.data.Add("");
                Globals.Servicio2ConsultarDevolucionM         = new PipeClient2();
                Globals.Servicio2ConsultarDevolucionM.Message = Globals.servicio.BuildMessage(ServicioPago.Comandos.Cons_dinero_ingre, Globals.data);
                var vuelta  = Globals.Servicio2ConsultarDevolucionM.SendMessage(ServicioPago.Comandos.Cons_dinero_ingre);
                var retorno = Globals.Servicio2ConsultarDevolucionM.Resultado.Data[0];

                int dineroF = new int();
                dineroF = montoapagar.MontoAPagar - int.Parse(retorno);
                if (dineroF < 0)// si despues de finalizar se ingreso dinero extra se llama el vuelto
                {
                    var IniciooPago = InicioPago();
                    if (IniciooPago == true)
                    {
                        dineroF      = dineroF * -1;
                        Globals.data = new List <string>();
                        Globals.data.Add(dineroF.ToString());
                        Globals.Servicio2Vuelto         = new PipeClient2();
                        Globals.Servicio2Vuelto.Message = Globals.servicio.BuildMessage(ServicioPago.Comandos.DarVuelto, Globals.data);
                        var DarVuelto = Globals.Servicio2Vuelto.SendMessage(ServicioPago.Comandos.DarVuelto);
                        if (DarVuelto)// si se empieza  a dar vuelto  se llama a un timer de consulta para que luego apague la maquina
                        {
                            EsperarVueltoMonedas = new System.Timers.Timer()
                            {
                                AutoReset = false
                            };
                            EsperarVueltoMonedas.Elapsed  += new ElapsedEventHandler(Timer_VueltoMonedas);
                            EsperarVueltoMonedas.AutoReset = false;
                            EsperarVueltoMonedas.Interval  = 2000;
                            EsperarVueltoMonedas.Enabled   = true;
                            EsperarVueltoMonedas.Start();
                        }
                    }
                }
                else
                {// se actualiza la transaxxion  y se cambia a que la cancelacion no ha comensado
                    Globals.TimersVueltoCancel = true;
                    transaccion.FinTransaccion();
                }
            }
            catch (Exception ex)
            {
                //
            }
        }
        public ActionResult <IEnumerable <EstadoPagoResp> > EstadoDePago([FromBody] EstadoPago PagoInfo)
        {
            var            resultado = pagoservice.EstadoDelPAgo(PagoInfo);
            EstadoPagoResp estado    = new EstadoPagoResp();

            estado = resultado;
            pagoservice.ConfigurarStatus();
            estado.StatusMaquina    = Globals.SaludMaquina;
            estado.BloqueoEfectivo  = Globals.BloqueoEfectivo;
            estado.BloqueoTransbank = Globals.BloqueoTransbank;
            return(Ok(estado));
        }
Exemple #5
0
        public EstadoPagoResp EstadoDelPAgo(EstadoPago PagoInfo)// se encarga de consultar el estado en que se encuentra el pago
        {
            lock (thisLock)
            {
                EstadoPagoResp EstadoDelPAgo   = new EstadoPagoResp();// variable que se retorna
                var            DineroIngresado = controPeri.DinerIngresado();
                if (DineroIngresado != "false")
                {
                    float Dinero = float.Parse(DineroIngresado);
                    PagoInfo.DineroIngresado = Dinero;
                    PagoInfo.DineroFaltante  = PagoInfo.MontoAPagar - Dinero;
                    if (Dinero > Globals.ImpresoraMontoIngresado)
                    {
                        Globals.ImpresoraMontoIngresado = Dinero;
                    }
                    // Actualizar Datos
                    if (PagoInfo.DineroFaltante < 0)
                    {// si hay que dar vuelto
                        FinalizarPago();
                        EstadoDelPAgo.Status     = true;
                        EstadoDelPAgo.PagoStatus = false;// estado que se retornan al front
                        Task.Delay(int.Parse(Globals._config["TiempoDelay:EsperarVuelto"])).Wait();
                        PagoInfo           = RealizarCalculoVuelto(PagoInfo.MontoAPagar);
                        EstadoDelPAgo.data = PagoInfo;
                        return(EstadoDelPAgo);
                    }
                    else if (PagoInfo.DineroFaltante == 0)// si el pago se realizo completamente
                    {
                        var finalizar = FinalizarPago();
                        if (finalizar == true)
                        {
                            Task.Delay(int.Parse(Globals._config["TiempoDelay:EsperarVuelto"])).Wait();
                            PagoInfo.DineroFaltante = ConsultarDineroExtra(PagoInfo.MontoAPagar);

                            if (PagoInfo.DineroFaltante == 0)
                            {
                                if (Globals.ComprobanteImpreso == false && Globals.ImpresoraMontoIngresado > 0)
                                {
                                    ArmarDocuemntoPagoCompeltoAsync(PagoInfo);// armar datos de ticket
                                    Globals.ComprobanteImpreso = true;
                                }

                                EstadoDelPAgo.data       = PagoInfo;
                                EstadoDelPAgo.Status     = true;
                                EstadoDelPAgo.PagoStatus = true;
                                var finHopper = FinalizarOperacion();
                                return(EstadoDelPAgo);
                            }

                            else if (PagoInfo.DineroFaltante < 0)
                            {
                                EstadoDelPAgo.data       = PagoInfo;
                                EstadoDelPAgo.Status     = true;
                                EstadoDelPAgo.PagoStatus = false;
                                return(EstadoDelPAgo);
                            }
                        }
                        else
                        {
                            EstadoDelPAgo.Status     = false;
                            EstadoDelPAgo.PagoStatus = false;
                            return(EstadoDelPAgo);
                        }
                    }// si no se ha completado un pago
                    EstadoDelPAgo.data       = PagoInfo;
                    EstadoDelPAgo.Status     = true;
                    EstadoDelPAgo.PagoStatus = false;
                    return(EstadoDelPAgo);
                }
                else
                {
                    EstadoDelPAgo.Status     = false;
                    EstadoDelPAgo.PagoStatus = false;
                    return(EstadoDelPAgo);
                }
            }
        }
        protected void Timer_EstadoCancelarPago(object sender, ElapsedEventArgs e)// timer utilizado cuando se cancela, para devolver todo el dinero ingresado
        {
            TimerCancerlarPago.Enabled = false;
            TimerCancerlarPago.Stop();

            try
            {
                if (Globals.HayVuelto == false)
                {
                    var IniciooPago = InicioPago();
                    if (IniciooPago == true)
                    {
                        Globals.data = new List <string>();
                        Globals.data.Add(Globals.dineroIngresado);
                        Globals.Servicio2Vuelto         = new PipeClient2();
                        Globals.Servicio2Vuelto.Message = Globals.servicio.BuildMessage(ServicioPago.Comandos.DarVuelto, Globals.data);
                        var DarVuelto = Globals.Servicio2Vuelto.SendMessage(ServicioPago.Comandos.DarVuelto);
                        if (DarVuelto)
                        {
                            Globals.Vuelto.VueltoTotal     = int.Parse(Globals.dineroIngresado);
                            Globals.Vuelto.DineroRegresado = int.Parse(Globals.dineroIngresado);
                            EsperarVueltoMonedas           = new System.Timers.Timer()
                            {
                                AutoReset = false
                            };
                            EsperarVueltoMonedas.Elapsed  += new ElapsedEventHandler(Timer_VueltoMonedas);
                            EsperarVueltoMonedas.AutoReset = false;
                            EsperarVueltoMonedas.Interval  = 2000;
                            EsperarVueltoMonedas.Enabled   = true;
                            EsperarVueltoMonedas.Start();
                        }
                    }
                }
                else
                {
                    EstadoPagoResp estadopago = new EstadoPagoResp();
                    montoapagar.MontoAPagar = 9999999;
                    var auxPago = Globals.Pago;
                    estadopago = EstadoDelPAgo(montoapagar);
                    if (estadopago.data.DineroIngresado > 0)
                    {
                        var IniciooPago = InicioPago();
                        if (IniciooPago == true)
                        {
                            Globals.Pago = auxPago;
                            Globals.data = new List <string>();
                            Globals.data.Add(estadopago.data.DineroIngresado.ToString());
                            Globals.Servicio2Vuelto         = new PipeClient2();
                            Globals.Servicio2Vuelto.Message = Globals.servicio.BuildMessage(ServicioPago.Comandos.DarVuelto, Globals.data);
                            var DarVuelto = Globals.Servicio2Vuelto.SendMessage(ServicioPago.Comandos.DarVuelto);
                            if (DarVuelto)
                            {
                                Globals.Vuelto.VueltoTotal     = estadopago.data.DineroIngresado;
                                Globals.Vuelto.DineroRegresado = estadopago.data.DineroIngresado;
                                EsperarVueltoMonedas           = new System.Timers.Timer()
                                {
                                    AutoReset = false
                                };
                                EsperarVueltoMonedas.Elapsed  += new ElapsedEventHandler(Timer_VueltoMonedas);
                                EsperarVueltoMonedas.AutoReset = false;
                                EsperarVueltoMonedas.Interval  = 2000;
                                EsperarVueltoMonedas.Enabled   = true;
                                EsperarVueltoMonedas.Start();
                            }
                        }
                    }
                    else
                    {
                        transaccion.FinTransaccion();
                        Globals.EstadodeCancelacion.CancelacionCompleta = true;
                        Globals.EstadodeCancelacion.EntregandoVuelto    = false;
                    }
                }
            }
            catch (Exception ex)
            {
                //
            }
        }
        public EstadoPagoResp EstadoDelPAgo(EstadoPago PagoInfo) // se encarga de consultar el estado en que se encuentra el pago
        {
            Globals.ComprobanteImpresoContador++;                // utilizado para que no se tomen datos del pago anterior
            lock (thisLock)
            {
                bool           volveraUno = false;
                EstadoPagoResp estadopago = new EstadoPagoResp();
                if (Globals.PagoFinalizado == true)
                {
                    estadopago.data       = PagoInfo;
                    estadopago.PagoStatus = true;
                    estadopago.Status     = true;
                    return(estadopago);
                }
                Globals.data = new List <string>();
                Globals.data.Add("");
                Globals.Servicio2Pago         = new PipeClient2();
                Globals.Servicio2Pago.Message = Globals.servicio.BuildMessage(ServicioPago.Comandos.Cons_dinero_ingre, Globals.data);
                var vuelta = Globals.Servicio2Pago.SendMessage(ServicioPago.Comandos.Cons_dinero_ingre);
                // llamar al servicio pipe para traer los datos

                if (vuelta)
                {
                    try
                    {
                        if (PagoInfo.DineroIngresado == 999999)// si la llamada al servicio viene de un timer de vuelto
                        {
                            Globals.DandoVuelto     = true;
                            volveraUno              = true;
                            Globals.dineroIngresado = Globals.Servicio2Pago.Resultado.Data[0];
                        }
                        else
                        {// Actualizar el estado de pago
                            Globals.Pago = PagoInfo;
                        }

                        //Actualizar los datos de pago
                        var DineroIngresado = int.Parse(Globals.Servicio2Pago.Resultado.Data[0]);
                        PagoInfo.DineroIngresado = DineroIngresado;
                        PagoInfo.DineroFaltante  = PagoInfo.MontoAPagar - DineroIngresado;

                        if (PagoInfo.DineroFaltante < 0)
                        {// si hay que dar vuelto
                            FinalizarPago();
                            Globals.RespaldoParaVuelto = PagoInfo;

                            if (Globals.DandoVuelto == false && Globals.PagoCompleto == false)// si actualmente se estan realizand los procesor para dar vuelto
                            {
                                PagoInfo.DineroFaltante = 1;
                            }


                            estadopago.data       = PagoInfo;
                            estadopago.Status     = true;
                            estadopago.PagoStatus = false;
                            // estado que se retornan al front

                            if (Globals.VueltoUnaVEz == false)// timer de dar vuelto que se ejecuta una sola vez
                            {
                                TimerDarVuelto = new System.Timers.Timer()
                                {
                                    AutoReset = false
                                };
                                TimerDarVuelto.Elapsed  += new ElapsedEventHandler(Timer_DarVuelto);
                                TimerDarVuelto.AutoReset = false;
                                TimerDarVuelto.Interval  = 3000;
                                TimerDarVuelto.Enabled   = true;
                                TimerDarVuelto.Start();
                                Globals.VueltoUnaVEz = true;
                            }


                            if (volveraUno == true)// se devuelven los flags de vuelto al estado original para  siguientes consultas
                            {
                                Globals.DandoVuelto = false;
                            }
                            if (Globals.DandoVuelto == true)// obtener concretos de los vueltos a dar ( esto si si se entraga dinero extra mientras se cancela la operacion)
                            {
                                estadopago.data.DineroFaltante = Globals.Vuelto.VueltoTotal;
                            }
                            volveraUno = false;
                            if (Globals.HayVuelto == false)
                            {
                                estadopago.Status = false;
                            }
                            return(estadopago);
                        }
                        else if (PagoInfo.DineroFaltante == 0)// si el pago se realizo completamente
                        {
                            var finalizar = FinalizarPago();
                            if (finalizar == true)
                            {
                                if (Globals.TimersVueltoCancel == false)// para mandar a realizar una pause y luego verificar si se ingreso dinero extra y si es asi se devolverlo
                                {
                                    EsperarMonedas = new System.Timers.Timer()
                                    {
                                        AutoReset = false
                                    };
                                    EsperarMonedas.Elapsed  += new ElapsedEventHandler(Timer_EstadoVueltoMonedas);
                                    EsperarMonedas.AutoReset = false;
                                    EsperarMonedas.Interval  = 2000;
                                    EsperarMonedas.Enabled   = true;
                                    EsperarMonedas.Start();
                                    Globals.PagoCompleto = true;
                                }

                                montoapagar       = PagoInfo;
                                estadopago.data   = PagoInfo;
                                estadopago.Status = true;
                                // datos usado para retornar

                                if (Globals.ComprobanteImpreso == false && Globals.ComprobanteImpresoContador > 5) // para realizar la impresion del ticket el contador es pq las primeras veces puede traer datos  de un pago anterior
                                {
                                    ArmarDocuemntoPagoCompeltoAsync(PagoInfo);                                     // armar datos de ticket

                                    Globals.ComprobanteImpreso = true;
                                }
                                estadopago.PagoStatus  = true;
                                Globals.PagoFinalizado = true;
                                return(estadopago);
                            }
                            else
                            {// si al enviar un estado de apagado de maquina esta no contesta correctamewnte
                                estadopago.data       = PagoInfo;
                                estadopago.Status     = false;
                                estadopago.PagoStatus = false;
                                return(estadopago);
                            }
                        }// si no se ha completado un pago
                        estadopago.data       = PagoInfo;
                        estadopago.Status     = true;
                        estadopago.PagoStatus = false;
                        if (Globals.DandoVuelto == true)// para devolver el vuelto que se debe enviar al timer
                        {
                            estadopago.data.DineroFaltante = Globals.Vuelto.VueltoTotal * -1;
                        }
                        if (Globals.HayVuelto == false)
                        {
                            estadopago.Status = false;
                        }
                        return(estadopago);
                    }
                    catch (Exception ex)
                    {
                        estadopago.Status     = false;
                        estadopago.PagoStatus = false;
                        return(estadopago);
                    }
                }

                else // si no se enviaron los datos correctos dele stado de pago
                {
                    estadopago.Status     = false;
                    estadopago.PagoStatus = false;
                    return(estadopago);
                }
            }
        }