Exemplo n.º 1
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();
            }
        }