示例#1
0
        public ECaja obtenerEcaja(ETerminal terminal, EUsuario usuario, EMediosPago mediosPago, out Respuesta respuesta)
        {
            ECaja caja = null;

            respuesta = new Respuesta(false);

            RArqueo rArqueo = new RArqueo();
            var     arqueo  = rArqueo.ObtenerArqueo(terminal.Codigo, usuario.IdUsuario);

            if (arqueo.IsNullOrEmptyTable())
            {
                respuesta.Mensaje = "Codigos de Recogidas no encontrados.";
                respuesta.Valida  = false;
            }
            else
            {
                Dictionary <EMedioPago, decimal> dictionary = new Dictionary <EMedioPago, decimal>();

                foreach (DataRow dr in arqueo.Rows)
                {
                    var mediopaog = (string)dr["id_medio_pago"];
                    dictionary.Add(mediosPago.MedioPago(mediopaog), (decimal)dr["total"]);
                }

                caja             = new ECaja(dictionary);
                respuesta.Valida = true;
            }

            return(caja);
        }
示例#2
0
        public Dictionary <string, string> IdsAcumulados(EUsuario usuario, ETerminal terminal)
        {
            var       repositorio = new RVenta();
            DataTable registros   = repositorio.IdRegistroVenta(terminal.Codigo, usuario.IdUsuario);

            if (registros.IsNullOrEmptyTable())
            {
                return(null);
            }
            else
            {
                Dictionary <string, string> acumulados = new Dictionary <string, string>();
                acumulados.Add("idRegistroVenta", (string)registros.Rows[0]["id_registro_venta"]);
                //System.Diagnostics.Debug.WriteLine(registros.Rows[0].Field<string>("id_registro_venta"));
                //System.Diagnostics.Debug.WriteLine(registros.Rows[0].Field<string>("id_tot_med_pago"));
                foreach (DataRow registro in registros.Rows)
                {
                    if ((string)registro["id_medio"] != null)
                    {
                        System.Diagnostics.Debug.WriteLine((string)registro["id_medio"]);
                        acumulados.Add((string)registro["id_medio"], (string)registro["id_tot_med_pago"]);
                    }
                }
                return(acumulados);
            }
        }
示例#3
0
        public override void Ejecutar()
        {
            PVenta    pventa    = new PVenta();
            Respuesta respuesta = new Respuesta();
            EUsuario  usuario   = Entorno.Instancia.Usuario;
            ETerminal terminal  = Entorno.Instancia.Terminal;
            string    ultima    = pventa.ImprimirUltima(terminal.Codigo, usuario.IdUsuario, out respuesta);

            if (string.IsNullOrEmpty(ultima))
            {
                Entorno.Vista.PanelVentas.VisorMensaje = "No se pudo imprimir la última factura";
            }
            else
            {
                // Imprimir
                Entorno.Instancia.Impresora.Imprimir(ultima, cortarPapel: true, abrirCajon: false);

                Telemetria.Instancia.AgregaMetrica(new Evento("ImprimirUltimaFactura").AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (ultima)));

                log.InfoFormat("[ImprimirUltima] Ultima factura impresa. Factura: {0}", ultima);
            }

            //
            if (Config.ViewMode == InternalSettings.ModoTouch)
            {
                Entorno.Instancia.Vista.PanelVentas.LimpiarOperacion();
            }
        }
示例#4
0
 void Expect(ETerminal n)
 {
     if (la.kind == (int)n)
     {
         Get();
     }
     else
     {
         SyntaxError((int)n);
     }
 }
示例#5
0
 void ExpectWeak(ETerminal n, int follow)
 {
     if (la.kind == (int)n)
     {
         Get();
     }
     else
     {
         SyntaxError((int)n);
         while (!StartOf(follow))
         {
             Get();
         }
     }
 }
示例#6
0
        public static ETerminal InstanciarDesde(DataRow registro)
        {
            if (registro == null)
            {
                throw new ApplicationException("Registro nulo o contiene campos nulos.");
            }
            var a = new ETerminal(
                (string)registro["cod_terminal"],
                (string)registro["prefijo"],
                (long)registro["facturas_aviso"],
                (string)registro["nro_autorizacion"],
                (long)registro["ultima_factura"],
                (long)registro["nro_ultima_transaccion"],
                (DateTime)registro["fecha_autorizacion"],
                (int)registro["rango_alarma_nro_fac"],
                (long)registro["primera_factura"],
                (long)registro["factura_final"],
                new ELocalidad((string)registro["cod_localidad"], (string)registro["descrip"], (string)registro["ciudad"], (string)registro["dir1"]));

            return(a);
        }
示例#7
0
        public ETerminal BuscarTerminalPorCodigo(string cod, out Respuesta respuesta)
        {
            var       repositorio = new RTerminal();
            ETerminal terminal    = null;

            respuesta = new Respuesta(false);
            var registro = repositorio.BuscarTerminalPorCodigo(cod);

            if (registro != null)
            {
                terminal         = TerminalUtil.InstanciarDesde(registro);
                respuesta.Valida = true;
            }
            else
            {
                respuesta.Valida  = false;
                respuesta.Mensaje = "Terminal no encontrada.";
                log.Info("[ETerminal]: Terminal no encontrada");
                //throw new Exception("Terminal no encontrada");
            }
            return(terminal);
        }
示例#8
0
        // 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));
            }
        }
示例#9
0
        public void GuardarRecogida(ERecogida recogida, ref Dictionary <string, string> IdsAcumulados, string tipo, ETerminal terminal, EUsuario usuario, EMedioPago medioPago, string contenido, string modeloImpresora, out Respuesta respuesta)
        {
            //1. Creamos el encabezado de la venta.
            string    idVenta   = Guid.NewGuid().ToString();
            RRecogida rRecogida = new RRecogida();

            respuesta = new Respuesta(false);

            try
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    if (rRecogida.CrearRecogida(idVenta, recogida.Valor, terminal.Codigo, tipo, 1, terminal.NumeroUltimaTransaccion + 1, terminal.Prefijo, usuario.IdUsuario) == 1)
                    {
                        rRecogida.CrearVentaRecogida(recogida.CodigoRecogida.Codigo, recogida.CodigoRecogida.Descripcion, idVenta);

                        //3. Creamos totales de venta(registro_venta).
                        if (IdsAcumulados == null)
                        {
                            IdsAcumulados = new Dictionary <string, string>();
                            IdsAcumulados.Add("idRegistroVenta", Guid.NewGuid().ToString());
                            //Creamos el registro venta
                            rRecogida.CrearRegistroVenta(IdsAcumulados["idRegistroVenta"], terminal.Codigo, usuario.IdUsuario);
                        }
                        //Actualizo registro venta
                        rRecogida.ActualizarRegistroVenta(IdsAcumulados["idRegistroVenta"], recogida.Valor);

                        //4. Creamos el detalle de los medios de pago.
                        //List<EPago> pagos = re // prestamo.Pagos;

                        rRecogida.CrearMedioPago(medioPago.Codigo, terminal.Codigo, (long)terminal.NumeroUltimaTransaccion + 1, recogida.Valor, idVenta);

                        //Actualizamos el terminal
                        rRecogida.ActualizarTerminal(terminal.Codigo, (long)terminal.NumeroUltimaFactura, (long)terminal.NumeroUltimaTransaccion + 1);
                        rVenta.ActualizarTerminal(terminal.Codigo, (long)terminal.NumeroUltimaFactura, (long)terminal.NumeroUltimaTransaccion + 1);

                        rVenta.CrearCopiaImpresion("00", terminal.Localidad.Codigo, terminal.Codigo, tipo, usuario.IdUsuario, contenido, terminal.Localidad.Codigo, modeloImpresora, (long)terminal.NumeroUltimaFactura, (int)terminal.NumeroUltimaTransaccion + 1, terminal.Prefijo, terminal.Codigo, tipo, usuario.IdUsuario);
                        respuesta.Valida  = true;
                        respuesta.Mensaje = idVenta;
                    }
                    else
                    {
                        throw new Exception("[GuardarRecogida]: 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("[GuardarRecogida]: 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("[Guardarrecogida]: No pudo ser guardada la venta: " + e.Message);
                }
                Telemetria.Instancia.AgregaMetrica(new Excepcion(e));
            }
            catch (Exception ex)
            {
                respuesta.Documentar(false, " No pudo ser guardada la recogida.");
                log.Error("[GuardarRecogida]: No pudo ser guardada la recogida. " + ex.Message);
                Telemetria.Instancia.AgregaMetrica(new Excepcion(ex));
            }
        }
示例#10
0
        public void GuardarArqueo(ECaja caja, ref Dictionary <string, string> IdsAcumulados, ETerminal terminal, EUsuario usuario, string tipo, string contenido, string modeloImpresora, out Respuesta respuesta)
        {
            //1. Creamos el encabezado de la venta.
            string  idArqueo = Guid.NewGuid().ToString();
            RArqueo rArqueo  = new RArqueo();

            respuesta = new Respuesta(false);

            try
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    if (rArqueo.CrearArquero(idArqueo, terminal.Codigo, tipo, 1, (long)terminal.NumeroUltimaTransaccion + 1, terminal.Prefijo, usuario.IdUsuario) == 1)
                    {
                        //3. Creamos totales de venta(registro_venta).
                        if (IdsAcumulados == null)
                        {
                            IdsAcumulados = new Dictionary <string, string>();
                            IdsAcumulados.Add("idRegistroVenta", Guid.NewGuid().ToString());
                            //Creamos el registro venta
                            rArqueo.CrearRegistroVenta(IdsAcumulados["idRegistroVenta"], terminal.Codigo, usuario.IdUsuario);
                        }
                        //Actualizo registro venta
                        rArqueo.ActualizarRegistroArqueo(IdsAcumulados["idRegistroVenta"]);

                        Dictionary <EMedioPago, List <decimal> > arqueos = caja.Arqueo;

                        foreach (var arqueo in arqueos)
                        {
                            rArqueo.GuardarArqueo(arqueo.Key.Codigo, (int)terminal.NumeroUltimaTransaccion + 1, arqueo.Value[1], arqueo.Value[2], arqueo.Value[0], idArqueo);
                        }
                        rVenta.ActualizarTerminal(terminal.Codigo, (long)terminal.NumeroUltimaFactura + 1, (long)terminal.NumeroUltimaTransaccion + 1);
                        //var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(contenido);
                        //contenido = System.Convert.ToBase64String(plainTextBytes);
                        rVenta.CrearCopiaImpresion("00", terminal.Localidad.Codigo, terminal.Codigo, tipo, usuario.IdUsuario, contenido, terminal.Localidad.Codigo, modeloImpresora, (long)terminal.NumeroUltimaFactura + 1, (int)terminal.NumeroUltimaTransaccion + 1, terminal.Prefijo, terminal.Codigo, tipo, usuario.IdUsuario);
                        respuesta.Valida = true;
                    }
                    else
                    {
                        throw new Exception("[GuardarArqueo]: 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("[GuardarArqueo]: 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("[GuardarArqueo]: No pudo ser guardada la transaccion: " + e.Message);
                }
                Telemetria.Instancia.AgregaMetrica(new Excepcion(e));
            }
            catch (Exception ex)
            {
                respuesta.Documentar(false, "No pudo ser guardada el arqueo.");
                log.Error("[GuardarArqueo]: No pudo ser guardada el arqueo. " + ex.Message);
                Telemetria.Instancia.AgregaMetrica(new Excepcion(ex));
            }
        }
示例#11
0
        public void GuardarVentaEspecial(EFacturaVentaEspecialSinMedioPago venta, ref Dictionary <string, string> IdsAcumulados, ETerminal terminal, EUsuario usuario, String tipo, string contenido, string modeloImpresora, bool implementaImpuestoCompuesto, out Respuesta respuesta)
        {
            //venta.DescontarCambio();
            respuesta = new Respuesta(false);
            //1. Creamos el encabezado de la venta.
            string         idVenta        = Guid.NewGuid().ToString();
            RVenta         rventa         = new RVenta();
            RVentaEspecial rventaespecial = new RVentaEspecial();

            try
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    if (rventa.CrearVenta(idVenta, venta.BrutoNegativo, venta.BrutoPositivo, terminal.Codigo, tipo, 1, (long)terminal.NumeroUltimaFactura + 1, (long)terminal.NumeroUltimaTransaccion + 1, terminal.Prefijo, usuario.IdUsuario, 0) == 1)
                    {
                        //2. Creamos cada detalle de la venta.
                        int consecutivo = 0;
                        var tirilla     = venta.tirilla;
                        foreach (EItemVenta detalle in tirilla)
                        {
                            var idVentasArticulo = Guid.NewGuid();
                            consecutivo += 1;
                            rventa.CrearDetalleVenta(idVentasArticulo, detalle.Articulo.Id, detalle.Articulo.CodigoImpresion, terminal.Codigo, consecutivo, detalle.Impuesto,
                                                     (long)terminal.NumeroUltimaTransaccion + 1, detalle.Articulo.Impuesto1, detalle.Peso, usuario.IdUsuario, detalle.Valor, idVenta, detalle.Cantidad, detalle.CodigoLeido);
                            if (implementaImpuestoCompuesto)
                            {
                                rventa.ActualizarVentasArticulo(idVentasArticulo);
                                foreach (KeyValuePair <EImpuestosArticulo, decimal> entry in detalle.Impuestos)
                                {
                                    rventa.CrearVentasArticuloImpuesto(idVentasArticulo, entry.Key.Descripcion, entry.Key.Identificador, entry.Key.Porcentaje, entry.Key.Valor, entry.Key.TipoImpuesto, entry.Value, entry.Key.Id);
                                }
                            }
                        }

                        //3. Creamos totales de venta(registro_venta).
                        if (IdsAcumulados == null)
                        {
                            IdsAcumulados = new Dictionary <string, string>();
                            IdsAcumulados.Add("idRegistroVenta", Guid.NewGuid().ToString());
                            //Creamos el registro venta
                            rventa.CrearRegistroVenta(IdsAcumulados["idRegistroVenta"], terminal.Codigo, usuario.IdUsuario);
                        }
                        //Actualizo registro venta
                        //rventa.ActualizarRegistroVenta(IdsAcumulados["idRegistroVenta"], venta.BrutoPositivo, venta.BrutoNegativo, venta.NumeroDeItemsVenta, venta.NumeroDeItemsNegativo, venta.TotalVenta);
                        rventaespecial.ActualizarRegistroVentaEspecial(venta.BrutoNegativo, venta.BrutoPositivo, venta.NumeroDeItemsVenta, venta.NumeroDeItemsNegativo, 1, venta.BrutoNegativo, venta.TotalVenta, 0, 0, IdsAcumulados["idRegistroVenta"]);
                        rventaespecial.AsociarTipoVentaConEncabezado(venta.TipoVentaEspecial.Id, idVenta);

                        if (venta.Cliente != null)
                        {
                            rventa.CrearVentasCliente(venta.Cliente.Id, idVenta);
                        }
                        rventa.ActualizarTerminal(terminal.Codigo, (long)terminal.NumeroUltimaFactura + 1, (long)terminal.NumeroUltimaTransaccion + 1);
                        var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(contenido);
                        //contenido = System.Convert.ToBase64String(plainTextBytes);
                        rventa.CrearCopiaImpresion("00", terminal.Localidad.Codigo, terminal.Codigo, tipo, usuario.IdUsuario, contenido, terminal.Localidad.Codigo, modeloImpresora, (long)terminal.NumeroUltimaFactura + 1, (int)terminal.NumeroUltimaTransaccion + 1, terminal.Prefijo, terminal.Codigo, tipo, usuario.IdUsuario);
                        respuesta.Valida = true;
                    }
                    else
                    {
                        throw new Exception("[GuardarVenta]: Transaccion no pudo ser guardada.");
                    }
                    scope.Complete();
                }
            }
            catch (TransactionAbortedException ex)
            {
                respuesta.Valida  = false;
                respuesta.Mensaje = "[GuardarVentaEspecial]: No pudo ser guardada la venta.";
                log.Error("[GuardarVentaEspecial]: No pudo ser guardada la venta. " + ex.Message);
                Telemetria.Instancia.AgregaMetrica(new Excepcion(ex));
            }
        }
示例#12
0
 private bool IsDependent(IntermediateCode codei, IntermediateCode codej)
 {
     if (codei is ICAssignment && codej is ICAssignment)
     {
         ICAssignment assignmenti = (ICAssignment)codei, assignmentj = (ICAssignment)codej;
         if (ETerminal.IsEqual(assignmenti.result, assignmentj.result) ||
             ETerminal.IsEqual(assignmentj.result, assignmenti.operand1) ||
             ETerminal.IsEqual(assignmentj.result, assignmenti.operand2) ||
             ETerminal.IsEqual(assignmenti.result, assignmentj.operand1) ||
             ETerminal.IsEqual(assignmenti.result, assignmentj.operand2))
         {
             return(true);
         }
         return(false);
     }
     else if (codei is ICAssignment && codej is ICWhile)
     {
         ICAssignment assignmenti = (ICAssignment)codei;
         ICWhile      whilej      = (ICWhile)codej;
         if (ETerminal.IsEqual(assignmenti.result, whilej.condition))
         {
             return(true);
         }
         foreach (var entry in whilej.conditionCodes.GetCodes())
         {
             if (IsDependent(assignmenti, entry))
             {
                 return(true);
             }
         }
         foreach (var entry in whilej.codes.GetCodes())
         {
             if (IsDependent(assignmenti, entry))
             {
                 return(true);
             }
         }
         return(false);
     }
     else if (codei is ICWhile && codej is ICAssignment)
     {
         ICWhile      whilei      = (ICWhile)codei;
         ICAssignment assignmentj = (ICAssignment)codej;
         if (ETerminal.IsEqual(assignmentj.result, whilei.condition))
         {
             return(true);
         }
         foreach (var entry in whilei.conditionCodes.GetCodes())
         {
             if (IsDependent(entry, assignmentj))
             {
                 return(true);
             }
         }
         foreach (var entry in whilei.codes.GetCodes())
         {
             if (IsDependent(entry, assignmentj))
             {
                 return(true);
             }
         }
         return(false);
     }
     else if (codei is ICWhile && codej is ICWhile)
     {
         ICWhile whilei = (ICWhile)codei, whilej = (ICWhile)codej;
         List <IntermediateCode>
         codesi     = new List <IntermediateCode>(),
             codesj = new List <IntermediateCode>();
         codesi.AddRange(whilei.conditionCodes.GetCodes());
         codesi.AddRange(whilei.codes.GetCodes());
         codesj.AddRange(whilej.conditionCodes.GetCodes());
         codesj.AddRange(whilej.codes.GetCodes());
         foreach (var entryi in codesi)
         {
             foreach (var entryj in codesj)
             {
                 if (IsDependent(entryi, entryj))
                 {
                     return(true);
                 }
             }
         }
         return(false);
     }
     else if (codei is ICAssignment && codej is ICIfElse)
     {
         ICAssignment assignmenti = (ICAssignment)codei;
         ICIfElse     ifelsej     = (ICIfElse)codej;
         if (ETerminal.IsEqual(assignmenti.result, ifelsej.condition))
         {
             return(true);
         }
         List <IntermediateCode> codesj = new List <IntermediateCode>();
         codesj.AddRange(ifelsej.conditionCodes.GetCodes());
         codesj.AddRange(ifelsej.codesIf.GetCodes());
         codesj.AddRange(ifelsej.codesElse.GetCodes());
         foreach (var entry in codesj)
         {
             if (IsDependent(assignmenti, entry))
             {
                 return(true);
             }
         }
         return(false);
     }
     else if (codei is ICIfElse && codej is ICAssignment)
     {
         ICIfElse     ifelsei     = (ICIfElse)codei;
         ICAssignment assignmentj = (ICAssignment)codej;
         if (ETerminal.IsEqual(assignmentj.result, ifelsei.condition))
         {
             return(true);
         }
         List <IntermediateCode> codesi = new List <IntermediateCode>();
         codesi.AddRange(ifelsei.conditionCodes.GetCodes());
         codesi.AddRange(ifelsei.codesIf.GetCodes());
         codesi.AddRange(ifelsei.codesElse.GetCodes());
         foreach (var entry in codesi)
         {
             if (IsDependent(entry, assignmentj))
             {
                 return(true);
             }
         }
         return(false);
     }
     else if (codei is ICWhile && codej is ICIfElse)
     {
         ICWhile  whilei  = (ICWhile)codei;
         ICIfElse ifelsej = (ICIfElse)codej;
         List <IntermediateCode>
         codesi     = new List <IntermediateCode>(),
             codesj = new List <IntermediateCode>();
         codesi.AddRange(whilei.conditionCodes.GetCodes());
         codesi.AddRange(whilei.codes.GetCodes());
         codesj.AddRange(ifelsej.conditionCodes.GetCodes());
         codesj.AddRange(ifelsej.codesIf.GetCodes());
         codesj.AddRange(ifelsej.codesElse.GetCodes());
         foreach (var entryi in codesi)
         {
             foreach (var entryj in codesj)
             {
                 if (IsDependent(entryi, entryj))
                 {
                     return(true);
                 }
             }
         }
         return(false);
     }
     else if (codei is ICIfElse && codej is ICWhile)
     {
         ICIfElse ifelsei = (ICIfElse)codei;
         ICWhile  whilej  = (ICWhile)codej;
         List <IntermediateCode>
         codesi     = new List <IntermediateCode>(),
             codesj = new List <IntermediateCode>();
         codesi.AddRange(ifelsei.conditionCodes.GetCodes());
         codesi.AddRange(ifelsei.codesIf.GetCodes());
         codesi.AddRange(ifelsei.codesElse.GetCodes());
         codesj.AddRange(whilej.conditionCodes.GetCodes());
         codesj.AddRange(whilej.codes.GetCodes());
         foreach (var entryi in codesi)
         {
             foreach (var entryj in codesj)
             {
                 if (IsDependent(entryi, entryj))
                 {
                     return(true);
                 }
             }
         }
         return(false);
     }
     else
     {
         ICIfElse ifelsei = (ICIfElse)codei;
         ICIfElse ifelsej = (ICIfElse)codej;
         List <IntermediateCode>
         codesi     = new List <IntermediateCode>(),
             codesj = new List <IntermediateCode>();
         codesi.AddRange(ifelsei.conditionCodes.GetCodes());
         codesi.AddRange(ifelsei.codesIf.GetCodes());
         codesi.AddRange(ifelsei.codesElse.GetCodes());
         codesj.AddRange(ifelsej.conditionCodes.GetCodes());
         codesj.AddRange(ifelsej.codesIf.GetCodes());
         codesj.AddRange(ifelsej.codesElse.GetCodes());
         foreach (var entryi in codesi)
         {
             foreach (var entryj in codesj)
             {
                 if (IsDependent(entryi, entryj))
                 {
                     return(true);
                 }
             }
         }
         return(false);
     }
 }
示例#13
0
        // TODO : este requiere manejo transaccional!.
        public void GuardarDevolucion(EDevolucion devolucion, ref Dictionary <string, string> IdsAcumulados, ETerminal terminal, EUsuario usuario, string tipo, string contenido, string modeloImpresora, bool implementaImpuestoCompuesto, out Respuesta respuesta)
        {
            //

            //devolucion.DescontarCambio();
            //1. Creamos el encabezado de la venta.
            string idVenta = Guid.NewGuid().ToString();
            RVenta rventa  = new RVenta();

            respuesta = new Respuesta(false);
            try
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    if (rventa.CrearVenta(idVenta, devolucion.BrutoNegativo, devolucion.BrutoPositivo, terminal.Codigo, tipo, 1, (long)terminal.NumeroUltimaFactura + 1,
                                          (long)terminal.NumeroUltimaTransaccion + 1, terminal.Prefijo, usuario.IdUsuario, 0) == 1)
                    {
                        //2. Creamos cada detalle de la venta.
                        int consecutivo = 0;
                        var tirilla     = devolucion.tirilla;
                        foreach (EItemVenta detalle in tirilla)
                        {
                            var idVentasArticulo = Guid.NewGuid();
                            consecutivo += 1;
                            rventa.CrearDetalleVenta(idVentasArticulo, detalle.Articulo.Id, detalle.Articulo.CodigoImpresion, terminal.Codigo, consecutivo, detalle.Impuesto,
                                                     (long)terminal.NumeroUltimaTransaccion + 1, detalle.Articulo.Impuesto1, detalle.Peso, usuario.IdUsuario, detalle.Valor, idVenta, detalle.Cantidad, detalle.CodigoLeido);
                            if (implementaImpuestoCompuesto)
                            {
                                rventa.ActualizarVentasArticulo(idVentasArticulo);
                                foreach (KeyValuePair <EImpuestosArticulo, decimal> entry in detalle.Impuestos)
                                {
                                    rventa.CrearVentasArticuloImpuesto(idVentasArticulo, entry.Key.Descripcion, entry.Key.Identificador, entry.Key.Porcentaje, entry.Key.Valor, entry.Key.TipoImpuesto, entry.Value, entry.Key.Id);
                                }
                            }
                        }

                        //3. Creamos totales de venta(registro_venta).
                        if (IdsAcumulados == null)
                        {
                            IdsAcumulados = new Dictionary <string, string>();
                            IdsAcumulados.Add("idRegistroVenta", Guid.NewGuid().ToString());
                            //Creamos el registro venta
                            rventa.CrearRegistroVenta(IdsAcumulados["idRegistroVenta"], terminal.Codigo, usuario.IdUsuario);
                        }
                        //Actualizo registro venta
                        rventa.ActualizarRegistroVenta(IdsAcumulados["idRegistroVenta"], devolucion.BrutoPositivo, devolucion.BrutoNegativo, devolucion.NumeroDeItemsVenta, 0, devolucion.TotalVenta, 1, devolucion.TotalVenta, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

                        //4. Creamos el detalle de los medios de pago.
                        consecutivo = 1;
                        rventa.CrearMedioPago("1", terminal.Codigo, consecutivo, (long)terminal.NumeroUltimaTransaccion + 1, devolucion.TotalVenta, idVenta, 0, "00", "00", 0);

                        //5. Creamos totales de medios de pago por cada medio de pago.
                        if (!IdsAcumulados.ContainsKey("1"))
                        {
                            IdsAcumulados.Add("1", Guid.NewGuid().ToString());
                            rventa.CrearTotalesMedioPago(IdsAcumulados["1"], IdsAcumulados["idRegistroVenta"], "1");
                        }

                        //Actualizamos el medio de pago
                        rventa.ActualizarTotalesMedioPago(IdsAcumulados["1"], devolucion.TotalVenta);
                        if (devolucion.Cliente != null)
                        {
                            rventa.CrearVentasCliente(devolucion.Cliente.Id, idVenta);
                        }
                        rventa.ActualizarTerminal(terminal.Codigo, (long)terminal.NumeroUltimaFactura + 1, (long)terminal.NumeroUltimaTransaccion + 1);
                        //var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(contenido);
                        //contenido = System.Convert.ToBase64String(plainTextBytes);
                        rventa.CrearCopiaImpresion("00", terminal.Localidad.Codigo, terminal.Codigo, tipo, usuario.IdUsuario, contenido, terminal.Localidad.Codigo, modeloImpresora, (long)terminal.NumeroUltimaFactura + 1, (int)terminal.NumeroUltimaTransaccion + 1, terminal.Prefijo, terminal.Codigo, tipo, usuario.IdUsuario);
                        respuesta.Valida = true;
                    }
                    else
                    {
                        throw new Exception("[GuardarDevolucion]: 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("[GuardarDevolucion]: 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("[GuardarDevolucion]: No pudo ser guardada la transaccion: " + e.Message);
                }
                Telemetria.Instancia.AgregaMetrica(new Excepcion(e));
            }
            catch (Exception ex)
            {
                respuesta.Documentar(false, "[GuardarDevolucion]: No pudo ser guardada la devolucion. ");
                log.Error("[GuardarDevolucion]: No pudo ser guardada la devolucion. " + ex.Message);
                Telemetria.Instancia.AgregaMetrica(new Excepcion(ex));
            }
        }
示例#14
0
        public void GuardarIntervencion(EIntervencion intervencion, ETerminal terminal, EUsuario usuario, out Respuesta respuesta)
        {
            //1. Creamos el encabezado de la venta.
            string        idVenta = Guid.NewGuid().ToString();
            RIntervencion rCajon  = new RIntervencion();

            respuesta = new Respuesta(false);
            Dictionary <string, string> IdsAcumulados = Entorno.Instancia.IdsAcumulados;

            try
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    //if (IdsAcumulados == null)
                    //{
                    //    IdsAcumulados = new Dictionary<string, string>();
                    //    IdsAcumulados.Add("idIntervencion", Guid.NewGuid().ToString());
                    //    //Creamos el registro venta
                    //    rCajon.CrearRegistroVenta(IdsAcumulados["idIntervencion"], terminal.Codigo, usuario.IdUsuario);
                    //}

                    //Actualizo registro venta
                    //rCajon.ActualizarRegistroVenta(IdsAcumulados["idRegistroVenta"], rCajon.Valor);

                    int resul = rCajon.CrearRegistroIntervencion(Guid.NewGuid().ToString(), intervencion.id_venta, intervencion.claveSupervisor, intervencion.motivo, terminal.Codigo, intervencion.nro_transac, usuario.IdUsuario);
                    if (resul == 1)
                    {
                        //Actualizamos el terminal
                        rCajon.ActualizarTerminal(terminal.Codigo, (long)terminal.NumeroUltimaFactura, (long)terminal.NumeroUltimaTransaccion + 1);
                        rVenta.ActualizarTerminal(terminal.Codigo, (long)terminal.NumeroUltimaFactura, (long)terminal.NumeroUltimaTransaccion + 1);

                        respuesta.Valida = true;
                    }
                    else
                    {
                        throw new Exception("[GuardarIntervencion]: 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("[GuardarIntervencion]: 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("[GuardarIntervencion]: No pudo ser guardada la intervención: " + e.Message);
                }

                //
                Telemetria.Instancia.AgregaMetrica(new Excepcion(e));
            }
            catch (Exception ex)
            {
                respuesta.Documentar(false, " No pudo ser guardada la intervención.");
                log.Error("[GuardarIntervencion]: No pudo ser guardada la intervención. " + ex.Message);
                Telemetria.Instancia.AgregaMetrica(new Excepcion(ex));
            }
        }
示例#15
0
        public void CancelarVenta(ETransaccion transaccion, ref Dictionary <string, string> IdsAcumulados, ETerminal terminal, EUsuario usuario, String tipo, out Respuesta respuesta)
        {
            respuesta = new Respuesta(true);
            string  idVenta = Guid.NewGuid().ToString();
            RVenta  rventa  = new RVenta();
            decimal bruto   = transaccion.BrutoNegativo > transaccion.BrutoPositivo ? transaccion.BrutoNegativo : transaccion.BrutoPositivo;

            try
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    if (rventa.CrearVenta(idVenta, bruto, bruto, terminal.Codigo, tipo, 1, 00, (long)terminal.NumeroUltimaTransaccion + 1, terminal.Prefijo, usuario.IdUsuario, 00) == 1)
                    {
                        //3. Creamos totales de venta(registro_venta).
                        if (IdsAcumulados == null)
                        {
                            IdsAcumulados = new Dictionary <string, string>();
                            IdsAcumulados.Add("idRegistroVenta", Guid.NewGuid().ToString());
                            //Creamos el registro venta
                            rventa.CrearRegistroVenta(IdsAcumulados["idRegistroVenta"], terminal.Codigo, usuario.IdUsuario);
                        }
                        //Actualizo registro venta
                        rventa.ActualizarRegistroVenta(IdsAcumulados["idRegistroVenta"], bruto, bruto, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, bruto);

                        rventa.ActualizarTerminal(terminal.Codigo, (long)terminal.NumeroUltimaFactura, (long)terminal.NumeroUltimaTransaccion + 1);
                    }
                    else
                    {
                        throw new Exception("[CancelarVenta]: 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("[CancelarVenta]: No pudo ser guardada la transacion: " + 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("[CancelarVenta]: No pudo ser guardada la venta: " + e.Message);
                }
                Telemetria.Instancia.AgregaMetrica(new Excepcion(e));
            }
            catch (Exception e)
            {
                respuesta.Valida  = false;
                respuesta.Mensaje = "[CancelarVenta]: No pudo ser guardada la transaccion.";
                log.Error("[CancelarVenta]: No pudo ser guardada la venta. " + e.Message);
                Telemetria.Instancia.AgregaMetrica(new Excepcion(e));
            }
        }