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