Ejemplo n.º 1
0
        public override void Ejecutar()
        {
            if (InternalSettings.EntidadDatafono != Common.Enums.EntidadFinanciera.CREDIBANCO)
            {
                iu.PanelVentas.VisorMensaje = "El datafono no permite la operación solicitada.";

                //
                SolicitudVolver volver = new SolicitudVolver(Enums.Solicitud.Volver);
                Reactor.Instancia.Procesar(volver);
            }
            else
            {
                //
                log.Info("[CmdCierreDatafono.Ejecutar]");

                if (Config.ViewMode == InternalSettings.ModoConsola)
                {
                    iu.MostrarPanelCierreDatafono();
                    iu.PanelCierreDatafono.VisorOperador = "Cierre de Datafono";
                    iu.PanelCierreDatafono.VisorMensaje  = "Confirmar cierre ?  [1 = Sí, 2 = No]";
                }
                else if (Config.ViewMode == InternalSettings.ModoTouch)
                {
                    iu.MostrarModalCierreDatafono();
                }
                else
                {
                    log.Error("[CmdCierreDatafono.Ejecutar] Modo visual no admitido");
                    iu.PanelOperador.MensajeOperador = "Modo visual no admitido";
                }
            }
        }
        public override void Ejecutar()
        {
            log.InfoFormat("CmdCancelar_CancelarItem --> Cancelar cancelar item");

            //
            SolicitudVolver volver = new SolicitudVolver(Enums.Solicitud.Vender);

            System.Threading.Thread.Sleep(100);
            Reactor.Instancia.Procesar(volver);
        }
Ejemplo n.º 3
0
        public override void Ejecutar()
        {
            //
            log.Info("[CmdAgregarArticuloAjuste] Agregar artículo ajuste");

            //Búsqueda del artículo.
            //TODO modificar consulta de valores de parametros.
            bool ventaSoloCodArticulo = false;

            if (!bool.TryParse(Parametros.Parametro("server.ventaSoloPorArticuloCod").Valor, out ventaSoloCodArticulo))
            {
                log.Error("[CmdAgregarArticuloAjuste] El valor del parametro server.ventaSoloPorArticuloCod no es válido");
            }
            bool implementaImpuestoCompuesto = Entorno.Instancia.Parametros.ObtenerValorParametro <bool>("pdv.definicion_impuesto_compuesta");

            /*if (!bool.TryParse(Parametros.Parametro("pdv.definicion_impuesto_compuesta").Valor, out implementaImpuestoCompuesto))
             * {
             *  implementaImpuestoCompuesto = false;
             * }*/

            #region validar ingreso de artículo

            //
            string[] entrada      = new string[] { };
            string   articulo     = "";
            int      cantidad     = 1;
            bool     cancelarItem = Reactor.Instancia.EstadoFSMActual == EstadosFSM.CancelarItemAjuste;

            //Valida si se debe agregar el último artículo de la lista o no.
            if (string.IsNullOrEmpty(solicitud.ValorEntrada))
            {
                //Se busca el último artículo agregado.
                if (Entorno.Instancia.Vista.PanelVentas.Tirilla.IsNullOrEmptyList())
                {
                    log.Warn("[AgregarArticuloAjuste] no hay artículos para agregar");
                    iu.PanelVentas.VisorMensaje = "No hay artículos en la lista";
                    iu.PanelVentas.VisorEntrada = string.Empty;
                    return;
                }
                else
                {
                    var itemArt = Entorno.Instancia.Vista.PanelVentas.Tirilla.LastOrDefault();
                    entrada = new string[] { itemArt.Codigo };
                }
            }
            else
            {
                entrada = solicitud.ValorEntrada.Split('*');
            }

            //valida la entrada ingresada pro el usuario.
            if (entrada.Length > 1)
            {
                //articulo
                articulo = entrada[1];

                //
                if (!int.TryParse(entrada[0], out cantidad))
                {
                    string msj = string.Format("El valor ingresado para la cantidad es inválido. [{0}]", entrada[0]);
                    log.WarnFormat("[AgregarArticulo] {0}", msj);
                    iu.PanelVentas.VisorMensaje = msj;
                }
            }
            else if (entrada.Length == 1)
            {
                if (string.IsNullOrEmpty(entrada[0]))
                {
                    if (Entorno.Instancia.Vista.PanelVentas.Tirilla.Count > 0)
                    {
                        articulo = iu.PanelVentas.Tirilla.FirstOrDefault().Codigo;
                    }
                }
                else
                {
                    articulo = entrada[0];
                }
            }

            this.CodigoArticulo   = articulo;
            this.CantidadArticulo = !cancelarItem ? cantidad : -cantidad;

            #endregion

            Respuesta respuesta            = new Respuesta();
            var       tiempoBusquedaAjuste = new MetricaTemporizador("BuscarArticuloAjuste");
            EArticulo eArticulo            = new PArticulo().BuscarArticuloPorCodigo(this.CodigoArticulo, ventaSoloCodArticulo, implementaImpuestoCompuesto, out respuesta);
            if (respuesta.Valida)
            {
                Telemetria.Instancia.AgregaMetrica(tiempoBusquedaAjuste.Para().AgregarPropiedad("Encontrado", true).AgregarPropiedad("Codigo", eArticulo.CodigoImpresion).AgregarPropiedad("Descripcion", eArticulo.DescripcionLarga).AgregarPropiedad("Impuesto", eArticulo.Impuesto1).AgregarPropiedad("Valor", eArticulo.PrecioVenta1));

                log.InfoFormat("[CmdAgregarArticuloAjuste] Articulo encontrado: {0}, Transaccion: {1}, Factura {2}", eArticulo.ToString(), (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1), (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1));

                if (Entorno.Instancia.Ajuste.CopiaTirilla.Count == 0)
                {
                    Entorno.Instancia.Ajuste.EstaAbierta = true;
                }
                Procesar(eArticulo);
                log.DebugFormat("[CmdAgregarArticuloAjuste] {0}", this.ToString());
            }
            else
            {
                Telemetria.Instancia.AgregaMetrica(tiempoBusquedaAjuste.Para().AgregarPropiedad("Encontrado", false).AgregarPropiedad("Codigo", this.CodigoArticulo).AgregarPropiedad("Mensaje", respuesta.Mensaje));
                iu.PanelVentas.VisorMensaje = respuesta.Mensaje;
                iu.PanelVentas.VisorEntrada = string.Empty;

                // Emitir sonido
                Utilidades.EmitirAlerta();
            }

            if (cancelarItem)
            {
                SolicitudVolver solicitudOperacion = new SolicitudVolver(Enums.Solicitud.Volver);
                Reactor.Instancia.Procesar(solicitudOperacion);
            }
        }
Ejemplo n.º 4
0
        public override void Ejecutar()
        {
            // llamar a la persistencia de cancelar transacción
            if (Entorno.Instancia.Venta.EstaAbierta)
            {
                // llamar a la persistencia de cancelar transacción
                Task <MessageResult> resul = null;;
                if (Config.ViewMode == InternalSettings.ModoConsola)
                {
                    resul = Entorno.Instancia.Vista.PanelVentas.CancelarOperacion("¿Está seguro de cancelar la venta en curso?, [Sí = 1, No = 2]");
                }
                else if (Config.ViewMode == InternalSettings.ModoTouch)
                {
                    Entorno.Instancia.Vista.MensajeUsuario.TextCancelar  = "No";
                    Entorno.Instancia.Vista.MensajeUsuario.TextConfirmar = "Sí";
                    resul = Entorno.Instancia.Vista.MensajeUsuario.MostrarMensajeAsync("Cancelar Venta", "¿Está seguro de cancelar la venta en curso?");
                }

                resul.Wait();

                if (resul.Result == MessageResult.Affirmative)
                {
                    PVenta    pVenta    = new PVenta();
                    Respuesta respuesta = new Respuesta();
                    Dictionary <string, string> idsAcumulados = Entorno.Instancia.IdsAcumulados;

                    var tiempoCancelarTransaccion = new MetricaTemporizador("CancelarTransaccion");
                    pVenta.CancelarVenta(Entorno.Instancia.Venta, ref idsAcumulados, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, ((int)TipoTransaccion.AnularVenta).ToString(), out respuesta);
                    if (respuesta.Valida == false)
                    {
                        Telemetria.Instancia.AgregaMetrica(tiempoCancelarTransaccion.Para().AgregarPropiedad("Exitoso", false).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)).AgregarPropiedad("TotalVenta", Entorno.Instancia.Venta.TotalVenta).AgregarPropiedad("TotalImpuestoVenta", Entorno.Instancia.Venta.ImpuestosIncluidos.Sum(x => x.Value[2])).AgregarPropiedad("NroArticulosVenta", Entorno.Instancia.Venta.NumeroDeItemsVenta).AgregarPropiedad("Error", respuesta.Mensaje));
                    }
                    else
                    {
                        Telemetria.Instancia.AgregaMetrica(tiempoCancelarTransaccion.Para().AgregarPropiedad("Exitoso", true).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)).AgregarPropiedad("TotalVenta", Entorno.Instancia.Venta.TotalVenta).AgregarPropiedad("TotalImpuestoVenta", Entorno.Instancia.Venta.ImpuestosIncluidos.Sum(x => x.Value[2])).AgregarPropiedad("NroArticulosVenta", Entorno.Instancia.Venta.NumeroDeItemsVenta));
                        log.Info("[CmdCancelarTransaccion] --> Transacción cancelada. Factura: " + Entorno.Instancia.Terminal.NumeroUltimaFactura + 1 + " Transaccion: " + Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1);

                        //
                        Entorno.Instancia.IdsAcumulados     = idsAcumulados;
                        Entorno.Instancia.Venta.EstaAbierta = false;

                        // si es teclado touch
                        if (Config.ViewMode == InternalSettings.ModoTouch)
                        {
                            iu.PanelVentas.LimpiarOperacion();
                        }

                        respuesta = new Respuesta(false);
                        ETerminal terminal = new PTerminal().BuscarTerminalPorCodigo(Common.Config.Terminal, out respuesta);
                        Entorno.Instancia.Terminal = terminal;

                        //
                        LimpiarTransaccion();
                        iu.PanelOperador.CodigoCliente = "";

                        iu.PanelVentas.LimpiarVentaFinalizada();

                        if (iu.PanelPago != null)
                        {
                            iu.PanelPago.LimpiarVentaFinalizada();
                        }

                        //
                        iu.PanelVentas.VisorCliente.Total = 0;
                        iu.PanelVentas.VisorMensaje       = "Transacción cancelada correctamente";

                        if (Entorno.Instancia.Vista.PantallaCliente != null)
                        {
                            Entorno.Instancia.Vista.LimpiarPantallaCliente();
                            Entorno.Instancia.Vista.PantallaCliente.MostrarVista(DisplayCliente.DisplayMedia);
                        }
                        else
                        {
                            Entorno.Instancia.Vista.MostrarDisplayCliente(DisplayCliente.Bienvenida);
                        }

                        //
                        iu.PanelVentas.LimpiarVentaFinalizada();

                        //
                        Solicitudes.SolicitudVolver solicitudPanelVenta = new Solicitudes.SolicitudVolver(Enums.Solicitud.Volver);
                        Reactor.Instancia.Procesar(solicitudPanelVenta);

                        //
                        if (Config.ViewMode == InternalSettings.ModoTouch)
                        {
                            Entorno.Instancia.Vista.MensajeUsuario.OcultarMensaje();
                        }
                    }
                }
                else
                {
                    SolicitudVolver solVolver = new SolicitudVolver(Solicitud.Volver);
                    Reactor.Instancia.Procesar(solVolver);

                    //
                    if (Config.ViewMode == InternalSettings.ModoTouch)
                    {
                        Entorno.Instancia.Vista.MensajeUsuario.OcultarMensaje();
                    }
                }
            }
            else
            {
                LimpiarTransaccion();
            }
        }
Ejemplo n.º 5
0
        public override void Ejecutar()
        {
            Respuesta respuesta = new Respuesta();
            Dictionary <string, string> idsAcumulados = Entorno.Instancia.IdsAcumulados;
            PDevolucion devolucion = new PDevolucion();
            bool        implementaImpuestoCompuesto = Entorno.Instancia.Parametros.ObtenerValorParametro <bool>("pdv.definicion_impuesto_compuesta");

            /*if (!bool.TryParse(Parametros.Parametro("pdv.definicion_impuesto_compuesta").Valor, out implementaImpuestoCompuesto))
             * {
             *  implementaImpuestoCompuesto = false;
             * }*/

            // Imprimir factura
            string factura         = ProcesarPlantilla.Factura(Entorno.Instancia.Devolucion, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario);
            string modeloImpresora = Entorno.Instancia.Impresora.Marca ?? "impresora";

            //
            log.InfoFormat("[CmdPagarVenta] Devolucion Finalizada, Transaccion: {0}, Factura {1}", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1), (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1));

            string tirillaActual = "";

            iu.PanelVentas.Tirilla.ForEach(x =>
            {
                tirillaActual += String.Format("Codigo: {0}, Descripción: {1} ({4}), Cantidad: {2}, Precio: {3} ", x.Codigo, x.Descripcion, x.Cantidad, x.Subtotal, x.PrecioVentaUnidad);
                tirillaActual += Environment.NewLine;
            });
            log.Info("Items tirilla:" + tirillaActual + Environment.NewLine + "Total: " + Entorno.Instancia.Devolucion.TotalVenta + Environment.NewLine + "Totales Impuestos: " + Entorno.Instancia.Devolucion.ImpuestosIncluidos.Sum(x => x.Value[2]) + Environment.NewLine + "Cant Artículos Vendidos: " + Entorno.Instancia.Devolucion.NumeroDeItemsVenta + Environment.NewLine);

            var tiempoGuardarDevolucion = new MetricaTemporizador("TerminarDevolucionFinalizada");

            devolucion.GuardarDevolucion(Entorno.Instancia.Devolucion, ref idsAcumulados, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, ((int)TipoTransaccion.Devolucion).ToString(), factura, modeloImpresora, implementaImpuestoCompuesto, out respuesta);
            if (respuesta.Valida == false)
            {
                this.iu.PanelVentas.VisorMensaje = "No se pudo procesar la devolución, intente nuevamente.";
                Telemetria.Instancia.AgregaMetrica(tiempoGuardarDevolucion.Para().AgregarPropiedad("Exitoso", false).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)).AgregarPropiedad("TotalVenta", Entorno.Instancia.Devolucion.TotalVenta).AgregarPropiedad("TotalImpuestoVenta", Entorno.Instancia.Devolucion.ImpuestosIncluidos.Sum(x => x.Value[2])).AgregarPropiedad("NroArticulosVenta", Entorno.Instancia.Devolucion.NumeroDeItemsVenta).AgregarPropiedad("Error:", respuesta.Mensaje));

                //
                SolicitudVolver volver = new SolicitudVolver(Solicitud.Volver);
                Reactor.Instancia.Procesar(volver);

                //
                LimpiarVentaFinalizada();
            }
            else
            {
                //Log a azure
                Telemetria.Instancia.AgregaMetrica(tiempoGuardarDevolucion.Para().AgregarPropiedad("Exitoso", true).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)).AgregarPropiedad("TotalVenta", Entorno.Instancia.Devolucion.TotalVenta).AgregarPropiedad("TotalImpuestoVenta", Entorno.Instancia.Devolucion.ImpuestosIncluidos.Sum(x => x.Value[2])).AgregarPropiedad("NroArticulosVenta", Entorno.Instancia.Devolucion.NumeroDeItemsVenta));

                // Imprimir
                Entorno.Instancia.Impresora.Imprimir(factura, cortarPapel: true, abrirCajon: true);

                //
                Entorno.Instancia.IdsAcumulados = idsAcumulados;

                //
                respuesta = new Respuesta(false);
                ETerminal terminal = new PTerminal().BuscarTerminalPorCodigo(Common.Config.Terminal, out respuesta);
                Entorno.Instancia.Terminal = terminal;

                LimpiarVentaFinalizada();
                log.Debug("[CmdTerminarDevolucion] Devolucion finalizada.");

                //
                decimal valorCambio = Entorno.Instancia.Devolucion.TotalVenta * -1;
                iu.PanelVentas.VisorCliente.Total = 0;
                iu.PanelVentas.VisorMensaje       = string.Format("Cambio: {0}", valorCambio.ToCustomCurrencyFormat());

                try
                {
                    Respuesta respuesta2;

                    bool checkFactura = Entorno.Instancia.Terminal.VerificarLimiteNumeracion(out respuesta);
                    bool checkFecha   = Entorno.Instancia.Terminal.VerificarFechaAutorizacion(out respuesta2);

                    if (respuesta.Valida && !(respuesta.Mensaje.Equals("")))
                    {
                        iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0} - " + respuesta.Mensaje, valorCambio.ToCustomCurrencyFormat());
                    }
                    else if (respuesta2.Valida && !(respuesta2.Mensaje.Equals("")))
                    {
                        iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0} - " + respuesta2.Mensaje, valorCambio.ToCustomCurrencyFormat());
                    }
                }
                catch (Exception e)
                {
                    log.ErrorFormat("[CmdterminarDevolucion] {0}", e.Message);
                    Telemetria.Instancia.AgregaMetrica(new Excepcion(e));
                }

                //
                log.InfoFormat("[CmdTerminarDevolucion] --> Transaccion finalizada");

                //
                iu.PanelOperador.CodigoCliente = "";

                // Mostrar fin devolución en pantalla cliente.
                iu.MostrarDisplayCliente(DisplayCliente.FinVenta);

                //
                Entorno.Instancia.Devolucion.EstaAbierta = false;
                Entorno.Instancia.Devolucion             = null;
            }
        }
Ejemplo n.º 6
0
        public override void Ejecutar()
        {
            try
            {
                if ((Solicitud.TipoSolicitud == Enums.Solicitud.PagoDatafono)
                    | (Solicitud.TipoSolicitud == Enums.Solicitud.ReintentarPago))
                {
                    bool obligaIngresarValor = Entorno.Instancia.Parametros.ObtenerValorParametro <bool>("pdv.pago.obliga_ingresar_valor");
                    if (string.IsNullOrEmpty(iu.PanelPago.VisorEntrada))
                    {
                        if (obligaIngresarValor)
                        {
                            log.Warn("[CmdPagarVentaDatafono.Ejecutar]  Debe ingrear un valor válido");
                            throw new ArgumentException("Debe ingresar un valor válido");
                        }
                    }
                    else
                    {
                        decimal valorPago = 0;
                        if (!decimal.TryParse(iu.PanelPago.VisorEntrada, out valorPago))
                        {
                            log.WarnFormat("[CmdPagarVentaDatafono.Ejecutar]  Valor ingresado inválido    [{0}]", iu.PanelPago.VisorEntrada);
                            throw new ArgumentException("Valor ingresado inválido");
                        }
                        else
                        {
                            if (valorPago <= 0)
                            {
                                log.WarnFormat("[CmdPagarVentaDatafono.Ejecutar]  Monto inválido    [{0}]", iu.PanelPago.VisorEntrada);
                                throw new ArgumentException("Monto no válido");
                            }
                        }
                    }

                    //
                    iu.PanelPago.PagoVentaDatafono();
                }
                else if (Solicitud.TipoSolicitud == Enums.Solicitud.PagoDatafonoManual)
                {
                    if (Config.ViewMode == InternalSettings.ModoConsola)
                    {
                        iu.PanelPagoManual.VisorMensaje = "Ingrese número de comprobante.";
                    }
                    else
                    {
                        iu.MostrarModalPanelPagoManual();
                    }
                }
            }
            catch (ArgumentException argEx)
            {
                iu.PanelPago.VisorMensaje = argEx.Message;

                if (Config.ViewMode == InternalSettings.ModoTouch)
                {
                    iu.PanelPago.VisorOperador = argEx.Message;
                }


                //
                SolicitudPanelPago volver = new SolicitudPanelPago(Enums.Solicitud.Pagar, argEx.Message);
                Reactor.Instancia.Procesar(volver);
            }
            catch (Exception ex)
            {
                log.ErrorFormat("[Ejecutar] {0}", ex.Message);

                //
                iu.PanelPago.VisorMensaje = "Ocurrió un problema al intentar pagar";

                //
                SolicitudVolver volver = new SolicitudVolver(Enums.Solicitud.Pagar);
                Reactor.Instancia.Procesar(volver);
            }
        }