public async Task <T> SaveDetailOrdenCargue <T>(RequestDatosOrden request_orden) { try { AuthorizationRequest(); string ContentType = "application/json"; var Result = await client.PostAsync( urlBase + Constants.SaveDetalleOrdenCargue, new StringContent( JsonConvert.SerializeObject(request_orden), Encoding.UTF8, ContentType ) ); if (Result.StatusCode == System.Net.HttpStatusCode.OK) { var JsonResult = Result.Content.ReadAsStringAsync().Result; var ContentResp = JsonConvert.DeserializeObject <T>(JsonResult); return(ContentResp); } } catch (Exception ex) { Debug.WriteLine(ex.Message); } return(default(T)); }
// Método general de esta clase utilizado para guardar // en base de datos todos los cambios que se hayan hecho en la orden de cargue private async Task SaveChangesAsync(bool direct = true) { // Verificamos los campos necesarios if (CheckInputs()) { // Actualizamos el valor de algunos campos // en base a los entry de la página ordenSelected.Receives = Entry_Receives.Text; ordenSelected.DocumentosRecogidos = Convert.ToDecimal(Entry_DocsRecogidos.Text); ordenSelected.Updated_at = DateTime.Now; ordenSelected.UnidadesRecogidas = Convert.ToDecimal(Entry_UndsRecogidas.Text); // En dado caso de que haya conexión a internet if (CheckNetworkConnection()) { // Preguntanmos al usuario si desea enviar la información a Solex if (!direct) { direct = await DisplayAlert("Mensaje de Confirmación!.", "¿Desea enviar la información de la orden de cargue a Solex?", "ACEPTAR", "CANCELAR"); } if (direct) { Device.BeginInvokeOnMainThread(async() => { // Fecha de registro de l estado string fecha_registro_estado = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // Mostramos el spinner de carga ActivitySpinner.IsVisible = true; // Se mapean los campos necesarios para el objeto estado RequestEstadoOrden request_estado = new RequestEstadoOrden { OrdenId = ordenSelected.Id, EstadoId = selectedEstadoOrden.IdSolex, Fecha = fecha_registro_estado, Descripcion = "Estado generado desde SolexMobile.", OperadorUsuarioId = Constants.CurrentUser.IdSolex }; // Se crea el objeto de envío a Solex RequestDatosOrden request_orden = new RequestDatosOrden { EntregaNombre = ordenSelected.Receives, DocumentosRecogidos = ordenSelected.DocumentosRecogidos, UsuarioId = Constants.CurrentUser.IdSolex, UsuarioLogin = Constants.CurrentUser.Username, UltimoEstado = request_estado, UnidadesRecogidas = ordenSelected.UnidadesRecogidas }; // Obtenemos la respuesta después de consumir el servicio var response_orden = await App.RestClient.SaveDetailOrdenCargue <ResponseSave>(request_orden); // Verificamos el resultado de la petición if (response_orden != null) { if (!response_orden.IsSuccess) { await DisplayAlert("Mensaje Informativo!", response_orden.Error, "ACEPTAR"); } else { // Actualiamos el último estado de la orden de cargue ordenSelected.UltimoEstadoId = selectedEstadoOrden.IdSolex; // S el estado es LLEGÓ AL PUNTO if (ordenSelected.UltimoEstadoId == Constants.ESTADO_ORDEN_LLEGO_PUNTO) { // Asignamos la fecha de registro ordenSelected.ArrivalDate = fecha_registro_estado; // Marcamos la orden de cargue como que ya llegó al punto ordenSelected.Arrival = true; // Cambiamos los estilos del botón de llegada al punto Btn_ArrivalToThePoint.BackgroundColor = Color.FromHex(Constants.CODIGO_COLOR_LLEGADA_PUNTO.Replace("#", "")); // Actualizamos el color de la fila ordenSelected.ColorButtonRow = Constants.CODIGO_COLOR_LLEGADA_PUNTO; // Ocultamos el spinner de carga ActivitySpinner.IsVisible = false; // Mensaje informativo await DisplayAlert("Mensaje Informativo!", "La llegada al punto fue registrada correctamente.", "ACEPTAR"); } // Si el estado es ORDEN EXITOSA else if (ordenSelected.UltimoEstadoId == Constants.ESTADO_ORDEN_EXITOSA) { // Asignamos la fecha de registro ordenSelected.DeliveredDate = fecha_registro_estado; // Marcamos la orden de cargue como que ya fue exitosa ordenSelected.Delivered = true; // Marcamos la orden de cargue como controlada ordenSelected.Controlled = true; // Cambiamos los estilos del botón de orden exitosa Btn_SaveDoneDetails.BackgroundColor = Color.FromHex(Constants.CODIGO_COLOR_ORDEN_EXITOSA.Replace("#", "")); // Actualizamos el color de la fila ordenSelected.ColorButtonRow = Constants.CODIGO_COLOR_ORDEN_EXITOSA; } // Si el estado es ORDEN NO EXITOSA else if (ordenSelected.UltimoEstadoId == Constants.ESTADO_ORDEN_NO_EXITOSA) { // Asignamos la fecha de registro ordenSelected.DeliveredDate = fecha_registro_estado; // Marcamos la orden de cargue como que ya fue exitosa ordenSelected.Delivered = true; // Marcamos la orden de cargue como controlada ordenSelected.Controlled = true; // Cambiamos los estilos del botón de orden no exitosa Btn_SaveDoneDetails.BackgroundColor = Color.FromHex(Constants.CODIGO_COLOR_ORDEN_NO_EXITOSA.Replace("#", "")); // Actualizamos el color de la fila ordenSelected.ColorButtonRow = Constants.CODIGO_COLOR_ORDEN_NO_EXITOSA; } } // Llamamos al método que guarda los cambios de la orden de cargue en BD App.OrdenCargueDatabase.SaveOrdenCargue(ordenSelected); // Ocultamos el spinner de carga ActivitySpinner.IsVisible = false; // Verificamos que el estado sea diferente // a la llegada al punto if (ordenSelected.UltimoEstadoId != Constants.ESTADO_ORDEN_LLEGO_PUNTO) { // Nos devolvemos al listado de ordenes de cargue MainListOpen(); } } else { await DisplayAlert("Ocurrió un error!", "No se lograron enviar los datos al servidor.", "ACEPTAR"); } // Ocultamos el spinner de carga ActivitySpinner.IsVisible = false; }); } } } }