Ejemplo n.º 1
0
        private async void OnAddItem(object sender, EventArgs e)
        {
            //VARIABLE QUE RECIBIRA LA RESPUESTA AL METODO DE GUARDADO
            bool response = false;

            if (await DisplayAlert("Alerta",
                                   DatosPagina.CreacionItemsMethodMessage,
                                   DatosPagina.AffirmativeText,
                                   DatosPagina.NegativeText))
            {
                //SE VERIFICAN QUE LOS CAMPOS DEL NUEVO ITEM A REGISTRAR NO SE
                //ENCUENTREN VACIOS
                if (!string.IsNullOrEmpty(entryDescripcion.Text) &&
                    !string.IsNullOrEmpty(entryCantidad.Text))
                {
                    //SE EVALUA QUE EL CAMPO DESCRIPCION NO CONTENGA UN CARACTER PROHIBIDO
                    if (!Metodos.Caracteres(DatosPagina.Descripcion))
                    {
                        //SE ACTIVA EL ACTIVITY INDICATOR MIENTRAS SE EJECUTA DE MANERA ASINCRONA LA FUNCION REGISTRARTABLERO
                        ActivityIndicator.IsVisible = true;
                        ActivityIndicator.IsRunning = true;
                        //SE INICIA EL LLAMADO ASINCRONO DE LA FUNCION "ModificacionRegistroItems"
                        await Task.Run(async() =>
                        {
                            //RECIBIMOS LA LISTA RETORNADA EN EL LLAMADO DE LA FUNCION "ModificacionRegistroItems"
                            response = await DatosPagina.CrearRegistroItem();
                            //DETENEMOS EL ACTIVITY INDICATO
                            ActivityIndicator.IsRunning = false;
                        });

                        //VOLVEMOS INVISIBLE EL ACTIVITY INDICATOR
                        ActivityIndicator.IsVisible = false;

                        //EVALUAMOS EL RESULTADO OBTENIDO EN EL LLAMADO A LA FUNCION "ModificacioNRegistroItems"
                        if (response) //TRUE => SE MODIFICO EL ITEM SELECCIONADO
                        {
                            //INICIALIZACION DEL PATRON "Publisher - Subscriber" (SEND en este caso) DONDE
                            //ENVIAREMOS LA LISTA DE ITEMS DEL TABLERO AL QUE PERTENECE EL ITEM QUE ACABAMOS DE MODIFICAR
                            MessagingCenter.Send <PaginaCrearItems, List <ItemTablero> >(this, App.ItemAdd, DatosPagina.Items);
                            //CERRAMOS LA PAGINA POP-UP "PaginaModificacionItems"
                            await Navigation.PopAllPopupAsync();
                        }
                        else //FALSE => NO SE MODIFICO EL ITEM SELECCIONADO
                        {
                            //SE NOTIFICA POR PANTALLA AL USUARIO UN MENSAJE INDICANDO EL ERROR DE LA MODIFICACION.
                            DatosPagina.MensajePantalla(DatosPagina.HttpErrorResponse);
                        }
                    }
                    else
                    {
                        //SE LE NOTIFICA AL USUARIO QUE EL CAMPO "Descripcion" NO PUEDE CONTENER CARACTERES PROHIBIDOS
                        await DisplayAlert("Alerta", DatosPagina.ItemDescriptionText, DatosPagina.OkText);
                    }
                }
                //UNO DE LOS DOS CAMPOS (O LOS DOS) SE ENCUENTRA NULO O VACIO
                else
                {
                    //SE NOTIFICA POR PANTALLA AL USUARIO CUAL DE LAS DOS PROPIEDADES SE ENCUENTRA VACIA
                    DatosPagina.MensajePantalla(DatosPagina.AddItemMessage);
                }
            }
        }
        //=================================================================================================
        //=================================================================================================
        //METODO PARA ESCANEAR (CAMARA)
        async private void Escanear(object sender, EventArgs e)
        {
            //SE CREA E INICIALIZA LA VARIABLE "SearchStatus"
            //VARIABLE QUE INDICARA SI EL ESTATUS DE BUSQUEDA FUE SATISFACTORIO (SE OBTUVO UN RESULTADO) => TRUE
            //VARIABLE QUE INDICARA SI EL ESTATUS DE BUSQUEDA NO FUE SATISFACTORIO (NO SE OBTUVO UN RESULTADO) => FALSE
            bool SearchStatus = false;

            //===============================================================
            //===============================================================
            //SE NOTIFICA DESDE DONDE SE HACE LA CONSULTA DE TABLERO
            DatosPagina.TipoDeConsulta = "CONSULTA_ESCANER";

            //===============================================================
            //===============================================================
            //SE LLENAN EL OBJETO Opciones CON LAS OPCIONES QUE
            //SE VERAN DISPONIBLES EN LA PANTALLA DE SCANEO
            MobileBarcodeScanningOptions Opciones = new MobileBarcodeScanningOptions()
            {
                AutoRotate = false,
                UseFrontCameraIfAvailable = false,
            };

            //===============================================================
            //===============================================================
            //SE CREA LA PAGINA SCAN
            ZXingScannerPage PaginaScan = new ZXingScannerPage(Opciones)
            {
                DefaultOverlayShowFlashButton = true,
                DefaultOverlayBottomText      = "Escanea el codigo QR",
            };

            //===============================================================
            //===============================================================
            //SE GENERA UN LLAMADO DE NAVEGACION A LA PAGINA SCAN
            await App.MasterDetail.Navigation.PushModalAsync(PaginaScan);

            PaginaScan.OnScanResult += (result) =>
            {
                //SI SE TIENE UN RESULTADO SE DETIENE EL SCANEO
                PaginaScan.IsScanning = false;

                Device.BeginInvokeOnMainThread(async() =>
                {
                    //SE CIERRA LA PAGINA DE SCANEO
                    await App.MasterDetail.Navigation.PopModalAsync();

                    //SE OCULTA EL FRAME QUE CONTENDRAN LOS RESULTADOS DE BUSQUEDA
                    FrameInformacionBasica.IsVisible             = FrameItemsTablero.IsVisible
                                                                 = FrameCodigoQR.IsVisible = BotonEliminar.IsVisible = false;

                    //SE ACTIVA EL "ActivityIndicator" MIENTRAS DE MANERA ASINCRONA SE REALIZA EL LLAMADO DEL TABLERO
                    ActivityIndicator.IsVisible = true;
                    ActivityIndicator.IsRunning = true;
                    await Task.Run(async() =>
                    {
                        //SE HACE UN LLAMADO AL METODO BUSQUEDA DEL OBJETO "DatosPagina" EL CUAL RETORNARA:
                        //TRUE = SE CONSIGUIO EL TABLERO
                        //FALSE = NO SE CONSIGUIO EL TABLERO O HUBO ALGUN ERROR EN EL PROCESO DE BUSQUEDA
                        SearchStatus = await DatosPagina.BuscarTablero(result.Text);
                        ActivityIndicator.IsRunning = false;
                    });

                    ActivityIndicator.IsVisible = false;

                    if (SearchStatus)
                    {
                        //SE CAMBIA LA VISIBILIDAD DEL "FrameResultado" CON LOS RESULTADOS
                        FrameInformacionBasica.IsVisible = FrameItemsTablero.IsVisible = FrameCodigoQR.IsVisible = SearchStatus;
                        //SI EL USUARIO TIENE UN NIVEL SUPERIOR O IGUAL A 5 SE HABILITA EL BOTON DE ELIMINAR
                        if (DatosPagina.NivelUsuario >= 5)
                        {
                            BotonEliminar.IsVisible = SearchStatus;
                        }
                        //------------------------------------------------------------------------------------------------
                        //SE LLENAN (MANUALMENTE) CADA UNO DE LOS CAMPOS DE INFORMACION
                        idtablero.Text             = DatosPagina.TableroID;
                        sapid.Text                 = DatosPagina.SapID;
                        filialtablero.Text         = DatosPagina.Filial;
                        areatablero.Text           = DatosPagina.Area;
                        ultimaconsultatablero.Text = DatosPagina.UltimaFechaConsulta.ToString();
                        //EVALUAMOS CUANTOS ITEMS SE ENCUENTRAN ASIGNADOS AL TABLERO
                        if (DatosPagina.Items.Count > 0) //=> MAS DE CERO (AL MENOS UNO)
                        {
                            //SE VUELVEN VISIBLES LA LISTA, LA CABECERA DE LA LISTA
                            gridItemsTablero.IsVisible = listViewItems.IsVisible = AddItemsLabel.IsVisible = true;
                            NoItemsLabel.IsVisible     = false;
                            //LLENAMOS LA LISTVIER "litviewItems" CON LA LISTA DE ITEMS
                            listViewItems.ItemsSource = DatosPagina.Items;
                            //DIMENSIONAMOS LA ALTURA DE ACUERDO A LA CANTIDAD DE ITEMS DE LA VIDA
                            listViewItems.HeightRequest = (DatosPagina.Items.Count * HeightRow);
                        }
                        else //=> MENOS DE CERO
                        {
                            //SE VUELVEN INVISIBLES LA LISTA, LA CABECERA DE LA LISTA
                            gridItemsTablero.IsVisible = listViewItems.IsVisible = AddItemsLabel.IsVisible = false;
                            NoItemsLabel.IsVisible     = true;
                        }
                        codigoqrtablero.Source = ImageSource.FromStream(() => new MemoryStream(DatosPagina.CodigoQRbyte));
                        //------------------------------------------------------------------------------------------------
                    }
                    else
                    {
                        //SE CAMBIA LA VISIBILIDAD DEL "FrameResultado" CON LOS RESULTADOS
                        FrameInformacionBasica.IsVisible = FrameItemsTablero.IsVisible = FrameCodigoQR.IsVisible = SearchStatus;
                        //SI EL USUARIO TIENE UN NIVEL SUPERIOR O IGUAL A 5 SE HABILITA EL BOTON DE ELIMINAR
                        if (DatosPagina.NivelUsuario >= 5)
                        {
                            BotonEliminar.IsVisible = SearchStatus;
                        }
                        //SE VUELVE A REAJUSTAR EL TAMAÑO DE LA LISTA DE ITEMS
                        listViewItems.HeightRequest = 0;
                        //SE INFORMA AL USUARIO QUE EL TABLERO QUE ACABA DE SER ESCANEADO NO FUE LOCALIZADO
                        //Toast.MakeText(Android.App.Application.Context, DatosPagina.HttpErrorResponse, ToastLength.Long).Show();
                        DatosPagina.MensajePantalla(DatosPagina.HttpErrorResponse);
                    }
                    //=============================================================================
                    //=============================================================================
                });
            };
        }
        //==========================================================================
        //==========================================================================
        //METODO PARA GENERAR UN NUEVO REGISTRO DE TABLERO
        private async void RegistrarTablero(object sender, EventArgs e)
        {
            //VARIABLE QUE RECIBIRA LA RESPUESTA AL METODO DE GUARDADO
            string respuesta = string.Empty;

            //SE REALIZA LA PREGUNTA AL USUARIO SOBRE SI DERESEA REGISTRAR EL TABLERO EN LA BASE DE DATOS
            //SE EVALUA LA RESPUESTA OBTENIDA DIRECTAMENTE EN EL CONDICIONAL
            if (await DisplayAlert("Alerta", DatosPagina.RegistrarTableroMethodMessage, DatosPagina.AffirmativeText, DatosPagina.NegativeText))
            {
                //SE EVALUA LA CANTIDAD DE ITEMS CONTENIDOS EN LA LISTA "items"
                if (Items.Count > 0) //EXISTE AL MENOS UN ITEM DENTRO DE LA LISTA DE ITEMS
                {
                    //SE ACTIVA EL ACTIVITY INDICATOR MIENTRAS SE EJECUTA DE MANERA ASINCRONA LA FUNCION REGISTRARTABLERO
                    ActivityIndicator.IsVisible = true;
                    ActivityIndicator.IsRunning = true;
                    await Task.Run(async() =>
                    {
                        respuesta = await DatosPagina.RegistrarTablero(Items);
                        ActivityIndicator.IsRunning = false;
                    });

                    ActivityIndicator.IsVisible = false;
                }
                else //NO EXISTE NINGUN ITEM DENTRO DE LA LISTA DE ITEMS
                {
                    //SE LE PREGUNTA AL USUARIO SI DESEA CONTINUAR CON EL REGISTRO A PESAR DE NO HABER INGRESADO ITEMS DENTRO DEL TABLERO
                    if (await DisplayAlert("Alerta", DatosPagina.NoItemsText + "\n\n¿Desea continuar el registro?", DatosPagina.AffirmativeText, DatosPagina.NegativeText))
                    {
                        //SE ACTIVA EL ACTIVITY INDICATOR MIENTRAS SE EJECUTA DE MANERA ASINCRONA LA FUNCION REGISTRARTABLERO
                        ActivityIndicator.IsVisible = true;
                        ActivityIndicator.IsRunning = true;
                        await Task.Run(async() =>
                        {
                            respuesta = await DatosPagina.RegistrarTablero(Items);
                            ActivityIndicator.IsRunning = false;
                        });

                        ActivityIndicator.IsVisible = false;
                    }
                }
            }

            //SE EVALUA SI LA VARIABLE RETORNADA SE ENCUENTRA VACIA O NULA
            //VACIA O NULA => SE REGISTRO SATISFACTORIAMENTE
            //NO VACIA O NULA => NO SE PUDO REALIZAR EL REGISTRO
            if (!string.IsNullOrEmpty(respuesta))
            {
                //SE MUESTRA POR MENSAJE DE CONSOLA Y DE ALERTA LA RESPUESTA OBTENIDA POR EL METODO REGISTRO TABLERO
                DatosPagina.MensajePantalla(respuesta);

                //EVALUAMOS SI LA RESPUESTA OBTENIDA ES DE REGISRO EXITOSO
                if (respuesta.ToLower() == "registro exitoso")
                {
                    //SE ESCONDE LA SECCION (FRAME) QUE CONTENDRA EL CODIGO QR
                    CODIGO.IsVisible = false;

                    //SE HABILITA EL BOTON DE GENERAR CODIGO
                    BotonGenerar.IsVisible = BotonGenerar.IsEnabled = true;

                    //SE DESHABILITA EL BOTON DE GUARDAR EL TABLERO (CODIGOQR)
                    BotonImagen.IsVisible = BotonImagen.IsEnabled = false;

                    //SE DESHABILITA EL BOTON DE REGISTRAR EL TABLERO
                    BotonRegistrar.IsVisible = BotonRegistrar.IsEnabled = false;

                    //SE ESCONDE LA SECCION DE INFORMACION DEL TABLERO
                    FrameItemsTablero.IsVisible = false;

                    //SE LIMPIA LA INFORMACION DE LOS CAMPOS
                    entryTableroID.Text = entrySAPID.Text = entryArea.Text = entryDescripcion.Text = entryCantidad.Text = string.Empty;
                    //SE INDICA EL NUMERO DE INDICE DEL PICKER AL CUAL DAR SET
                    filialPicker.SelectedIndex = default;
                    //SE LIMPIA LA LISTA DE ITEMS
                    listViewItems.ItemsSource = null;
                    //SE LIMPIA LA VARIABLE
                    Items = new List <ItemTablero>();
                    //ESCONDEMOS LA LISTA DE ITEMS
                    listaItems.IsVisible = false;

                    //SE REMUEVE TODO ELEMENTO QUE SE ENCUENTRE DENTRO DEL STACKLAYOUT DEL FRAME "CODIGO"
                    StackQR.Children.Clear();
                }
            }
        }