예제 #1
0
        /// <summary>
        /// Actualiza el estado de la transacción pendiente a procesada.
        /// </summary>
        /// <param name="transaccion">Datos de la Transacción</param>
        /// <returns>
        /// Retorna cero si se ha guardado correctamente, valor distinto a cero
        /// si se presenta algún error.
        /// </returns>
        private string ActualizarTransaccion(ETransaccion transaccion)
        {
            string sres = string.Empty;
            int    nres = 0;

            try
            {
                DataAccessLayerBaseClass dal  = DataAccessLayerFactory.GetDataAccessLayer();
                IDataParameter[]         opar = new IDataParameter[4];

                opar[0] = dal.CreateParameter("presult", ParameterDirection.Output, nres, DbType.Int32, null, 0);
                opar[1] = dal.CreateParameter("pmessage", ParameterDirection.Output, sres, DbType.String, null, 0);
                opar[2] = dal.CreateParameter("pidtransaccion", ParameterDirection.Input, transaccion.IdTransaccion, DbType.Guid, null, 0);
                opar[3] = dal.CreateParameter("pestado", ParameterDirection.Input, 1, DbType.Double, null, 0);

                int dae = dal.ExecuteQuery("sp_update_ps_transaccion", CommandType.StoredProcedure, opar);
            }
            catch (Exception ex)
            {
                sres = "201";
                Logger.ErrorLog.RegErrorDB(Logger.NivelDeError.Cinco, sres, this.ToString(), "sp_update_ps_transaccion", ex.Message + "|" + ex.StackTrace);
            }

            return(sres);
        }
예제 #2
0
        public string Remitir(EEncabezado credencial, string datos, EDestino rumbo, EProvider proveedor, Operacion tipoOperacion, short evento)
        {
            string       sres        = string.Empty;
            DDespachar   despachar   = new DDespachar();
            ETransaccion transaccion = new ETransaccion();

            if (credencial != null && rumbo != null)
            {
                transaccion.Conexion      = rumbo.Conexion;
                transaccion.Datos         = datos;
                transaccion.Persiste      = rumbo.Persiste;
                transaccion.Terminal      = credencial.Terminal;
                transaccion.TipoDestino   = rumbo.TipoDestino;
                transaccion.Transaccion   = (Transacciones)credencial.Transaccion;
                transaccion.Usuario       = credencial.Usuario;
                transaccion.Modo          = 0;
                transaccion.Version       = credencial.Version;
                transaccion.TipoOperacion = tipoOperacion;
                transaccion.Evento        = evento;

                sres = despachar.Remitir(transaccion, proveedor);
            }
            else
            {
                sres = "999";
                Logger.ErrorLog.RegErrorDB(Logger.NivelDeError.Tres, sres, this.ToString(), "Remitir()", "No se pudo procesar transacción.");
            }

            return(sres);
        }
예제 #3
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));
            }
        }
예제 #4
0
        public void RemitirTest()
        {
            DDespachar   target      = new DDespachar(); // TODO: Inicializar en un valor adecuado
            ETransaccion transaccion = null;             // TODO: Inicializar en un valor adecuado
            string       expected    = "999";            // TODO: Inicializar en un valor adecuado
            string       actual;

            actual = target.Remitir(transaccion);
            Assert.AreEqual(expected, actual);
            // Assert.Inconclusive("Compruebe la exactitud de este método de prueba.");
        }
예제 #5
0
        /// <summary>
        /// Persiste los datos de la transacción.
        /// </summary>
        /// <param name="transaccion">Datos de la Transacción</param>
        /// <param name="resultado">Resultado del envío de la Transacción</param>
        private void Persistir(ETransaccion transaccion, string resultado)
        {
            string sres   = string.Empty;
            int    estado = 0;
            JavaScriptSerializer oSerializer = new JavaScriptSerializer();

            if (transaccion.TipoOperacion != Operacion.Registrar)
            {
                estado = 1;
            }
            //else
            //    if (resultado == "0")
            //        estado = 1;

            transaccion.Modo = 1;

            try
            {
                DataAccessLayerBaseClass dal  = DataAccessLayerFactory.GetDataAccessLayer();
                IDataParameter[]         opar = new IDataParameter[8];

                opar[0] = dal.CreateParameter("pCodigo", ParameterDirection.Output, null
                                              , DbType.Int32, null, 0);
                opar[1] = dal.CreateParameter("pMensaje", ParameterDirection.Output, null
                                              , DbType.String, null, 500);
                opar[2] = dal.CreateParameter("pCodigoTransaccion", ParameterDirection.Input, transaccion.Transaccion
                                              , DbType.Int32, null, 0);
                opar[3] = dal.CreateParameter("pDatos", ParameterDirection.Input, oSerializer.Serialize(transaccion)
                                              , DbType.StringFixedLength, null, 0);
                opar[4] = dal.CreateParameter("pRespuesta", ParameterDirection.Input, resultado
                                              , DbType.StringFixedLength, null, 0);
                opar[5] = dal.CreateParameter("pEstado", ParameterDirection.Input, estado
                                              , DbType.Double, null, 0);
                opar[6] = dal.CreateParameter("pTerminal", ParameterDirection.Input, transaccion.Terminal
                                              , DbType.String, null, 0);
                opar[7] = dal.CreateParameter("pVersion", ParameterDirection.Input, transaccion.Version
                                              , DbType.String, null, 0);

                int dae = dal.ExecuteQuery("Movil.sprRegistrarTransaccion", CommandType.StoredProcedure, opar);
                sres = "0";
            }
            catch (Exception ex)
            {
                sres = "201";
                Logger.ErrorLog.RegErrorDB(Logger.NivelDeError.Cinco, sres, this.ToString(), "Movil.sprRegistrarTransaccion", ex.Message + "|" + ex.StackTrace);
            }
        }
예제 #6
0
        public void RemitirTest1()
        {
            DDespachar   target      = new DDespachar();   // TODO: Inicializar en un valor adecuado
            ETransaccion transaccion = new ETransaccion(); // TODO: Inicializar en un valor adecuado

            transaccion.Conexion        = "http://192.168.0.8/sir_acr/Servicio.asmx";
            transaccion.Datos           = "";
            transaccion.EsObjeto        = false;
            transaccion.Reintentos      = 3;
            transaccion.Terminal        = "1234";
            transaccion.TiempoEspera    = 60;
            transaccion.TiempoReintento = 10;
            transaccion.TipoDestino     = Destinos.ConectorWS;
            transaccion.Transaccion     = 1;
            transaccion.Usuario         = "mdaza";

            string expected = string.Empty; // TODO: Inicializar en un valor adecuado
            string actual;

            actual = target.Remitir(transaccion);
            Assert.AreEqual(expected, actual);
        }
예제 #7
0
        /// <summary>
        /// Remite un despachar de acuerdo a lo indicado en el mapa de transacciones
        /// </summary>
        /// <param name="transaccion">Representación lógica de un Transaccion</param>
        /// <returns>
        /// Retorna cero si se ha guardado correctamente, valor distinto a cero
        /// si se presenta algún error.
        /// </returns>
        public string Remitir(ETransaccion transaccion, EProvider provider)
        {
            string    sres = string.Empty;
            IConector conector;

            if (transaccion != null)
            {
                switch (transaccion.TipoDestino)
                {
                case Destinos.ConectorWSJSon:
                    //Enviar transacción al WS
                    conector = null;
                    break;

                case Destinos.ConectorDB:
                    //Enviar transacción al DB
                    conector = new ConectorDB();
                    break;

                case Destinos.ConectorFS:
                    //Enviar transacción al FS
                    conector = null;
                    break;

                case Destinos.ConectorWSObjeto:
                    //Enviar transacción al WS
                    conector = new ConectorWSObjeto();
                    break;

                default:
                    conector = null;
                    break;
                }

                if (conector != null)
                {
                    EProveedor proveedor = new EProveedor()
                    {
                        Proveedor      = provider.DataProvider,
                        CadenaConexion = provider.ConnectionString
                    };

                    sres = conector.Enviar(transaccion, proveedor);

                    if (sres != "104")
                    {
                        if (transaccion.Persiste && transaccion.Modo == 0)
                        {
                            Persistir(transaccion, sres);
                        }
                    }
                }
                else
                {
                    sres = "999";
                    Logger.ErrorLog.RegErrorDB(Logger.NivelDeError.Seis, sres, this.ToString(), "Remitir()", "Error ocurrido por falta de asignación de variables u objetos.");
                }
            }
            else
            {
                sres = "999";
                Logger.ErrorLog.RegErrorDB(Logger.NivelDeError.Seis, sres, this.ToString(), "Remitir()", "Error ocurrido por falta de asignación de variables u objetos.");
            }

            return(sres);
        }