public override void Ejecutar() { // log.Info("[CmdConsultarPrecio] Consultando Precio: " + solicitud.ValorEntrada); //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("[CmdAgregarArticulo] 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 = ""; string articulo = ""; entrada = solicitud.ValorEntrada; articulo = entrada; this.CodigoArticulo = articulo; #endregion Respuesta respuesta = new Respuesta(); var tiempoConsultarPrecio = new MetricaTemporizador("ConsultarPrecio"); EArticulo eArticulo = new PArticulo().BuscarArticuloPorCodigo(this.CodigoArticulo, ventaSoloCodArticulo, implementaImpuestoCompuesto, out respuesta); if (respuesta.Valida) { Telemetria.Instancia.AgregaMetrica(tiempoConsultarPrecio.Para().AgregarPropiedad("Encontrado", true).AgregarPropiedad("Codigo", eArticulo.CodigoImpresion).AgregarPropiedad("Descripcion", eArticulo.DescripcionLarga).AgregarPropiedad("Impuesto", eArticulo.Impuesto1).AgregarPropiedad("Valor", eArticulo.PrecioVenta1)); log.DebugFormat("[CmdConsultarPrecio] Articulo encontrado: {0}, Transaccion: {1}, Factura {2}", eArticulo.ToString(), (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1), (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)); Procesar(eArticulo); log.DebugFormat("[CmdConsultarPrecio] {0}", this.ToString()); } else { Telemetria.Instancia.AgregaMetrica(tiempoConsultarPrecio.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(); } SolicitudPanelVenta solicitudOperacion = new SolicitudPanelVenta(Enums.Solicitud.Vender); Reactor.Instancia.Procesar(solicitudOperacion); }
public override void Ejecutar() { PArqueo pArqueo = new PArqueo(); Dictionary <string, string> idsAcumulados = Entorno.Instancia.IdsAcumulados; Respuesta respuesta = new Respuesta(); // string arqueo = ProcesarPlantilla.Arqueo(Entorno.Instancia.Vista.PanelArqueo.Caja); string modeloImpresora = Entorno.Instancia.Impresora.Marca ?? "impresora"; var tiempoGuardarArqueo = new MetricaTemporizador("GuardarArqueo"); pArqueo.GuardarArqueo(Entorno.Instancia.Vista.PanelArqueo.Caja, ref idsAcumulados, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, ((int)TipoTransaccion.Arqueo).ToString(), arqueo, modeloImpresora, out respuesta); if (!respuesta.Valida) { Telemetria.Instancia.AgregaMetrica(tiempoGuardarArqueo.Para().AgregarPropiedad("Exitoso", false).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Error", respuesta.Mensaje)); } else { Dictionary <EMedioPago, List <decimal> > arqueos = Entorno.Instancia.Vista.PanelArqueo.Caja.Arqueo; tiempoGuardarArqueo.Para(); foreach (var ar in arqueos) { Telemetria.Instancia.AgregaMetrica(tiempoGuardarArqueo.AgregarPropiedad("Exitoso", true).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Caja", ar.Value[0]).AgregarPropiedad("Conteo", ar.Value[1]).AgregarPropiedad("Diferencia", ar.Value[2])); tiempoGuardarArqueo.Props.Clear(); } //Telemetria.Instancia.AgregaMetrica(tiempoGuardarArqueo.Para().AgregarPropiedad("Exitoso", true).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Resultados",arqueos)); // string resultadosArqueo = ""; foreach (var item in Entorno.Instancia.Vista.PanelArqueo.Caja.Arqueo) { resultadosArqueo += Environment.NewLine; resultadosArqueo += String.Format("Medio Pago: {0}, Valor en Caja: {1}, Valor ingresado: {2}, Diferencia: {3} ", item.Key, item.Value[0], item.Value[1], item.Value[2]); } log.Info("[CmdGuardarArqueo] Arqueo registrado correctamente. Resultados:" + resultadosArqueo); // ETerminal terminal = new PTerminal().BuscarTerminalPorCodigo(Common.Config.Terminal, out respuesta); // Solicitudes.SolicitudPanelVenta volver = new Solicitudes.SolicitudPanelVenta(Solicitud.Vender); Reactor.Instancia.Procesar(volver); // Imprimir log.Info("[CmdGuardarArqueo] Copia Impresión: " + Environment.NewLine + arqueo); Entorno.Instancia.Impresora.Imprimir(arqueo, cortarPapel: true, abrirCajon: false); Entorno.Instancia.Terminal = terminal; Entorno.Instancia.Vista.PanelArqueo.Caja = null; } }
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); } }
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(); } }
public override void Ejecutar() { EMedioPago medioPago = new PMediosPago().GetAllMediosPago().MedioPago("1"); Dictionary <string, string> idsAcumulados = Entorno.Instancia.IdsAcumulados; PPrestamo pPrestamo = new PPrestamo(); Respuesta respuesta = new Respuesta(); EPrestamo ePrestamo = Entorno.Instancia.Prestamo; string factura = ProcesarPlantilla.Prestamos(ePrestamo); string modeloImpresora = Entorno.Instancia.Impresora.Marca ?? "impresora"; var tiempoGuardarPrestamo = new MetricaTemporizador("PrestamoAgregado"); pPrestamo.GuardarPrestamo(Entorno.Instancia.Prestamo, ref idsAcumulados, ((int)TipoTransaccion.Prestamo).ToString(), Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, medioPago, factura, modeloImpresora, out respuesta); // string idVentaPrestamo = respuesta.Mensaje; if (respuesta.Valida == false) { Telemetria.Instancia.AgregaMetrica(tiempoGuardarPrestamo.Para().AgregarPropiedad("Exitoso", false).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Valor", (Entorno.Instancia.Prestamo.Valor)).AgregarPropiedad("Error", respuesta.Mensaje)); throw new Exception(respuesta.Mensaje); } Telemetria.Instancia.AgregaMetrica(tiempoGuardarPrestamo.Para().AgregarPropiedad("Exitoso", true).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Valor", (Entorno.Instancia.Prestamo.Valor))); ETerminal terminal = new PTerminal().BuscarTerminalPorCodigo(Common.Config.Terminal, out respuesta); if (respuesta.Valida == false) { throw new Exception(respuesta.Mensaje); } if (Entorno.Instancia.Usuario.UsuarioSupervisor != null) { PIntervencion pInterv = new PIntervencion(); EIntervencion eInterv = new EIntervencion(); eInterv.id_venta = idVentaPrestamo; eInterv.claveSupervisor = Entorno.Instancia.Usuario.UsuarioSupervisor.ClaveSupervisor; eInterv.motivo = "Intervención prestamo"; eInterv.nro_transac = Convert.ToInt32(Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1); pInterv.GuardarIntervencion(eInterv, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, out respuesta); } Entorno.Instancia.Terminal = terminal; Entorno.Instancia.Prestamo = null; Entorno.Instancia.IdsAcumulados = idsAcumulados; Entorno.Instancia.Usuario.UsuarioSupervisor = null; iu.PanelVentas.VisorMensaje = "Prestamo registrado correctamente."; iu.PanelVentas.VisorEntrada = string.Empty; // si es panel touch if (Config.ViewMode == InternalSettings.ModoTouch) { Entorno.Instancia.Vista.PanelVentas.LimpiarOperacion(); } log.Info("[CmdGuardarPrestamo] Prestamo registrado correctamente."); // Imprimir Entorno.Instancia.Impresora.Imprimir(factura, true, false); log.Info("[CmdAgregarPrestamo] Imprimir Operación: " + factura); ePrestamo = null; if (Config.ViewMode == InternalSettings.ModoConsola) { iu.PanelPrestamos.VisorEntrada = string.Empty; } Solicitudes.SolicitudPanelVenta volver = new Solicitudes.SolicitudPanelVenta(Enums.Solicitud.Vender); Reactor.Instancia.Procesar(volver); iu.MostrarPanelVenta(); }
public override void Ejecutar() { Respuesta respuesta = new Respuesta(); Dictionary <string, string> idsAcumulados = Entorno.Instancia.IdsAcumulados; PAjuste Ajuste = new PAjuste(); ETipoAjuste tipoAjuste = Entorno.Instancia.TiposAjustes.TiposAjuste.FirstOrDefault(x => x.Codigo.Equals(CodigoAjuste)); if (!(tipoAjuste == null)) { // Imprimir factura string factura = ProcesarPlantilla.Ajuste(Entorno.Instancia.Ajuste, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, tipoAjuste.Descripcion); string modeloImpresora = Entorno.Instancia.Impresora.Marca ?? "impresora"; // log.InfoFormat("[CmdPagarVenta] Ajuste Finalizado, 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.Ajuste.TotalVenta + Environment.NewLine + "Totales Impuestos: " + Entorno.Instancia.Ajuste.ImpuestosIncluidos.Sum(x => x.Value[2]) + Environment.NewLine + "Cant Artículos Vendidos: " + Entorno.Instancia.Ajuste.NumeroDeItemsVenta + Environment.NewLine); var tiempoGuardarAjuste = new MetricaTemporizador("TerminarAjusteFinalizado"); Ajuste.GuardarAjuste(Entorno.Instancia.Ajuste, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, Entorno.Instancia.Terminal.Localidad, tipoAjuste, factura, modeloImpresora, out respuesta); if (respuesta.Valida == false) { Telemetria.Instancia.AgregaMetrica(tiempoGuardarAjuste.Para().AgregarPropiedad("Exitoso", false).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)).AgregarPropiedad("TotalVenta", Entorno.Instancia.Ajuste.TotalVenta).AgregarPropiedad("TotalImpuestoVenta", Entorno.Instancia.Ajuste.ImpuestosIncluidos.Sum(x => x.Value[2])).AgregarPropiedad("NroArticulosVenta", Entorno.Instancia.Ajuste.NumeroDeItemsVenta).AgregarPropiedad("Error", respuesta.Mensaje)); } else { //Log a azure Telemetria.Instancia.AgregaMetrica(tiempoGuardarAjuste.Para().AgregarPropiedad("Exitoso", true).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)).AgregarPropiedad("TotalVenta", Entorno.Instancia.Ajuste.TotalVenta).AgregarPropiedad("TotalImpuestoVenta", Entorno.Instancia.Ajuste.ImpuestosIncluidos.Sum(x => x.Value[2])).AgregarPropiedad("NroArticulosVenta", Entorno.Instancia.Ajuste.NumeroDeItemsVenta)); // Imprimir Entorno.Instancia.Impresora.Imprimir(factura, cortarPapel: true, abrirCajon: false); // Entorno.Instancia.IdsAcumulados = idsAcumulados; // respuesta = new Respuesta(false); ETerminal terminal = new PTerminal().BuscarTerminalPorCodigo(Common.Config.Terminal, out respuesta); Entorno.Instancia.Terminal = terminal; LimpiarVentaFinalizada(); log.Info("[CmdTerminarAjuste] Ajuste finalizado"); // decimal valorCambio = Entorno.Instancia.Ajuste.TotalVenta * -1; iu.PanelVentas.VisorCliente.Total = 0; //iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0}", valorCambio.ToString("C")); // log.InfoFormat("[CmdTerminarAjuste] --> Transaccion finalizada"); iu.PanelOperador.CodigoCliente = ""; // iu.PanelVentas.LimpiarOperacion(); Entorno.Instancia.Ajuste.EstaAbierta = false; Entorno.Instancia.Ajuste = null; } } }
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; } }
public static void GenerarTransaccionApertura() { try { bool generaTransAperturaCajon = Entorno.Instancia.Parametros.ObtenerValorParametro <bool>("pdv.imprime_transaccion_abrir_cajon"); // ¿debe generar transacción? if (!generaTransAperturaCajon) { return; } string motivoIntervencion = string.Empty; if (Entorno.Instancia.Recogida != null) { ERecogida recogidaActual = Entorno.Instancia.Recogida; if (recogidaActual != null) { if (recogidaActual.listRecogidas.Count > 0 && recogidaActual.Valor > 0) { return; } } motivoIntervencion = "Intervención Recogida"; } else if (Entorno.Instancia.Prestamo != null) { EPrestamo prestamoActual = Entorno.Instancia.Prestamo; if (prestamoActual != null) { if (prestamoActual.ListPrestamos.Count > 0 && prestamoActual.Valor > 0) { return; } } motivoIntervencion = "Intervención Prestamo"; } // log.Info("[GenerarTransaccionApertura] Guardando transacción apertura cajón ..."); PCajon pCajon = new PCajon(); Dictionary <string, string> idsAcumulados = Entorno.Instancia.IdsAcumulados; // Generar tirilla de apertura de cajón Respuesta respuesta = new Respuesta(); string factura = ProcesarPlantilla.AperturaCajon(); var tiempoGuardarAperturaCajon = new MetricaTemporizador("AperturaCajon"); pCajon.GuardarAperturaCajon(ref idsAcumulados, ((int)TipoTransaccion.AbrirCajon).ToString(), Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, factura ?? "contenido", out respuesta); string idVentaApertCajon = respuesta.Mensaje; if (!respuesta.Valida) { Telemetria.Instancia.AgregaMetrica(tiempoGuardarAperturaCajon.Para().AgregarPropiedad("Exitoso", false).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Error", respuesta.Mensaje)); } else { Telemetria.Instancia.AgregaMetrica(tiempoGuardarAperturaCajon.Para().AgregarPropiedad("Exitoso", true).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("CajonAbierto", respuesta.Mensaje)); respuesta = new Respuesta(false); ETerminal terminal = new PTerminal().BuscarTerminalPorCodigo(Config.Terminal, out respuesta); if (respuesta.Valida == true) { // guardar transacción si hubo if (Entorno.Instancia.Usuario.UsuarioSupervisor != null) { PIntervencion pInterv = new PIntervencion(); EIntervencion eInterv = new EIntervencion(); eInterv.id_venta = idVentaApertCajon; eInterv.claveSupervisor = Entorno.Instancia.Usuario.UsuarioSupervisor.ClaveSupervisor; eInterv.motivo = motivoIntervencion; eInterv.nro_transac = Convert.ToInt32(Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1); pInterv.GuardarIntervencion(eInterv, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, out respuesta); } Entorno.Instancia.Terminal = terminal; Entorno.Instancia.IdsAcumulados = idsAcumulados; Entorno.Instancia.Usuario.UsuarioSupervisor = null; Entorno.Instancia.Recogida = null; Entorno.Instancia.Prestamo = null; // Imprimir Entorno.Instancia.Impresora.Imprimir(factura, cortarPapel: true, abrirCajon: false); log.Info("[GenerarTransaccionApertura.AbrirCajon] Imprimir Operación: " + factura); } } } catch (Exception ex) { log.Info($"[GenerarTransaccionApertura] Error: {ex.Message}"); } }
public override void Ejecutar() { // log.Info("[CmdCancelarTransaccion] Cancelando transacción ..."); // bool cancTransaccion = false; if (!string.IsNullOrEmpty(ValorEntrada)) { cancTransaccion = ValorEntrada == "1"; } else { if (Config.ViewMode == InternalSettings.ModoTouch) { cancTransaccion = iu.PanelVentas.CancelarTransaccion(); } } if (cancTransaccion) { // llamar a la persistencia de cancelar transacción 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 { // if (Config.ViewMode == InternalSettings.ModoTouch) { Solicitudes.SolicitudVolver solicitudPanelVenta = new Solicitudes.SolicitudVolver(Enums.Solicitud.Volver); Reactor.Instancia.Procesar(solicitudPanelVenta); } } }
/// <summary> /// /// </summary> public override void Ejecutar() { log.Info("[CmdPagarVenta] Pago Ingresado: " + solicitud.ValorEntrada); bool implementaImpuestoCompuesto = Entorno.Instancia.Parametros.ObtenerValorParametro <bool>("pdv.definicion_impuesto_compuesta"); bool obligaIngresarValor = Entorno.Instancia.Parametros.ObtenerValorParametro <bool>("pdv.pago.obliga_ingresar_valor"); //copia de seguridad de venta por si algo falla. string jsonCopiaVenta = JsonConvert.SerializeObject(Entorno.Instancia.Venta, Formatting.Indented); //string jsonCopiaImpuestos = JsonConvert.SerializeObject(Entorno.Instancia.Venta.ImpuestosIncluidos, Formatting.Indented); var copiaImpuestosIncluidos = Entorno.Instancia.Venta.ImpuestosIncluidos; try { #region valida entrada de pago //obtiene el valor ingresado para pagar la venta. decimal pago = -1; string entrada = solicitud.ValorEntrada; if (string.IsNullOrEmpty(entrada)) { if (this.solicitud.Pago != null) { pago = this.solicitud.Pago.Valor; if (pago == 0) { pago = Entorno.Instancia.Vista.PanelPago.VisorCliente.Total; this.solicitud.Pago.Valor = pago; } } else { if (obligaIngresarValor) { Entorno.Instancia.Vista.PanelOperador.MensajeOperador = "Debe ingresar un valor a pagar."; log.Warn("Se obliga a ingresar un valor a pagar."); // Solicitudes.SolicitudPanelPago solVolver = new Solicitudes.SolicitudPanelPago(Enums.Solicitud.Pagar, "Debe ingresar un valor a pagar."); Reactor.Instancia.Procesar(solVolver); return; } else { //Toma el total de la venta. pago = Entorno.Instancia.Vista.PanelPago.VisorCliente.Total; } } } else { if (entrada == "VentaPagada") { //Se calcula el total ($) de artículos cancelados + el total de pagos realizados. log.Info("La venta ha sido pagada, se finaliza de la venta."); decimal totalPagos = (Entorno.Instancia.Venta.Pagos.Sum(p => p.Valor)); pago = totalPagos; } else if (!decimal.TryParse(entrada, out pago)) { log.Warn("El valor ingresado no es válido"); Entorno.Instancia.Vista.PanelPago.VisorMensaje = "El valor ingresado no es válido"; } } if (pago <= 0) { log.WarnFormat("Monto no válido [{0}]", pago); Entorno.Instancia.Vista.PanelPago.VisorMensaje = "Monto no válido"; // SolicitudPanelPago volver = new SolicitudPanelPago(Enums.Solicitud.Pagar, "Monto no válido"); Reactor.Instancia.Procesar(volver); return; } else { this.ValorPago = pago; } #endregion //valida el total de la venta. //pago total de la venta Respuesta respuesta = new Respuesta(); if (this.ValorPago == Entorno.Instancia.Venta.PorPagar) { // EMedioPago medioPago = null; EPago ePago = null; if (this.solicitud.Pago != null) { ePago = this.solicitud.Pago; medioPago = ePago.MedioPago; } else { if (this.solicitud.TipoSolicitud == Solicitud.PagoEfectivo) { if (entrada != "VentaPagada") { var medioPagoEfectivo = Entorno.Instancia.MediosPago.Where(m => m.MedioPago == MediosPago.Efectivo); if (!medioPagoEfectivo.IsNullOrEmptyList()) { medioPago = new PMediosPago().GetAllMediosPago().MedioPago(medioPagoEfectivo.FirstOrDefault().CodigoMedioPago); ePago = new EPago(medioPago, this.ValorPago); } else { throw new Exception($"No se encontró medio de pago {MediosPago.Efectivo} configurado en entorno"); } } } else { log.Error($"La solicitud contiene un pago nulo o vacío y el medio de pago no efectivo. Solicitud: {this.solicitud}"); throw new Exception($"No se encontró medio de pago {MediosPago.Efectivo} configurado en entorno"); } } if (entrada != "VentaPagada") { Entorno.Instancia.Venta.AgregarPago(medioPago, ePago, out respuesta); if (respuesta.Valida) { Telemetria.Instancia.AgregaMetrica(new Evento("AgregarPago").AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)).AgregarPropiedad("Valor", (ePago.Valor))); log.InfoFormat("[CmdPagarVenta] Pago Agregado: {0}, Transaccion: {1}, Factura {2}", ePago.Valor, (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1), (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)); } else { log.WarnFormat("[CmdPagarVenta.Ejecutar] {0}", respuesta.Mensaje); return; } } else { Entorno.Instancia.Venta.PorPagar = 0; } //Validar saldo pendiente por pagar. if (Entorno.Instancia.Venta.PorPagar == 0) { Dictionary <string, string> idsAcumulados = Entorno.Instancia.IdsAcumulados; string factura = ProcesarPlantilla.Factura(Entorno.Instancia.Venta, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario); string modeloImpresora = Entorno.Instancia.Impresora.Marca ?? "impresora"; PVenta venta = new PVenta(); //Log a azure string tirillaActual = ""; iu.PanelVentas.Tirilla.ForEach(x => { tirillaActual += Environment.NewLine; tirillaActual += String.Format("Código: {0}, Descripción: {1} ({4}), Cantidad: {2}, Precio: {3} ", x.Codigo, x.Descripcion, x.Cantidad, x.Subtotal, x.PrecioVentaUnidad); }); log.Info("Items tirilla:" + tirillaActual + Environment.NewLine + "Total: " + Entorno.Instancia.Venta.TotalVenta + Environment.NewLine + "Totales Impuestos: " + Entorno.Instancia.Venta.ImpuestosIncluidos.Sum(x => x.Value[2]) + Environment.NewLine + "Cant Artículos Vendidos: " + Entorno.Instancia.Venta.NumeroDeItemsVenta + Environment.NewLine); // log.InfoFormat("[CmdPagarVenta] Venta Finalizada, Transaccion: {0}, Factura {1}", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1), (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)); var tiempoGuardarVenta = new MetricaTemporizador("TerminarVentaFinalizada"); venta.GuardarVenta(Entorno.Instancia.Venta, ref idsAcumulados, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, ((int)TipoTransaccion.Venta).ToString(), factura, modeloImpresora, implementaImpuestoCompuesto, out respuesta); if (respuesta.Valida == false) { Telemetria.Instancia.AgregaMetrica(tiempoGuardarVenta.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)); throw new Exception(respuesta.Mensaje); } else { Telemetria.Instancia.AgregaMetrica(tiempoGuardarVenta.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)); Entorno.Instancia.IdsAcumulados = idsAcumulados; // Entorno.Instancia.Venta.EstaAbierta = false; // respuesta = new Respuesta(false); ETerminal terminal = new PTerminal().BuscarTerminalPorCodigo(Common.Config.Terminal, out respuesta); if (respuesta.Valida) { Entorno.Instancia.Terminal = terminal; string mensaje = string.Empty; //Valida si debe abrir cajón monedero. bool abreCajon = false; var mediosPagoEntorno = new PMediosPago().GetAllMediosPago().ListaMediosPago; var mediosPagoVenta = (from m in mediosPagoEntorno join mp in Entorno.Instancia.Venta.Pagos on m.Codigo.ToLower() equals mp.MedioPago.Codigo.ToLower() select m); //Verifica si hay algún medio de pago configurado para abrir cajón entre los pagos realizados. var mediosPagoAbreCajon = mediosPagoVenta.Where(m => m.AbreCajon); if (!mediosPagoAbreCajon.IsNullOrEmptyList()) { abreCajon = true; } else { if (medioPago != null) { abreCajon = medioPago.AbreCajon; } } //Imprimir Respuesta resImpresion = Entorno.Instancia.Impresora.Imprimir(factura, true, abreCajon); // LimpiarVentaFinalizada(); // if (!resImpresion.Valida) { Entorno.Vista.PanelOperador.MensajeOperador = resImpresion.Mensaje; } // log.Info("[CmdPagarVenta.Ejecutar] --> Transaccion finalizada."); // iu.PanelOperador.CodigoCliente = ""; // decimal valorCambio = Entorno.Instancia.Venta.PorPagar * -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()); } decimal valorLimite = Entorno.Instancia.Parametros.ObtenerValorParametro <Decimal>("pdv.aviso_monto_max_en_caja"); decimal valorCaja = venta.DineroEnCaja(Entorno.Instancia.Terminal.Codigo, Entorno.Instancia.Usuario.IdUsuario, out respuesta); log.InfoFormat("[CmdPagarVenta.Ejecutar] --> Valor en caja : {0}, Valor máximo: {1}", valorCaja.ToCustomCurrencyFormat(), valorLimite.ToCustomCurrencyFormat()); if (valorCaja > valorLimite) { iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0} - Tope máximo en caja excedido", valorCambio.ToCustomCurrencyFormat()); } } catch (Exception e) { log.ErrorFormat("[CmdPagarVenta] {0}", e.Message); Telemetria.Instancia.AgregaMetrica(new Excepcion(e)); } // iu.MostrarPanelVenta(); } } } } else if (this.ValorPago < Entorno.Instancia.Venta.PorPagar) { // EMedioPago medioPago = null; EPago ePago = null; if (this.solicitud.Pago != null) { ePago = this.solicitud.Pago; medioPago = ePago.MedioPago; } else { medioPago = new PMediosPago().GetAllMediosPago().MedioPago("1"); ePago = new EPago(medioPago, this.ValorPago); } Entorno.Instancia.Venta.AgregarPago(medioPago, ePago, out respuesta); if (!respuesta.Valida) { log.WarnFormat("[CmdPagarVenta.Ejecutar.277] {0}", respuesta.Mensaje); return; } else { // agregar a lista de medio de pago Entorno.Instancia.Vista.PanelPago.AgregarMedioPagoUI(new DTOs.DItemMedioPago { CodigoMedioPago = ePago.MedioPago.Codigo, NombreMedioPago = ePago.MedioPago.Tipo, ValorMedioPago = ePago.Valor }); // iu.PanelVentas.VisorCliente.Total = Entorno.Instancia.Venta.PorPagar; iu.PanelPago.VisorCliente.Total = Entorno.Instancia.Venta.PorPagar; iu.PanelPago.VisorEntrada = string.Empty; iu.PanelPago.VisorMensaje = ""; // log.InfoFormat("[CmdPagarVenta] Medio de pago agregado. Valor: [{0}]", this.ValorPago.ToCustomCurrencyFormat()); if (Reactor.Instancia.EstadoFSMActual != EstadosFSM.Pago) { Solicitudes.SolicitudPanelPago solicitud = new Solicitudes.SolicitudPanelPago(Solicitud.Pagar); Reactor.Instancia.Procesar(solicitud); } //Valida si no está el panel de pago activo. if (!(iu.PanelActivo is IPanelPago)) { if (iu.PanelPagoManual != null) { iu.PanelPagoManual.LimpiarPagoFinalizado(); } if (Reactor.Instancia.EstadoFSMActual != EstadosFSM.Pago) { Solicitudes.SolicitudPanelPago solicitud = new Solicitudes.SolicitudPanelPago(Solicitud.Pagar); Reactor.Instancia.Procesar(solicitud); } } } } else if (this.ValorPago > Entorno.Instancia.Venta.PorPagar) { // EMedioPago medioPago = null; EPago ePago = null; if (this.solicitud.Pago != null) { ePago = this.solicitud.Pago; medioPago = ePago.MedioPago; } else { medioPago = new PMediosPago().GetAllMediosPago().MedioPago("1"); ePago = new EPago(medioPago, this.ValorPago); } Entorno.Instancia.Venta.AgregarPago(medioPago, ePago, out respuesta); if (!respuesta.Valida) { log.WarnFormat("[CmdPagarVenta.Ejecutar.329] {0}", respuesta.Mensaje); return; } else { //Validar saldo pendiente por pagar. if (Entorno.Instancia.Venta.PorPagar < 0) { Dictionary <string, string> idsAcumulados = Entorno.Instancia.IdsAcumulados; PVenta venta = new PVenta(); respuesta = new Respuesta(); // string factura = ProcesarPlantilla.Factura(Entorno.Instancia.Venta, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario); string modeloImpresora = Entorno.Instancia.Impresora.Marca ?? "impresora"; // log.InfoFormat("[CmdPagarVenta] Venta Finalizada, Transaccion: {0}, Factura {1}", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1), (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)); string tirillaActual = ""; iu.PanelVentas.Tirilla.ForEach(x => { tirillaActual += Environment.NewLine; tirillaActual += String.Format("Codigo: {0}, Descripción: {1} ({4}), Cantidad: {2}, Precio: {3} ", x.Codigo, x.Descripcion, x.Cantidad, x.Subtotal, x.PrecioVentaUnidad); }); log.Info("Items tirilla:" + tirillaActual + Environment.NewLine + "Total: " + Entorno.Instancia.Venta.TotalVenta + Environment.NewLine + "Totales Impuestos: " + Entorno.Instancia.Venta.ImpuestosIncluidos.Sum(x => x.Value[2]) + Environment.NewLine + "Cant Artículos Vendidos: " + Entorno.Instancia.Venta.NumeroDeItemsVenta + Environment.NewLine); var tiempoGuardarVenta = new MetricaTemporizador("TerminarVentaFinalizada"); venta.GuardarVenta(Entorno.Instancia.Venta, ref idsAcumulados, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, ((int)TipoTransaccion.Venta).ToString(), factura, modeloImpresora, implementaImpuestoCompuesto, out respuesta); if (respuesta.Valida == false) { Telemetria.Instancia.AgregaMetrica(tiempoGuardarVenta.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)); throw new Exception(respuesta.Mensaje); } //Log a azure Telemetria.Instancia.AgregaMetrica(tiempoGuardarVenta.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)); // decimal valorCambio = Entorno.Instancia.Venta.PorPagar * -1; // Entorno.Instancia.Impresora.Imprimir(factura, true, medioPago.AbreCajon); // Entorno.Instancia.Venta.EstaAbierta = false; Entorno.Instancia.IdsAcumulados = idsAcumulados; // respuesta = new Respuesta(false); ETerminal terminal = new PTerminal().BuscarTerminalPorCodigo(Common.Config.Terminal, out respuesta); Entorno.Instancia.Terminal = terminal; // LimpiarVentaFinalizada(); // iu.PanelOperador.CodigoCliente = ""; // iu.PanelVentas.VisorCliente.Total = 0; iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0}", valorCambio.ToCustomCurrencyFormat()); try { decimal valorLimite = Entorno.Instancia.Parametros.ObtenerValorParametro <Decimal>("pdv.aviso_monto_max_en_caja"); decimal valorCaja = venta.DineroEnCaja(Entorno.Instancia.Terminal.Codigo, Entorno.Instancia.Usuario.IdUsuario, out respuesta); log.InfoFormat("[CmdPagarVenta.Ejecutar] --> Valor en caja : {0}, Valor máximo: {1}", valorCaja.ToCustomCurrencyFormat(), valorLimite.ToCustomCurrencyFormat()); if (valorCaja > valorLimite) { iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0} - Tope máximo en caja excedido", valorCambio.ToCustomCurrencyFormat()); } } catch (Exception e) { log.ErrorFormat("[CmdPagarVenta] {0}", e.Message); Telemetria.Instancia.AgregaMetrica(new Excepcion(e)); } // log.InfoFormat("[CmdPagarVenta] --> Transaccion finalizada, cambio {0}", valorCambio.ToCustomCurrencyFormat()); iu.MostrarPanelVenta(); } } } else if (this.ValorPago == -1) { Dictionary <string, string> idsAcumulados = Entorno.Instancia.IdsAcumulados; PVenta venta = new PVenta(); respuesta = new Respuesta(); // string factura = ProcesarPlantilla.Factura(Entorno.Instancia.Venta, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario); string modeloImpresora = Entorno.Instancia.Impresora.Marca ?? "impresora"; // log.InfoFormat("[CmdPagarVenta] Venta Finalizada, Transaccion: {0}, Factura {1}", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1), (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)); string tirillaActual = ""; iu.PanelVentas.Tirilla.ForEach(x => { tirillaActual += Environment.NewLine; tirillaActual += String.Format("Codigo: {0}, Descripción: {1} ({4}), Cantidad: {2}, Precio: {3} ", x.Codigo, x.Descripcion, x.Cantidad, x.Subtotal, x.PrecioVentaUnidad); }); log.Info("Items tirilla:" + tirillaActual + Environment.NewLine + "Total: " + Entorno.Instancia.Venta.TotalVenta + Environment.NewLine + "Totales Impuestos: " + Entorno.Instancia.Venta.ImpuestosIncluidos.Sum(x => x.Value[2]) + Environment.NewLine + "Cant Artículos Vendidos: " + Entorno.Instancia.Venta.NumeroDeItemsVenta + Environment.NewLine); var tiempoGuardarVenta = new MetricaTemporizador("TerminarVentaFinalizada"); venta.GuardarVenta(Entorno.Instancia.Venta, ref idsAcumulados, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, ((int)TipoTransaccion.Venta).ToString(), factura, modeloImpresora, implementaImpuestoCompuesto, out respuesta); if (respuesta.Valida == false) { Telemetria.Instancia.AgregaMetrica(tiempoGuardarVenta.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)); throw new Exception(respuesta.Mensaje); } //Log a azure Telemetria.Instancia.AgregaMetrica(tiempoGuardarVenta.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)); // Entorno.Instancia.Impresora.Imprimir(factura, true, true); if (!string.IsNullOrEmpty(respuesta.Mensaje)) { Entorno.Vista.PanelOperador.MensajeOperador = respuesta.Mensaje; log.ErrorFormat("[CmdPagarVenta]: {0}", respuesta.Mensaje); } Entorno.Instancia.IdsAcumulados = idsAcumulados; // Entorno.Instancia.Venta.EstaAbierta = false; // respuesta = new Respuesta(false); ETerminal terminal = new PTerminal().BuscarTerminalPorCodigo(Common.Config.Terminal, out respuesta); Entorno.Instancia.Terminal = terminal; // LimpiarVentaFinalizada(); // decimal valorCambio = Entorno.Instancia.Venta.PorPagar * -1; iu.PanelVentas.VisorCliente.Total = 0; iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0}", valorCambio.ToCustomCurrencyFormat()); try { decimal valorLimite = Entorno.Instancia.Parametros.ObtenerValorParametro <Decimal>("pdv.aviso_monto_max_en_caja"); decimal valorCaja = venta.DineroEnCaja(Entorno.Instancia.Terminal.Codigo, Entorno.Instancia.Usuario.IdUsuario, out respuesta); log.InfoFormat("[CmdPagarVenta.Ejecutar] --> Valor en caja : {0}, Valor máximo: {1}", valorCaja.ToCustomCurrencyFormat(), valorLimite.ToCustomCurrencyFormat()); if (valorCaja > valorLimite) { iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0} - Tope máximo en caja excedido", valorCambio.ToCustomCurrencyFormat()); } } catch (Exception e) { log.ErrorFormat("[CmdPagarVenta] {0}", e.Message); Telemetria.Instancia.AgregaMetrica(new Excepcion(e)); } log.InfoFormat("[CmdPagarVenta] --> Transaccion finalizada, cambio {0}", valorCambio.ToCustomCurrencyFormat()); // iu.PanelOperador.CodigoCliente = ""; iu.MostrarPanelVenta(); } if (respuesta.Valida) { iu.MostrarDisplayCliente(DisplayCliente.FinVenta); } } catch (Exception ex) { // Telemetria.Instancia.AgregaMetrica(new Excepcion(ex)); log.ErrorFormat("[CmdPagarVenta] {0}", ex.Message); // iu.PanelOperador.MensajeOperador = ex.Message; EVenta copiaVenta = JsonConvert.DeserializeObject <EVenta>(jsonCopiaVenta); Entorno.Instancia.Venta = copiaVenta; Entorno.Instancia.Venta.ImpuestosIncluidos = copiaImpuestosIncluidos; // Solicitudes.SolicitudPagarVenta solVolver = new Solicitudes.SolicitudPagarVenta(Enums.Solicitud.Pagar, Entorno.Instancia.Vista.PanelPago.VisorEntrada); Reactor.Instancia.Procesar(solVolver); } }
public override void Ejecutar() { if (Solicitud.TipoSolicitud == Enums.Solicitud.TerminarRecogida) { // PRecogida pRecogida = new PRecogida(); Dictionary <string, string> idsAcumulados = Entorno.Instancia.IdsAcumulados; EMedioPago medioPago = new PMediosPago().GetAllMediosPago().MedioPago("1"); // decimal totalRecogida = Entorno.Instancia.Recogida.listRecogidas.Sum(); //Entorno.Instancia.Recogida.AgregarValor(totalRecogida); if (totalRecogida <= 0) { throw new Exception("El valor no puede ser vacío o igual a cero."); } // Terminar Recogida // Generar Factura Respuesta respuesta = new Respuesta(); string factura = ProcesarPlantilla.Recogidas(Entorno.Instancia.Recogida); string modeloImpresora = Entorno.Instancia.Impresora.Marca ?? "impresora"; var tiempoGuardarRecogida = new MetricaTemporizador("RecogidaAgregada"); pRecogida.GuardarRecogida(Entorno.Instancia.Recogida, ref idsAcumulados, ((int)TipoTransaccion.Recogida).ToString(), Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, medioPago, factura ?? "contenido", modeloImpresora, out respuesta); // obtener id_venta de la recogida realizada string idVentaRecogida = respuesta.Mensaje; if (respuesta.Valida == false) { Telemetria.Instancia.AgregaMetrica(tiempoGuardarRecogida.Para().AgregarPropiedad("Exitoso", false).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Valor", (Entorno.Instancia.Prestamo.Valor)).AgregarPropiedad("Error", respuesta.Mensaje)); } else { Telemetria.Instancia.AgregaMetrica(tiempoGuardarRecogida.Para().AgregarPropiedad("Exitoso", true).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Valor", (Entorno.Instancia.Recogida.Valor)).AgregarPropiedad("CodigoRecogida", (Entorno.Instancia.Recogida.CodigoRecogida.Codigo))); log.Info("[CmdTerminarRecogida] Agregar Recogida: " + totalRecogida); respuesta = new Respuesta(false); ETerminal terminal = new PTerminal().BuscarTerminalPorCodigo(Common.Config.Terminal, out respuesta); if (respuesta.Valida == true) { if (Entorno.Instancia.Usuario.UsuarioSupervisor != null) { PIntervencion pInterv = new PIntervencion(); EIntervencion eInterv = new EIntervencion(); eInterv.id_venta = idVentaRecogida; eInterv.claveSupervisor = Entorno.Instancia.Usuario.UsuarioSupervisor.ClaveSupervisor; eInterv.motivo = "Intervención recogida"; eInterv.nro_transac = Convert.ToInt32(Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1); pInterv.GuardarIntervencion(eInterv, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, out respuesta); } Entorno.Instancia.Terminal = terminal; Entorno.Instancia.IdsAcumulados = idsAcumulados; Entorno.Instancia.Recogida = null; Entorno.Instancia.Usuario.UsuarioSupervisor = null; iu.PanelVentas.VisorMensaje = "Recogida registrada correctamente."; iu.PanelVentas.VisorEntrada = string.Empty; if (Config.ViewMode == InternalSettings.ModoTouch) { Entorno.Instancia.Vista.PanelVentas.LimpiarOperacion(); Entorno.Instancia.Vista.ModalRecogidas.CodigoRecogida = string.Empty; } else { Entorno.Instancia.Vista.PanelRecogidas.VisorEntrada = string.Empty; } log.Info("[CmdTerminarRecogida] Recogida registrada correctamente."); // Imprimir Entorno.Instancia.Impresora.Imprimir(factura, cortarPapel: true, abrirCajon: false); log.Info("[CmdTerminarRecogida] Imprimir Operación: " + factura); //ePrestamo = null; Solicitudes.SolicitudPanelVenta volver = new Solicitudes.SolicitudPanelVenta(Enums.Solicitud.Vender); Reactor.Instancia.Procesar(volver); } } } else if (Solicitud.TipoSolicitud == Enums.Solicitud.TerminarPrestamo) { } }