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); }
/// <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(); } }
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(); } }