Пример #1
0
        public ObtenerDatosSecuencialResponse ObtenerDatosSecuencial(ObtenerDatosRequest request)
        {
            var maxiKioscoIdentifier = request.MaxiKioscoIdentifier;
            var usuario = Uow.Usuarios.Obtener(u => u.Identifier == request.UsuarioIdentifier);

            if (usuario == null)
            {
                throw new ApplicationException("No se encontro el usuario");
            }


            var response = new ObtenerDatosSecuencialResponse();

            //Actualizo el estado de kiosco
            var kiosco = Uow.MaxiKioscos.Obtener(m => m.Identifier == maxiKioscoIdentifier);

            kiosco.UltimaSecuenciaExportacion = request.UltimaSecuenciaExportacion;
            Uow.Commit();

            //Controlo si es la última
            var cantidadPorExportar = Uow.Exportaciones.Listado()
                                      .Count(e => e.CuentaId == usuario.CuentaId &&
                                             (!request.UltimaSecuenciaExportacion.HasValue) ||
                                             e.Secuencia > request.UltimaSecuenciaExportacion);

            if (cantidadPorExportar > 0)
            {
                var exportacion = Uow.Exportaciones.Listado(e => e.ExportacionArchivo)
                                  .FirstOrDefault(e => e.CuentaId == usuario.CuentaId &&
                                                  (!request.UltimaSecuenciaExportacion.HasValue) ||
                                                  e.Secuencia > request.UltimaSecuenciaExportacion);

                var data = new ExportacionData()
                {
                    Secuencia = exportacion.Secuencia,
                    Archivo   = exportacion.ExportacionArchivo.Archivo
                };

                //Creamos la respuesta
                response.Exportacion       = data;
                response.ArchivosRestantes = cantidadPorExportar - 1;
                return(response);
            }
            return(response);
        }
Пример #2
0
        /// <summary>
        /// Obtiene todos los datos de desincronizados desde la base de datos principal
        /// </summary>
        /// <param name="request">Request parametros</param>
        /// <returns>Datos a sincronizar en el maxikiosco</returns>
        public ObtenerDatosResponse ObtenerDatos(ObtenerDatosRequest request)
        {
            var maxiKioscoIdentifier = request.MaxiKioscoIdentifier;
            var usuario = Uow.Usuarios.Obtener(u => u.Identifier == request.UsuarioIdentifier);

            if (usuario == null)
            {
                throw new ApplicationException("No se encontro el usuario");
            }


            var response      = new ObtenerDatosResponse();
            var puedeExportar = Uow.Exportaciones.PuedeExportarPrincipal();

            if (puedeExportar)
            {
                Uow.Exportaciones.ExportarPrincipal(usuario.UsuarioId);
            }

            //Actualizo el estado de kiosco
            var kiosco = Uow.MaxiKioscos.Obtener(m => m.Identifier == maxiKioscoIdentifier);

            kiosco.UltimaSecuenciaExportacion = request.UltimaSecuenciaExportacion;
            Uow.Commit();

            //Obtenemos las exportacion generadas
            var exportaciones = Uow.Exportaciones.Listado(e => e.ExportacionArchivo)
                                .Where(e => e.CuentaId == usuario.CuentaId &&
                                       (!request.UltimaSecuenciaExportacion.HasValue) ||
                                       e.Secuencia > request.UltimaSecuenciaExportacion)
                                .Select(e =>
                                        new ExportacionData()
            {
                Secuencia = e.Secuencia,
                Archivo   = e.ExportacionArchivo.Archivo
            })
                                .ToArray();

            //Creamos la respuesta
            response.Exportaciones = exportaciones;
            return(response);
        }
        private void SincronizacionSecuencial()
        {
            try
            {
                //Obtener datos a actualizar desde la base de datos local
                this.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Actualizando base de datos principal...");
                var secuencias = _sincronizacionService.ObtenerSecuencias(AppSettings.MaxiKioscoIdentifier.ToString());
                var exportacionesLocales = SincronizacionHelper.ObtenerDatosSinExportar(AppSettings.MaxiKioscoIdentifier,
                                                                                       UsuarioActual.UsuarioId,
                                                                                       secuencias.UltimaSecuenciaAcusada);

                var count = 1;
                foreach (var exportacion in exportacionesLocales)
                {
                    this.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje),
                        String.Format("Actualizando Servidor ({0} de {1} archivos)", count, exportacionesLocales.Count));
                    var actualizarDatosRequest = new ActualizarDatosRequest
                    {
                        Exportacion = new ExportacionData
                        {
                            Archivo = exportacion.ExportacionArchivo.Archivo,
                            Secuencia = exportacion.Secuencia
                        },
                        MaxiKioscoIdentifier = AppSettings.MaxiKioscoIdentifier
                    };
                    var actualizarResponse = _sincronizacionService.ActualizarDatos(actualizarDatosRequest);
                    if (!actualizarResponse.Exito)
                    {
                        AppSettings.RefreshSettings();
                        _huboError = true;
                        MessageBox.Show(actualizarResponse.MensageError);
                        break;
                    }
                    count++;
                }

                if (!_huboError)
                {
                    var hubieronNuevosDatos = false;
                    int ultimaSecuencia = 0;

                    this.Invoke(new RefrescarProgresoDelegate(RefrescarProgreso), 25);
                    this.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Obteniendo datos de servidor...");
                    var request = new ObtenerDatosRequest
                    {
                        MaxiKioscoIdentifier = AppSettings.MaxiKioscoIdentifier,
                        UsuarioIdentifier = UsuarioActual.Usuario.Identifier,
                        UltimaSecuenciaExportacion = secuencias.UltimaSecuenciaExportacion
                    };

                    //Esperar respuesta del server.
                    this.Invoke(new RefrescarProgresoDelegate(RefrescarProgreso), 50);
                    this.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Actualizando datos de kiosco...");

                    var faltan = 10; //no importa este valor (tiene que ser mayor a cero nomas)

                    while (faltan > 0)
                    {
                        var response = _sincronizacionService.ObtenerDatosSecuencial(request);
                        faltan = response.ArchivosRestantes;

                        if (response.Exportacion != null)
                        {
                            ultimaSecuencia = response.Exportacion.Secuencia;

                            this.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje),
                                String.Format("Actualizando datos de kiosco  [Archivos restantes: {0}]", response.ArchivosRestantes));
                            var result = Uow.Exportaciones.ActualizarKiosco(response.Exportacion.Archivo, AppSettings.MaxiKioscoIdentifier, response.Exportacion.Secuencia);
                            request.UltimaSecuenciaExportacion++;
                            hubieronNuevosDatos = true;
                            if (!result)
                            {
                                _huboError = true;
                                AppSettings.RefreshSettings();
                                return;
                            }
                        }
                    }

                    if (hubieronNuevosDatos)
                    {
                        this.Invoke(new RefrescarProgresoDelegate(RefrescarProgreso), 70);
                        this.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Informando al servidor...");
                        var acuseRequest = new AcusarExportacionRequest()
                        {
                            MaxiKioscoIdentifier = AppSettings.MaxiKioscoIdentifier,
                            UltimaSecuenciaExportacion = ultimaSecuencia,
                            HoraLocalISO = DateHelper.DateAndTimeToISO(DateTime.Now)
                        };
                        _sincronizacionService.AcusarExportacion(acuseRequest);
                    }

                    this.Invoke(new RefrescarProgresoDelegate(RefrescarProgreso), 85);
                    this.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Actualizando stock...");
                    Uow.Stocks.Actualizar();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(Maxikioscos.Comun.Helpers.ExceptionHelper.GetInnerException(ex).Message);
                _huboError = true;
                AppSettings.RefreshSettings();
            }
        }
Пример #4
0
        private void WorkActualizacionSecuencial()
        {
            try
            {
                _huboError          = false;
                _secuenciaDesfasada = false;

                CurrentForm.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Actualizando base de datos principal...");
                var secuencias           = _sincronizacionService.ObtenerSecuencias(AppSettings.MaxiKioscoIdentifier.ToString());
                var exportacionesLocales = SincronizacionHelper.ObtenerDatosSinExportar(AppSettings.MaxiKioscoIdentifier,
                                                                                        UsuarioActual.UsuarioId,
                                                                                        secuencias.UltimaSecuenciaAcusada);

                var count       = 1;
                var orderedList = exportacionesLocales.OrderBy(x => x.Secuencia).ToList();
                foreach (var exportacion in orderedList)
                {
                    CurrentForm.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje),
                                       String.Format("Actualizando Servidor ({0} de {1} archivos)", count, orderedList.Count));
                    var actualizarDatosRequest = new ActualizarDatosRequest
                    {
                        Exportacion = new ExportacionData
                        {
                            Archivo   = exportacion.ExportacionArchivo.Archivo,
                            Secuencia = exportacion.Secuencia
                        },
                        MaxiKioscoIdentifier = AppSettings.MaxiKioscoIdentifier
                    };
                    var actualizarResponse = _sincronizacionService.ActualizarDatos(actualizarDatosRequest);

                    if (!actualizarResponse.Exito)
                    {
                        AppSettings.RefreshSettings();
                        _huboError = true;
                        if (actualizarResponse.MensageError == "SECUENCIA DESFASADA")
                        {
                            _secuenciaDesfasada = true;
                        }
                        else
                        {
                            MessageBox.Show(actualizarResponse.MensageError);
                        }
                        break;
                    }
                    count++;
                }

                if (!_huboError)
                {
                    int ultimaSecuencia = 0;

                    CurrentForm.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Obteniendo datos de servidor...");
                    var request = new ObtenerDatosRequest
                    {
                        MaxiKioscoIdentifier       = AppSettings.MaxiKioscoIdentifier,
                        UsuarioIdentifier          = UsuarioActual.Usuario.Identifier,
                        UltimaSecuenciaExportacion = secuencias.UltimaSecuenciaExportacion
                    };

                    //Esperar respuesta del server.
                    CurrentForm.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Actualizando datos de kiosco...");


                    var faltan = 10; //no importa este valor (tiene que ser mayor a cero nomas)

                    _sincronizacionService.ForzarArmadoDeArchivoExportacion(UsuarioActual.Usuario.Identifier);
                    var vinoAlgoDeWeb = false;
                    while (faltan > 0)
                    {
                        var response = _sincronizacionService.ObtenerDatosSecuencial(request);
                        faltan = response.ArchivosRestantes;

                        if (response.Exportacion != null)
                        {
                            vinoAlgoDeWeb = true;

                            ultimaSecuencia = response.Exportacion.Secuencia;

                            CurrentForm.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje),
                                               String.Format("Actualizando datos de kiosco  [Archivos restantes: {0}]", response.ArchivosRestantes));
                            var result = Uow.Exportaciones.ActualizarKiosco(response.Exportacion.Archivo, AppSettings.MaxiKioscoIdentifier, response.Exportacion.Secuencia);
                            request.UltimaSecuenciaExportacion++;
                            if (!result)
                            {
                                _huboError = true;
                                AppSettings.RefreshSettings();
                                return;
                            }
                        }
                    }

                    if (vinoAlgoDeWeb)
                    {
                        CurrentForm.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Informando al servidor...");
                        var acuseRequest = new AcusarExportacionRequest()
                        {
                            MaxiKioscoIdentifier       = AppSettings.MaxiKioscoIdentifier,
                            UltimaSecuenciaExportacion = ultimaSecuencia,
                            HoraLocalISO = DateHelper.DateAndTimeToISO(DateTime.Now)
                        };
                        _sincronizacionService.AcusarExportacion(acuseRequest);
                    }

                    CurrentForm.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Actualizando stock...");
                    Uow.Stocks.Actualizar();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(Maxikioscos.Comun.Helpers.ExceptionHelper.GetInnerException(ex).Message);
                _huboError = true;
                AppSettings.RefreshSettings();
            }
        }
        private void SincronizacionSecuencial()
        {
            try
            {
                //Obtener datos a actualizar desde la base de datos local
                this.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Actualizando base de datos principal...");
                var secuencias           = _sincronizacionService.ObtenerSecuencias(AppSettings.MaxiKioscoIdentifier.ToString());
                var exportacionesLocales = SincronizacionHelper.ObtenerDatosSinExportar(AppSettings.MaxiKioscoIdentifier,
                                                                                        UsuarioActual.UsuarioId,
                                                                                        secuencias.UltimaSecuenciaAcusada);

                var count = 1;
                foreach (var exportacion in exportacionesLocales)
                {
                    this.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje),
                                String.Format("Actualizando Servidor ({0} de {1} archivos)", count, exportacionesLocales.Count));
                    var actualizarDatosRequest = new ActualizarDatosRequest
                    {
                        Exportacion = new ExportacionData
                        {
                            Archivo   = exportacion.ExportacionArchivo.Archivo,
                            Secuencia = exportacion.Secuencia
                        },
                        MaxiKioscoIdentifier = AppSettings.MaxiKioscoIdentifier
                    };
                    var actualizarResponse = _sincronizacionService.ActualizarDatos(actualizarDatosRequest);
                    if (!actualizarResponse.Exito)
                    {
                        AppSettings.RefreshSettings();
                        _huboError = true;
                        MessageBox.Show(actualizarResponse.MensageError);
                        break;
                    }
                    count++;
                }

                if (!_huboError)
                {
                    var hubieronNuevosDatos = false;
                    int ultimaSecuencia     = 0;

                    this.Invoke(new RefrescarProgresoDelegate(RefrescarProgreso), 25);
                    this.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Obteniendo datos de servidor...");
                    var request = new ObtenerDatosRequest
                    {
                        MaxiKioscoIdentifier       = AppSettings.MaxiKioscoIdentifier,
                        UsuarioIdentifier          = UsuarioActual.Usuario.Identifier,
                        UltimaSecuenciaExportacion = secuencias.UltimaSecuenciaExportacion
                    };

                    //Esperar respuesta del server.
                    this.Invoke(new RefrescarProgresoDelegate(RefrescarProgreso), 50);
                    this.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Actualizando datos de kiosco...");


                    var faltan = 10; //no importa este valor (tiene que ser mayor a cero nomas)

                    while (faltan > 0)
                    {
                        var response = _sincronizacionService.ObtenerDatosSecuencial(request);
                        faltan = response.ArchivosRestantes;

                        if (response.Exportacion != null)
                        {
                            ultimaSecuencia = response.Exportacion.Secuencia;

                            this.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje),
                                        String.Format("Actualizando datos de kiosco  [Archivos restantes: {0}]", response.ArchivosRestantes));
                            var result = Uow.Exportaciones.ActualizarKiosco(response.Exportacion.Archivo, AppSettings.MaxiKioscoIdentifier, response.Exportacion.Secuencia);
                            request.UltimaSecuenciaExportacion++;
                            hubieronNuevosDatos = true;
                            if (!result)
                            {
                                _huboError = true;
                                AppSettings.RefreshSettings();
                                return;
                            }
                        }
                    }

                    if (hubieronNuevosDatos)
                    {
                        this.Invoke(new RefrescarProgresoDelegate(RefrescarProgreso), 70);
                        this.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Informando al servidor...");
                        var acuseRequest = new AcusarExportacionRequest()
                        {
                            MaxiKioscoIdentifier       = AppSettings.MaxiKioscoIdentifier,
                            UltimaSecuenciaExportacion = ultimaSecuencia,
                            HoraLocalISO = DateHelper.DateAndTimeToISO(DateTime.Now)
                        };
                        _sincronizacionService.AcusarExportacion(acuseRequest);
                    }


                    this.Invoke(new RefrescarProgresoDelegate(RefrescarProgreso), 85);
                    this.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Actualizando stock...");
                    Uow.Stocks.Actualizar();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(Maxikioscos.Comun.Helpers.ExceptionHelper.GetInnerException(ex).Message);
                _huboError = true;
                AppSettings.RefreshSettings();
            }
        }
        private void WorkActualizacionSecuencial()
        {
            try
            {
                _huboError = false;
                _secuenciaDesfasada = false;

                CurrentForm.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Actualizando base de datos principal...");
                var secuencias = _sincronizacionService.ObtenerSecuencias(AppSettings.MaxiKioscoIdentifier.ToString());
                var exportacionesLocales = SincronizacionHelper.ObtenerDatosSinExportar(AppSettings.MaxiKioscoIdentifier,
                                                                                       UsuarioActual.UsuarioId,
                                                                                       secuencias.UltimaSecuenciaAcusada);

                var count = 1;
                var orderedList = exportacionesLocales.OrderBy(x => x.Secuencia).ToList();
                foreach (var exportacion in orderedList)
                {
                    CurrentForm.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje),
                        String.Format("Actualizando Servidor ({0} de {1} archivos)", count, orderedList.Count));
                    var actualizarDatosRequest = new ActualizarDatosRequest
                    {
                        Exportacion = new ExportacionData
                        {
                            Archivo = exportacion.ExportacionArchivo.Archivo,
                            Secuencia = exportacion.Secuencia
                        },
                        MaxiKioscoIdentifier = AppSettings.MaxiKioscoIdentifier
                    };
                    var actualizarResponse = _sincronizacionService.ActualizarDatos(actualizarDatosRequest);

                    if (!actualizarResponse.Exito)
                    {
                        AppSettings.RefreshSettings();
                        _huboError = true;
                        if (actualizarResponse.MensageError == "SECUENCIA DESFASADA")
                        {
                            _secuenciaDesfasada = true;
                        }
                        else
                        {
                            MessageBox.Show(actualizarResponse.MensageError);
                        }
                        break;
                    }
                    count++;
                }

                if (!_huboError)
                {
                    int ultimaSecuencia = 0;

                    CurrentForm.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Obteniendo datos de servidor...");
                    var request = new ObtenerDatosRequest
                    {
                        MaxiKioscoIdentifier = AppSettings.MaxiKioscoIdentifier,
                        UsuarioIdentifier = UsuarioActual.Usuario.Identifier,
                        UltimaSecuenciaExportacion = secuencias.UltimaSecuenciaExportacion
                    };

                    //Esperar respuesta del server.
                    CurrentForm.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Actualizando datos de kiosco...");


                    var faltan = 10; //no importa este valor (tiene que ser mayor a cero nomas)

                    _sincronizacionService.ForzarArmadoDeArchivoExportacion(UsuarioActual.Usuario.Identifier);
                    var vinoAlgoDeWeb = false;
                    while (faltan > 0)
                    {
                        var response = _sincronizacionService.ObtenerDatosSecuencial(request);
                        faltan = response.ArchivosRestantes;

                        if (response.Exportacion != null)
                        {
                            vinoAlgoDeWeb = true;

                            ultimaSecuencia = response.Exportacion.Secuencia;

                            CurrentForm.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje),
                                String.Format("Actualizando datos de kiosco  [Archivos restantes: {0}]", response.ArchivosRestantes));
                            var result = Uow.Exportaciones.ActualizarKiosco(response.Exportacion.Archivo, AppSettings.MaxiKioscoIdentifier, response.Exportacion.Secuencia);
                            request.UltimaSecuenciaExportacion++;
                            if (!result)
                            {
                                _huboError = true;
                                AppSettings.RefreshSettings();
                                return;
                            }
                        }
                    }

                    if (vinoAlgoDeWeb)
                    {
                        CurrentForm.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Informando al servidor...");
                        var acuseRequest = new AcusarExportacionRequest()
                        {
                            MaxiKioscoIdentifier = AppSettings.MaxiKioscoIdentifier,
                            UltimaSecuenciaExportacion = ultimaSecuencia,
                            HoraLocalISO = DateHelper.DateAndTimeToISO(DateTime.Now)
                        };
                        _sincronizacionService.AcusarExportacion(acuseRequest);
                    }

                    CurrentForm.Invoke(new ActualizarMensajeDelegate(ActualizarMensaje), "Actualizando stock...");
                    Uow.Stocks.Actualizar();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(Maxikioscos.Comun.Helpers.ExceptionHelper.GetInnerException(ex).Message);
                _huboError = true;
                AppSettings.RefreshSettings();
            }
        }