public static ETipoAjuste InstanciarDesde(DataRow registro) { if (registro == null) { throw new ApplicationException("Registro nulo o contiene campos nulos."); } var a = new ETipoAjuste( (string)registro["id_ajuste_tipo"], (byte)registro["calcular_costo_venta"], (string)registro["cod_ajuste_tipo"], (string)registro["descripcion"], (byte)registro["editar_costo_venta"], (byte)registro["mostrar_costo_venta"], (string)registro["signo"], registro["activo"] != DBNull.Value ? (byte)registro["activo"] : Convert.ToByte(1) ); return(a); }
// TODO : este requiere manejo transaccional!. /// <summary> /// /// </summary> /// <param name="ajuste"></param> /// <param name="terminal"></param> /// <param name="usuario"></param> /// <param name="localidad"></param> /// <param name="numero"></param> /// <param name="tipo"></param> /// <param name="contenido"></param> /// <param name="modeloImpresora"></param> /// <param name="respuesta"></param> public void GuardarAjuste(EAjuste ajuste, ETerminal terminal, EUsuario usuario, ELocalidad localidad, ETipoAjuste tipo, string contenido, string modeloImpresora, out Respuesta respuesta) { respuesta = new Respuesta(false); //1. Creamos el encabezado de la venta. string idAjuste = Guid.NewGuid().ToString(); RAjuste rajuste = new RAjuste(); RVenta rventa = new RVenta(); try { using (TransactionScope scope = new TransactionScope()) { var reg = rajuste.GetNumeroAjuste(); // int numero = reg.Field<int>("nro_ajuste"); int numero = (int)reg["nro_ajuste"]; if (rajuste.CrearAjuste(idAjuste, tipo.CalcularCostoVenta, "00", localidad.Codigo, ajuste.Estado, localidad.Codigo, numero + 1, tipo.Signo, tipo.Id, tipo.Codigo, 0, ajuste.TotalVenta, usuario.IdUsuario, ajuste.TotalImpuesto()) == 1) { //2. Creamos cada detalle de la venta. string idAjusteDetalle = Guid.NewGuid().ToString(); var tirilla = ajuste.CopiaTirilla; foreach (EItemVenta detalle in tirilla) { respuesta.Valida = true; rajuste.CrearAjusteDetalle(idAjusteDetalle, idAjuste, detalle.Articulo.Id, detalle.Cantidad, "00", detalle.Articulo.CodigoImpresion, 0, numero + 1, detalle.Articulo.PrecioVenta1, detalle.Impuesto, detalle.Articulo.Impuesto1); idAjusteDetalle = Guid.NewGuid().ToString(); } rventa.CrearCopiaImpresion("00", terminal.Localidad.Codigo, terminal.Codigo, ((int)Enums.TipoTransaccion.Ajuste).ToString(), usuario.IdUsuario, contenido, terminal.Localidad.Codigo, modeloImpresora, 0, numero + 1, terminal.Prefijo, terminal.Codigo, ((int)Enums.TipoTransaccion.Ajuste).ToString(), usuario.IdUsuario); } else { throw new Exception("[GuardarAjuste]: Transaccion no pudo ser guardada."); } scope.Complete(); } } catch (SqlException e) { if (e.Number == -2 || e.Number == 121) { respuesta.Valida = false; respuesta.Mensaje = "Se perdió la conexión con el servidor."; log.Error("[GuardarAjuste]: No pudo ser guardada la transaccion: " + e.Message); } else { respuesta.Valida = false; respuesta.Mensaje = "Hubo un problema al momento de guardar la transaccion. Por favor contacte al administrador del sistema."; log.Error("[GuardarAjuste]: No pudo ser guardada la transaccion: " + e.Message); } Telemetria.Instancia.AgregaMetrica(new Excepcion(e)); } catch (Exception ex) { respuesta.Valida = false; respuesta.Mensaje = "[GuardarAjuste]: No pudo ser guardado el ajuste."; log.Error("[GuardarAjuste]: No pudo ser guardado el ajuste: " + ex.Message); Telemetria.Instancia.AgregaMetrica(new Excepcion(ex)); } }
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; } } }