Beispiel #1
0
        protected async override void OnAppearing()
        {
            base.OnAppearing();
            activityIndicator.IsRunning = true;
            activityIndicator.IsVisible = true;


            EventoLogisticoBLL eventoBLL = new EventoLogisticoBLL();

            var eventos      = eventoBLL.SeleccionarEventosPendientesSincronizar();
            var dataTemplate = new DataTemplate(typeof(TextCell));

            dataTemplate.SetBinding(TextCell.TextProperty, "NombreEvento");
            dataTemplate.SetBinding(TextCell.DetailProperty, "Detalles");


            //var dataTemplate = new DataTemplate(typeof(PendienteSincronizarCustomCell));
            //dataTemplate.SetBinding(PendienteSincronizarCustomCell.NombreTipoEventoProperty, "NombreTipoEvento");
            //dataTemplate.SetBinding(PendienteSincronizarCustomCell.NumeroManifiestoProperty, "NumeroManifiesto");
            //dataTemplate.SetBinding(PendienteSincronizarCustomCell.FechaEventoProperty, "FechaEvento");

            var eventosTexto = eventos.Select(e => new
            {
                NombreEvento = e.NombreTipoEvento + " IdApp: " + e.IdApp,
                Detalles     = (e.FechaEvento.HasValue ? e.FechaEvento.Value.ToString("dd.MM.yyyy HH:mm a") : "--") + " , NumeroManifiesto: " + e.NumeroManifiesto.ToString(),
            }).ToList();


            lvPendientesSincronizar.ItemsSource  = eventosTexto;
            lvPendientesSincronizar.ItemTemplate = dataTemplate;
            activityIndicator.IsRunning          = false;
            activityIndicator.IsVisible          = false;
        }
        private async Task <bool> SincronizarEventosLogisticos()
        {
            EventoLogisticoBLL eventosBLL = new EventoLogisticoBLL();
            var eventosPendientes         = eventosBLL.SeleccionarEventosPendientesSincronizar();

            if (eventosPendientes != null && eventosPendientes.Count > 0)
            {
                eventosPendientes = eventosPendientes.OrderBy(e => e.FechaEvento).ToList();
                List <RespuestaProcesoEventoLogistico> respuestas = new List <RespuestaProcesoEventoLogistico>();
                foreach (EventoLogistico evento in eventosPendientes)
                {
                    respuestas.Add(await eventosBLL.GuardarEventoLogistico(evento));
                }
                if (respuestas != null)
                {
                }
            }
            return(true);
        }
        public async Task EjecutarSincronizacionAutomatica(System.Threading.CancellationToken token)
        {
            bool               ejecutarNuevamente = true;
            TimeSpan           frecuenciaEjecucionSincronizacion = TimeSpan.FromMinutes(5);
            EventoLogisticoBLL eventosBLL = new EventoLogisticoBLL();
            var eventosPendientes         = eventosBLL.SeleccionarEventosPendientesSincronizar();

            if (eventosPendientes != null && eventosPendientes.Count > 0)
            {
                ejecutarNuevamente = true;
            }
            else
            {
                ejecutarNuevamente = false;
            }

            while (ejecutarNuevamente)
            {
                token.ThrowIfCancellationRequested();

                if (await Common.ParametrosSistema.isOnline)
                {
                    eventosPendientes = eventosBLL.SeleccionarEventosPendientesSincronizar();
                    if (eventosPendientes != null && eventosPendientes.Count > 0)
                    {
                        int totalRegistrosSincronizados = 0;
                        try
                        {
                            List <RespuestaProcesoEventoLogistico> respuestas = new List <RespuestaProcesoEventoLogistico>();

                            foreach (EventoLogistico evento in eventosPendientes)
                            {
                                token.ThrowIfCancellationRequested();
                                respuestas.Add(await eventosBLL.GuardarEventoLogistico(evento));
                                totalRegistrosSincronizados++;
                                var message = new TickedMessage
                                {
                                    Message = ((decimal)totalRegistrosSincronizados / (decimal)eventosPendientes.Count).ToString()
                                };

                                Xamarin.Forms.Device.BeginInvokeOnMainThread(() =>
                                {
                                    Xamarin.Forms.MessagingCenter.Send <TickedMessage>(message, "TickedMessage");
                                });
                            }
                        }
                        catch (Exception ex)
                        {
                        }
                        finally
                        {
                            if (totalRegistrosSincronizados == eventosPendientes.Count)
                            {
                                ejecutarNuevamente = false;
                            }
                            else
                            {
                                ejecutarNuevamente = false;
                            }
                        }
                        Xamarin.Forms.DependencyService.Get <INotificationService>().ShowLocalNotification("Sincronización automática", "Se han sincronizado " + eventosPendientes.Count + " registros.", DateTime.Now);
                    }
                    else
                    {
                        //Si no existen registros pendientes por sincronizar se detiene la ejecución de esta función
                        ejecutarNuevamente = false;
                    }
                }
                else
                {
                    ejecutarNuevamente = true;
                }
                await Task.Delay(Convert.ToInt32(frecuenciaEjecucionSincronizacion.TotalMilliseconds));
            }
        }
Beispiel #4
0
        protected async override void OnAppearing()
        {
            base.OnAppearing();

            IsBusy = true;
            btnVerDocumentos.IsVisible = true;
            //activityIndicator.IsRunning = true;
            //activityIndicator.IsVisible = true;

            //********************************************** CREAR TABLA HISTORIALACTIVACION MANIFIESTO *******************************************//
            DatabaseDAO        dao       = new DatabaseDAO();
            EventoLogisticoBLL eventoBLL = new EventoLogisticoBLL();

            if (await ParametrosSistema.isOnline)
            {
                using (var db = DependencyService.Get <ISQLite>().GetConnection())
                {
                    db.DropTable <HistorialActivacionManifiesto>();
                    db.DropTable <Entrega>();
                    db.CreateTable(typeof(Entities.Operaciones.HistorialActivacionManifiesto));
                    db.CreateTable(typeof(Entities.Comercial.Entrega));
                }

                bool?aplicaTerceros = null;
                if (ParametrosSistema.PermisosUsuarioAlmacenado.Count(p => p.NombreOpcion.ToLower() == "eventoslogisticosterceros") > 0)
                {
                    aplicaTerceros = true;
                }


                var transportes = await eventoBLL.SeleccionarTransporteHabilitadoRegistroEventos(consultaLocal : false, tercero : aplicaTerceros);

                if (transportes != null && transportes.Count > 0)
                {
                    Transporte transporte = transportes[0];

                    HistorialActivacionManifiesto historial = new HistorialActivacionManifiesto();
                    historial.Activo             = true;
                    historial.FechaActivacion    = DateTime.Now;
                    historial.NumeroManifiesto   = transporte.NumeroTransporte;
                    historial.Placa              = transporte.Placa;
                    historial.NumeroDocConductor = transporte.NumeroDocConductor.ToString();
                    historial.NombreRuta         = transporte.NombreRuta;
                    historial.UsuarioActivacion  = ParametrosSistema.UsuarioActual;

                    //Se busca localmente el evento de activación del transporte activo
                    var eventosActivacionTransporte = eventoBLL.SeleccionarEventosLogisticos(transporte.NumeroTransporte, codigoTipoEvento: (int)TipoEventoLogisticoEnum.ActivarViaje, consultaLocal: true);
                    if (eventosActivacionTransporte != null & eventosActivacionTransporte.Count > 0)
                    {
                        historial.FechaActivacion = eventosActivacionTransporte[0].FechaEvento;
                    }


                    HistorialActivacionManifiestoDAO historialActivacionDAO = new HistorialActivacionManifiestoDAO();
                    historialActivacionDAO.GuardarHistorialActivacionManifiesto(historial);

                    //Se guardan las entregas del transporte
                    if (transporte.Entregas != null && transporte.Entregas.Count > 0)
                    {
                        EntregaBLL entregaBLL = new EntregaBLL();
                        foreach (Entrega entrega in transporte.Entregas)
                        {
                            try
                            {
                                entregaBLL.GuardarEntrega(entrega);
                            }
                            catch (Exception ex)
                            {
                                DisplayAlert("Error", ex.Message, "Aceptar");
                            }
                        }
                    }
                }
            }

            //********************************************** FIN CREAR TABLA HISTORIALACTIVACION MANIFIESTO *******************************************//

            //EventoLogisticoBLL eventoBLL = new EventoLogisticoBLL();
            var tiposEventos = new List <TipoEventoLogistico>();

            //Se verifica si hay eventos pendientes por sincronizar
            var eventosPendientes = eventoBLL.SeleccionarEventosPendientesSincronizar();

            if (eventosPendientes != null && eventosPendientes.Count > 0 && await ParametrosSistema.isOnline)
            {
                IsBusy = false;
                await DisplayAlert("Atención", "No puede registrar nuevos eventos porque tiene " + eventosPendientes.Count + "  eventos pendientes por sincronizar. Debe ir al menú 'Sincronización' para realizar la sincronización manualmente.", "Aceptar");
            }
            else
            {
                Util util    = new Util();
                bool?tercero = null;
                if (util.UsuarioTienePermiso("eventoslogisticosterceros"))
                {
                    tercero = true;
                }

                List <Transporte> transportesHabilitadosRegistroEventos = new List <Transporte>();
                transportesHabilitadosRegistroEventos = await eventoBLL.SeleccionarTransporteHabilitadoRegistroEventos(!await ParametrosSistema.isOnline, tercero);

                if (transportesHabilitadosRegistroEventos != null && transportesHabilitadosRegistroEventos.Count > 0)
                {
                    viajeActivo = transportesHabilitadosRegistroEventos[0];
                }

                if (viajeActivo == null && tercero == true)
                {
                    DisplayAlert("Alerta", "Ud no posee un viaje activo, por lo tando no puede registrar eventos.", "Aceptar");
                    await Navigation.PushAsync(new HomeView());
                }
                else
                {
                    if (tercero.HasValue && tercero.Value)
                    {
                        if (viajeActivo != null)
                        {
                            try
                            {
                                tiposEventos = await eventoBLL.SeleccionarSiguienteEventoporManifiesto(viajeActivo.NumeroTransporte, consultaLocal : !await ParametrosSistema.isOnline);

                                lblNumeroViajeActivo.Text = viajeActivo.NumeroTransporte.ToString();
                                lblRuta.Text = viajeActivo.NombreRuta;
                            }
                            catch (Exception ex)
                            {
                                DisplayAlert("Alerta", "Ha ocurrido un inconveniente, por favor ingrese nuevamente.", "Aceptar");
                            }
                        }
                        else
                        {
                            tiposEventos = await eventoBLL.SeleccionarSiguienteEventoporManifiesto(0, consultaLocal : !await ParametrosSistema.isOnline);

                            lblNumeroViajeActivo.Text      = "Sin viaje activo";
                            lblNumeroViajeActivo.TextColor = Color.Red;
                            btnVerDocumentos.IsVisible     = false;
                        }
                    }
                    else
                    {
                        TransporteBLL transporteBLL             = new TransporteBLL();
                        HistorialActivacionManifiesto historial = transporteBLL.SeleccionarHistorialManifiestoActivoPorConductor(ParametrosSistema.NumeroIdentificacionUsuarioActual);

                        if (historial != null)
                        {
                            tiposEventos = await eventoBLL.SeleccionarSiguienteEventoporManifiesto(historial.NumeroManifiesto, consultaLocal : !await ParametrosSistema.isOnline);

                            lblNumeroViajeActivo.Text = historial.NumeroManifiesto.ToString();
                            lblRuta.Text = historial.NombreRuta;
                        }
                        else
                        {
                            tiposEventos = await eventoBLL.SeleccionarSiguienteEventoporManifiesto(0, consultaLocal : !await ParametrosSistema.isOnline);

                            lblNumeroViajeActivo.Text      = "Sin viaje activo";
                            lblNumeroViajeActivo.TextColor = Color.Red;
                            btnVerDocumentos.IsVisible     = false;
                        }
                    }
                    //var dataTemplate = new DataTemplate(typeof(TextCell));
                    //dataTemplate.SetBinding(TextCell.TextProperty, "NombreEvento");


                    lvMenuEventos.ItemsSource = tiposEventos;
                    //lvMenuEventos.ItemTemplate = dataTemplate;

                    IsBusy = false;
                    //activityIndicator.IsRunning = false;
                    //activityIndicator.IsVisible = false;
                }
            }
        }