public void InputsInit() { // Se limpia el nombre de la empresa Labl_Empresa.Text = ""; Labl_Empresa.IsVisible = false; // Reiniciamos los contadores Unidades_Pistoleadas.Text = "0"; Unidades_Faltantes.Text = "0"; Total_Unidades.Text = "0"; // Vaciamos los inputs Entry_CodeBars.Text = ""; Entry_Alto.Text = ""; Entry_Ancho.Text = ""; Entry_Largo.Text = ""; Entry_Peso.Text = ""; // Desabilitamos los campos de medidas Entry_Alto.IsEnabled = false; Entry_Ancho.IsEnabled = false; Entry_Largo.IsEnabled = false; Entry_Peso.IsEnabled = false; // Se oculta el spinner ActivitySpinner.IsVisible = false; // Posicionamos el cursor Entry_CodeBars.Focus(); // Cambiamos la imagen image_cubic.Source = "camera_icon_gray.png"; // Mostramos la imagen de la cámara image_cubic.IsVisible = true; // Se eliminan todas las lecturas del usuario App.UnidadDatabase.DeleteAllUnidades(); }
public void InputsInit() { // Vaciamos los inputs Entry_CodeBars.Text = ""; Entry_Alto.Text = ""; Entry_Ancho.Text = ""; Entry_Largo.Text = ""; Entry_Peso.Text = ""; Entry_Volumen.Text = ""; Entry_Unidades.Text = "1"; Entry_UnidadesA.Text = "0/0"; Checked_All_Units.Checked = false; // Desabilitamos los campos de medidas Entry_Alto.IsEnabled = false; Entry_Ancho.IsEnabled = false; Entry_Largo.IsEnabled = false; Entry_Peso.IsEnabled = false; Entry_Unidades.IsEnabled = false; // Posicionamos el cursor Entry_CodeBars.Focus(); // Ocultamos el botón de enviar datos ButtonsCubicacion.IsVisible = false; // Reiniciamos el número de unidades imageCubic.Unidades = 1; // Cambiamos la imagen image_cubic.Source = "camera_icon_gray.png"; }
// Método personalizado que inicializa // los componentes de la página void InitComponents() { // Posiciona el cursor Entry_CodeBars.Focus(); // Seteamos las propiedades de la página BackgroundColor = Constants.BackgroundColor; // Desactivamos el spinner de carga ActivitySpinner.IsVisible = false; // Desabilitamos todas las entradas de texto menos la primera Entry_Alto.IsEnabled = false; Entry_Ancho.IsEnabled = false; Entry_Largo.IsEnabled = false; Entry_Peso.IsEnabled = false; Entry_Peso.IsEnabled = false; // Verificamos la conexión a internet CheckConnectivity(); // Capturamos el evento del botón de tomar la foto Btn_CapturePhoto.Clicked += async(sender, args) => { // Se inicializa el plugin await CrossMedia.Current.Initialize(); // Validamos que existan los permisos necesarios // para poder usar la cámara del dispositivo var hasPermission = await Utils.Utils.CheckPermissions(Permission.Camera); if (!hasPermission) { return; } if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported) { await DisplayAlert("No hay Cámara", "La Cámara del dispositivo no se encuentra disponible!", "OK"); return; } try { var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions { PhotoSize = Plugin.Media.Abstractions.PhotoSize.Medium, Directory = "ImagesCubic", Name = "cubic_mobile_" + Entry_CodeBars.Text + ".png" }); if (file == null) { return; } await DisplayAlert("Ubicación del archivo: ", file.Path, "OK"); } catch //(Exception ex) { // Xamarin.Insights.Report(ex); // await DisplayAlert("Uh oh", "Something went wrong, but don't worry we captured it in Xamarin Insights! Thanks.", "OK"); } }; // Al oprimir enter posiciona el cursor // en la siguiente entrada de texto Entry_CodeBars.Completed += async(s, e) => { // Validamos que haya digitado el código de barras if (!String.IsNullOrWhiteSpace(Entry_CodeBars.Text)) { // Verificamos que exista conexión a internet if (Constants.hasInternet) { // Creamos un hilo de ejecución para consumir el servicio del login Device.BeginInvokeOnMainThread(async() => { // Mostramos el spinner de carga ActivitySpinner.IsVisible = true; // Consumimos el servicio de autenticación de Solex var result = await App.RestClient.GetExistsBarCode(Entry_CodeBars.Text); // Verificamos que el servicio haya devuelto una respuesta if (result != null) { if (result.IsSuccess) { // Habilitamos los campos de medidas Entry_Alto.IsEnabled = true; Entry_Ancho.IsEnabled = true; Entry_Largo.IsEnabled = true; Entry_Peso.IsEnabled = true; // Posicionamos el cursor Entry_Alto.Focus(); // Verificamos el número de unidades de la guía if (result.CodError > 1) { // Mostramos la cantidad de unidades de la guía Count_Units.Text = "La guía contiene " + result.CodError + " unidades."; } else { // Mostramos el mensaje que indica que la guía solo contiene una unidad Count_Units.Text = "La guía contiene una sola unidad."; } // Mostramos el mensaje Count_Units.IsVisible = true; } else { // Mostramos el error de Solex await DisplayAlert("Respuesta de Solex", result.Error, "OK"); // Limpiamos la caja de texto Entry_CodeBars.Text = ""; // Posicionamos el cursor Entry_CodeBars.Focus(); } } else { // Mostramos el mensaje que devuelve Solex en caso de que algo esté mal // con el usuario que está intentando ingresar await DisplayAlert("Mensaje Informativo", "Ocurrió un error al intentar enviar las medidas", "OK"); // Limpiamos la caja de texto Entry_CodeBars.Text = ""; // Posicionamos el cursor Entry_CodeBars.Focus(); } // Desabilitamos el spinner de carga ActivitySpinner.IsVisible = false; }); } else { await DisplayAlert("Error de conexión!", "No se encuentra una conexión estable a internet.", "OK"); } } else { await DisplayAlert("Error de campos!", "Primero debe digitar el código de barras.", "OK"); Entry_CodeBars.Focus(); } }; Entry_Alto.Completed += (s, e) => Entry_Ancho.Focus(); Entry_Ancho.Completed += (s, e) => Entry_Largo.Focus(); Entry_Largo.Completed += (s, e) => Entry_Peso.Focus(); }
// Evento de aparición de la página protected override void OnAppearing() { // Posicionamos el cursor Entry_CodeBars.Focus(); }
// Método personalizado que inicializa // los componentes de la página void InitComponents() { // Posiciona el cursor Entry_CodeBars.Focus(); // Seteamos las propiedades de la página BackgroundColor = Constants.BackgroundColor; Unidades_Pistoleadas.BackgroundColor = Color.FromHex("00549F"); Unidades_Faltantes.BackgroundColor = Color.FromHex("00549F"); Total_Unidades.BackgroundColor = Color.FromHex("00549F"); // Desactivamos el spinner de carga ActivitySpinner.IsVisible = false; // Desabilitamos todas las entradas // de texto menos la primera Entry_Alto.IsEnabled = false; Entry_Ancho.IsEnabled = false; Entry_Largo.IsEnabled = false; Entry_Peso.IsEnabled = false; // Verificamos la conexión a internet CheckConnectivity(); // Al oprimir enter posiciona el cursor // en la siguiente entrada de texto Entry_CodeBars.Completed += async(s, e) => { // Función que verifica que exista el código de barras await VerifyCodeBars(); }; Entry_Largo.Completed += async(s, e) => { try { if (Convert.ToDouble(Entry_Largo.Text) > 0) { // Esperamos medio segundo await Task.Factory.StartNew(() => { // Habilitamos el siguiente campo Entry_Alto.IsEnabled = true; }); await Task.Delay(500); // Posicionamos el cursor Entry_Alto.Focus(); } else { var response = await DisplayAlert("Error de campos!", "Primero debe digitar el largo en centímetros.", "OK", "CANCEL"); // Verificamos la respuesta if (response) { // Posicionamos el cursor Entry_Largo.Focus(); } } } catch (Exception er) { // Imprimirmos el error Debug.WriteLine(er); // Limpiamos la caja de texto Entry_Largo.Text = ""; // Posicionamos el cursor Entry_Largo.Focus(); } }; Entry_Alto.Completed += async(s, e) => { try { if (Convert.ToDouble(Entry_Alto.Text) > 0) { // Esperamos medio segundo await Task.Factory.StartNew(() => { // Habilitamos el siguiente campo Entry_Ancho.IsEnabled = true; }); await Task.Delay(500); // Posicionamos el cursor Entry_Ancho.Focus(); } else { var response = await DisplayAlert("Error de campos!", "Primero debe digitar la altura en centímetros.", "OK", "CANCEL"); // Verificamos la respuesta if (response) { // Posicionamos el cursor Entry_Alto.Focus(); } } } catch (Exception er) { // Imprimirmos el error Debug.WriteLine(er); // Limpiamos la caja de texto Entry_Alto.Text = ""; // Posicionamos el cursor Entry_Alto.Focus(); } }; Entry_Ancho.Completed += async(s, e) => { try { if (Convert.ToDouble(Entry_Ancho.Text) > 0) { // Esperamos medio segundo await Task.Factory.StartNew(() => { // Habilitamos el siguiente campo Entry_Peso.IsEnabled = true; }); await Task.Delay(500); // Posicionamos el cursor Entry_Peso.Focus(); // Obtenemos el valor de el largo, alto y ancho de la unidad double largo_unidad = Convert.ToDouble(Entry_Largo.Text); double alto_unidad = Convert.ToDouble(Entry_Alto.Text); double ancho_unidad = Convert.ToDouble(Entry_Ancho.Text); // Calculamos el volumen de la unidad en base a su alto y ancho double volumen_unidad = ((largo_unidad * alto_unidad * ancho_unidad) / 1000000) * 400; // Asignamos el valor del volumen massiveCubic.Volumen = volumen_unidad; } else { var response = await DisplayAlert("Error de campos!", "Primero debe digitar el ancho en centímetros.", "OK", "CANCEL"); // Verificamos la respuesta if (response) { // Posicionamos el cursor Entry_Ancho.Focus(); } } } catch (Exception er) { // Imprimirmos el error Debug.WriteLine(er); // Limpiamos la caja de texto Entry_Ancho.Text = ""; // Posicionamos el cursor Entry_Ancho.Focus(); } }; Entry_Peso.Completed += async(s, e) => { // Abrimos la vista de la cámara del dispositivo await OpenCameraAsync(s, e); }; Btn_ClearRows.Clicked += (s, e) => { // Inicializamos los inputs InputsInit(); }; Btn_CaptureNewPhoto.Clicked += async(s, e) => { // Abrimos la vista de la cámara del dispositivo await OpenCameraAsync(s, e); }; // Evento que el escaner de código de barras Btn_ScannerCodeBars.Clicked += (s, e) => { ScanningPage(s, e); }; }
public async Task VerifyCodeBars() { try { // Validamos que haya digitado el código de barras if (!string.IsNullOrWhiteSpace(Entry_CodeBars.Text)) { // Verificamos que exista conexión a internet if (Constants.hasInternet) { // Creamos un hilo de ejecución para consumir el servicio del login Device.BeginInvokeOnMainThread(async() => { // Mostramos el spinner de carga ActivitySpinner.IsVisible = true; // Se oculta la imágen de la cámara image_cubic.IsVisible = false; // Consumimos el servicio de autenticación de Solex var result = await App.RestClient.GetExistsBarCode(Entry_CodeBars.Text); // Verificamos que el servicio haya devuelto una respuesta if (result != null) { // Verificamos que la respuesta sea afirmativa if (result.Response.IsSuccess) { // Se verifica que exista información de la unidad if (result.Unidades != null) { // Verificamos si ya se pistoleo la unidad var exist_unidad = App.UnidadDatabase.GetUnidadByIdSolex(result.Unidades.IdUnidad); // Si la unidad ya fue leída if (exist_unidad != null) { // Mostramos el mensaje de alerta await DisplayAlert("Mensaje Informativo", "Unidad ya leída.", "OK"); // Limpiamos el nombre de la empresa Labl_Empresa.Text = ""; // Visualización del label Labl_Empresa.IsVisible = false; // Se limpia el valor de la entrada Entry_CodeBars.Text = ""; // Se posiciona el cursor Entry_CodeBars.Focus(); // Salimos de la función return; } // Si la unidad ya fue cubicada por sorter if (result.Unidades.Sorter) { // Mostramos el mensaje de alerta await DisplayAlert("Mensaje Informativo", "La unidad ya fue cubicada por Sorter.", "OK"); // Limpiamos el nombre de la empresa Labl_Empresa.Text = ""; // Visualización del label Labl_Empresa.IsVisible = false; // Se limpia el valor de la entrada Entry_CodeBars.Text = ""; // Se posiciona el cursor Entry_CodeBars.Focus(); // Salimos de la función return; } else { // Se verifica si la unidad ya fue cubicada if (result.Unidades.Cubicada) { // Mostramos el mensaje de alerta var response = await DisplayAlert("Mensaje Informativo", "La unidad ya fue cubicada, ¿Desea actualizar su medidas?.", "SI", "NO"); // Si la respuesta es negativa if (!response) { // Limpiamos el nombre de la empresa Labl_Empresa.Text = ""; // Visualización del label Labl_Empresa.IsVisible = false; // Se limpia el valor de la entrada Entry_CodeBars.Text = ""; // Se posiciona el cursor Entry_CodeBars.Focus(); // Salimos de la función return; } } } // Se verifica si es la primera lectura de la guía if (massiveCubic.Id_Guia <= 0) { // Se asignan los datos de la guía massiveCubic.Id_Guia = Convert.ToInt64(result.Unidades.IdGuia); } else { if (massiveCubic.Id_Guia != result.Unidades.IdGuia) { // Mostramos el mensaje de alerta await DisplayAlert("Mensaje Informativo", "La unidad pertenece a una guía diferente.", "OK"); // Limpiamos el nombre de la empresa Labl_Empresa.Text = ""; // Visualización del label Labl_Empresa.IsVisible = false; // Se limpia el valor de la entrada Entry_CodeBars.Text = ""; // Se posiciona el cursor Entry_CodeBars.Focus(); // Salimos de la función return; } } // Si la empresa no se ha mostrado if (string.IsNullOrWhiteSpace(Labl_Empresa.Text)) { // Asignamos el nombre de la empresa Labl_Empresa.Text = result.Unidades.Empresa; } // Si no se ha mostrado if (!Labl_Empresa.IsVisible) { // Visualización del label Labl_Empresa.IsVisible = true; } // Instanciación de la unidad Unidad unidad = new Unidad { IdGuia = massiveCubic.Id_Guia, NumeroUnidad = result.Unidades.NumeroUnidad, IdUnidad = result.Unidades.IdUnidad, ControlledUserId = Constants.CurrentUser.IdSolex }; // Registro de la unidad App.UnidadDatabase.SaveUnidad(unidad); // Se llama a la función que actualiza los contadores UpdateCountsLabel(result); } else { // Limpiamos el nombre de la empresa Labl_Empresa.Text = ""; // Visualización del label Labl_Empresa.IsVisible = false; // Mostramos el error de Solex await DisplayAlert("Respuesta de Solex", "No se pudo obtener infromación de la unidad.", "OK"); } // Se limpia el valor de la entrada Entry_CodeBars.Text = ""; // Se posiciona el cursor Entry_CodeBars.Focus(); // Se habilitada la entrada para empezar a digitar las medidas Entry_Largo.IsEnabled = true; } else { // Limpiamos el nombre de la empresa Labl_Empresa.Text = ""; // Visualización del label Labl_Empresa.IsVisible = false; // Se limpia el valor de la entrada Entry_CodeBars.Text = ""; // Se posiciona el cursor Entry_CodeBars.Focus(); // Mostramos el error de Solex await DisplayAlert("Respuesta de Solex", result.Response.Error, "OK"); } } else { // Limpiamos el nombre de la empresa Labl_Empresa.Text = ""; // Visualización del label Labl_Empresa.IsVisible = false; // Se limpia el valor de la entrada Entry_CodeBars.Text = ""; // Se posiciona el cursor Entry_CodeBars.Focus(); // Mostramos el mensaje que devuelve Solex en caso de que algo esté mal // con el usuario que está intentando ingresar await DisplayAlert("Mensaje Informativo", "Ocurrió un error al intentar verificar el código de barras.", "OK"); } // Ocultamos el spinner de carga ActivitySpinner.IsVisible = false; // Se muestra la imágen de la cámara image_cubic.IsVisible = true; }); } else { await DisplayAlert("Error de conexión!", "No se encuentra una conexión estable a internet.", "OK"); } } else { await DisplayAlert("Error de campos!", "Primero debe digitar el código de barras.", "OK"); // Se posiciona el cursor Entry_CodeBars.Focus(); } } catch (Exception ex) { Debug.WriteLine("Error: " + ex.Message); await DisplayAlert("Ocurrió un error!", "Digite o pistolee nuevamente el código de barras de la unidad.", "OK"); // Se limpia el valor de la entrada Entry_CodeBars.Text = ""; // Se posiciona el cursor Entry_CodeBars.Focus(); // Ocultamos el spinner de carga ActivitySpinner.IsVisible = false; // Se oculta la imágen de la cámara image_cubic.IsVisible = false; } }
public async Task VerifyCodeBars() { try { // Validamos que haya digitado el código de barras if (!string.IsNullOrWhiteSpace(Entry_CodeBars.Text)) { // Verificamos que exista conexión a internet if (Constants.hasInternet) { // Creamos un hilo de ejecución para consumir el servicio del login Device.BeginInvokeOnMainThread(async() => { // Ocultamos el botón de enviar datos Btn_Send.IsVisible = false; // Mostramos el spinner de carga ActivitySpinner.IsVisible = true; // Consumimos el servicio de autenticación de Solex var result = await App.RestClient.GetExistsBarCode(Entry_CodeBars.Text); // Verificamos que el servicio haya devuelto una respuesta if (result != null) { // Verificamos que la respuesta sea afirmativa if (result.Response.IsSuccess) { // Habilitamos el siguiente campo Entry_Largo.IsEnabled = true; // Total de unidades de la guía Entry_Unidades.Text = result.Unidades.Total.ToString(); // Guardamos las unidades en el objeto imageCubic.Unidades = result.Unidades.Total; // Relación del número de unidades auditadas Entry_UnidadesA.Text = ((result.Unidades.Auditadas <= 0) ? 1 : result.Unidades.Auditadas) + "/" + result.Unidades.Total; // Posicionamos el cursor Entry_Largo.Focus(); } else { // Mostramos el error de Solex await DisplayAlert("Respuesta de Solex", result.Response.Error, "OK"); } } else { // Mostramos el mensaje que devuelve Solex en caso de que algo esté mal // con el usuario que está intentando ingresar await DisplayAlert("Mensaje Informativo", "Ocurrió un error al intentar verificar el código de barras.", "OK"); } // Desabilitamos el spinner de carga ActivitySpinner.IsVisible = false; }); } else { await DisplayAlert("Error de conexión!", "No se encuentra una conexión estable a internet.", "OK"); } } else { await DisplayAlert("Error de campos!", "Primero debe digitar el código de barras.", "OK"); Entry_CodeBars.Focus(); } } catch (Exception ex) { Debug.WriteLine("Error: " + ex.Message); await DisplayAlert("Ocurrió un error!", "Digite o pistolee nuevamente el código de barras de la unidad.", "OK"); Entry_CodeBars.Text = ""; Entry_CodeBars.Focus(); } }