public ActionResult <CatalogoQuery> ActualizarCatalogo(RequestBase <CatalogoCmd> request)
        {
            bool esError = true;
            ResponseBase <CatalogoQuery> response = new ResponseBase <CatalogoQuery>();

            response.code = 500;

            try
            {
                response.data = _catalogosServiceCmd.ActualizarCatalogo(request.data);
                //response.data = getCatalogosEjemplo().FirstOrDefault();


                if (response.data == null)
                {
                    response.code    = 202;
                    response.message = "No se ha podido completar el proceso";
                }
                else
                {
                    response.code    = 200;
                    response.message = "Catálogo actualizado";
                    esError          = false;
                }
            }
            catch (Exception e)
            {
                response.message = e.Message;
            }

            response.date = DateTime.Now;


            //Auditoria
            var jrq  = JsonConvert.SerializeObject(request);
            var jrp  = JsonConvert.SerializeObject(response);
            var host = "";

            try
            {
                var remoteIpAddress = HttpContext.Connection.RemoteIpAddress.ToString();
                host = Dns.GetHostEntry(remoteIpAddress).HostName;
            }
            catch (Exception e) { }

            _AuditoriaInventarios log = new _AuditoriaInventarios("AcualizarCatalogo", (response.data != null)?response.data.CodigoCatalogo:"", esError, request.usuario, MethodInfo.GetCurrentMethod().Name, this.ToString(), jrq, jrp, "Host: " + host, "");

            _ufwLog.Repository <_AuditoriaInventarios>().InsertOne(log);
            //


            return(StatusCode(response.code, response));
        }
        public void ProcesarEstadoProducto(EventBase <EstadoProductoCmd> EventoEstado)
        {
            bool EsError = true;
            var  jrq     = JsonConvert.SerializeObject(EventoEstado);
            var  jrp     = "";

            if (!(_ufwLog.Repository <_AuditoriaInventarios>().Contains(new LogInventarioSpecification(EventoEstado.Data.SKU, jrq))))
            {
                try
                {
                    Producto producto = _ufwProductos.Repository <Producto>().Find(new ProductoSKUSpecification(EventoEstado.Data.SKU)).FirstOrDefault();

                    if ((producto != null))
                    {
                        producto.Estado          = EventoEstado.Data.Estado;
                        producto.EnAlmacen       = EventoEstado.Data.EnAlmacen;
                        producto.NivelInventario = EventoEstado.Data.NivelInventario;

                        //Persistencia
                        _ufwProductos.Repository <Producto>().ReplaceOne(producto);
                        EsError = false;

                        jrp = JsonConvert.SerializeObject(producto);
                    }
                    else
                    {
                        throw new Exception("No se ha encontrado el producto");
                    }
                }
                catch (Exception e)
                {
                    jrp = JsonConvert.SerializeObject(e);
                }


                //Auditoría


                _AuditoriaInventarios log = new _AuditoriaInventarios("EstadoActualizado", EventoEstado.Data.SKU, EsError, EventoEstado.Usuario, MethodInfo.GetCurrentMethod().Name, this.ToString(), jrq, jrp, "", "SKU: " + EventoEstado.Data.SKU + "   NivelInventario: " + EventoEstado.Data.NivelInventario.ToString() + "");

                _ufwLog.Repository <_AuditoriaInventarios>().InsertOne(log);
            }
            else
            {
                //Ya fue ejecutada
            }
        }
        public ActionResult <string> ProbarKafka(EventBase <List <VentaCmd> > evento)
        {
            bool   esError  = true;
            string response = "Descripción del evento enviado por el servicio Kafka/test/venta";

            try
            {
                evento.Evento = "VentaProductos";
                evento.Fecha  = DateTime.Now;
                evento.Origen = "api-inventarios";
                evento.Topico = "TP_Venta";

                var json = JsonConvert.SerializeObject(evento);

                this._producer.Produce("TP_Venta", new Message <string, string> {
                    Key = "VentaProductos", Value = json
                });
                esError = false;
            }
            catch (Exception e)
            {
                Console.WriteLine($"MENSAJE:  '{e.Message}'  STACKTRACE:  '{e.StackTrace}' \n\n");
                _logger.LogError($"MENSAJE:  '{e.Message}'  STACKTRACE:  '{e.StackTrace}' \n\n\n");
                response = e.Message;
            }

            //response.date = DateTime.Now;

            //Auditoría
            var jrq  = JsonConvert.SerializeObject(evento);
            var jrp  = JsonConvert.SerializeObject(response);
            var host = "";

            try
            {
                var remoteIpAddress = HttpContext.Connection.RemoteIpAddress.ToString();
                host = Dns.GetHostEntry(remoteIpAddress).HostName;
            }
            catch (Exception e) { }

            _AuditoriaInventarios log = new _AuditoriaInventarios("ProbarVenta", "", esError, "", MethodInfo.GetCurrentMethod().Name, this.ToString(), jrq, jrp, "Host: " + host, "");

            _ufwLog.Repository <_AuditoriaInventarios>().InsertOne(log);
            //

            return(StatusCode(200, response));
        }
        public void ProcesarVenta(EventBase <List <VentaCmd> > eventoVenta)
        {
            try
            {
                string[] skus = eventoVenta.Data.ConvertAll <string>(u => u.SKU).ToArray();

                IEnumerable <ExistenciaProducto> existencias = this._inventariosServiceQ.ConsultarDisponibilidad(skus);
                Dictionary <VentaCmd, Producto>  productos   = new Dictionary <VentaCmd, Producto>();

                if (existencias.Any(e => (!e.Disponible)))
                {
                    throw new Exception("Hay productos no disponibles");
                }


                foreach (VentaCmd v in eventoVenta.Data)
                {
                    ExistenciaProducto e = existencias.Where(e => e.sku == v.SKU).FirstOrDefault();

                    if ((e != null))
                    {
                        if ((e.Disponible) && (e.CantidadDisponibles >= v.Unidades))
                        {
                            Producto p = this._ufwProductos.Repository <Producto>().Find(new ProductoSKUSpecification(e.sku)).FirstOrDefault();
                            p.NivelInventario = p.NivelInventario - v.Unidades;
                            p.EnAlmacen       = (p.NivelInventario > 0) ? true : false;
                            productos.Add(v, p);
                        }
                        else
                        {
                            throw new Exception("No hay unidades disponibles del producto SKU: " + v.SKU);
                        }
                    }
                    else
                    {
                        throw new Exception("Error en la consulta de disponibilidad");
                    }
                }



                foreach (KeyValuePair <VentaCmd, Producto> pair in productos)
                {
                    //Seguimiento
                    Producto p = this.HacerSeguimiento(pair.Value);


                    //Auditoría
                    var jrq = JsonConvert.SerializeObject(eventoVenta);
                    var jrp = JsonConvert.SerializeObject(p);
                    _AuditoriaInventarios log = new _AuditoriaInventarios("Venta", pair.Key.Referencia, false, eventoVenta.Usuario, MethodInfo.GetCurrentMethod().Name, this.ToString(), jrq, jrp, "", "Referencia: " + pair.Key.Referencia + "   SKU: " + pair.Key.SKU + "   Unidades: " + pair.Key.Unidades + "");


                    //Persistencia
                    _ufwProductos.Repository <Producto>().ReplaceOne(p);
                    _ufwLog.Repository <_AuditoriaInventarios>().InsertOne(log);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Beispiel #5
0
        private void Start(CancellationToken stoppingToken)
        {
            try
            {
                CancellationTokenSource cts = new CancellationTokenSource();
                Console.CancelKeyPress += (_, e) =>
                { e.Cancel = true;
                  cts.Cancel(); };

                using (var c = new ConsumerBuilder <string, string>(this._consumerConfig).Build())
                {
                    c.Subscribe(new List <string>()
                    {
                        "TP_Venta", "TP_Inventario"
                    });

                    while (!stoppingToken.IsCancellationRequested)
                    {
                        _AuditoriaInventarios log = null;

                        using (var scope = this._serviceProvider.CreateScope())
                        {
                            _inventariosServiceCmd = (IInventariosServiceCmd)scope.ServiceProvider.GetRequiredService(typeof(IInventariosServiceCmd));
                            _log = (IUnitOfWork <_AuditoriaInventarios>)scope.ServiceProvider.GetRequiredService(typeof(IUnitOfWork <_AuditoriaInventarios>));

                            try
                            {
                                var cr = c.Consume(cts.Token);

                                _logger.LogInformation($"\n\n");
                                _logger.LogInformation($"--------------------------------------------------{DateTime.Now}\n");
                                _logger.LogInformation($"TOPIC:  '{cr.Topic}'  EVENTO: '{cr.Key}'   MENSAJE CONSUMIDO:  '{cr.Value}'  \n");

                                //log = new _AuditoriaInventarios("TOPIC", "", false, "", "sad", this.ToString(), $"TOPIC:  '{cr.Topic}'  EVENTO: '{cr.Key}'   MENSAJE CONSUMIDO:  '{cr.Value}' ", "", "", "");
                                //_log.Repository<_AuditoriaInventarios>().InsertOne(log);


                                switch (cr.Topic)
                                {
                                case "TP_Venta":


                                    switch (cr.Key)
                                    {
                                    case "er la integración con":

                                        EventBase <List <VentaCmd> > eventoVenta = JsonConvert.DeserializeObject <EventBase <List <VentaCmd> > >(cr.Value);
                                        this._inventariosServiceCmd.ProcesarVenta(eventoVenta);

                                        break;

                                    default:
                                        throw new Exception("Evento no identificado");
                                    }

                                    break;

                                case "TP_Inventario":


                                    switch (cr.Key)
                                    {
                                    case "EstadoActualizado":

                                        EventBase <EstadoProductoCmd> eventoEstado = JsonConvert.DeserializeObject <EventBase <EstadoProductoCmd> >(cr.Value);
                                        this._inventariosServiceCmd.ProcesarEstadoProducto(eventoEstado);

                                        break;

                                    default:
                                        throw new Exception("Evento no identificado");
                                    }

                                    break;
                                }
                            }

                            catch (Exception e)
                            {
                                log = new _AuditoriaInventarios("TOPIC PROCESO EXCEPTION", "", true, "", "", this.ToString(), e.Message, e.StackTrace, "", "");
                                _log.Repository <_AuditoriaInventarios>().InsertOne(log);
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                _logger.LogError($"MENSAJE:  '{e.Message}'  STACKTRACE:  '{e.StackTrace}' \n\n\n");
            }
        }