Commit fb2a7603 by Javier Piris

Agrupadas ordenadamente todos los modelos en el proyecto models

parent 140540f0
using Newtonsoft.Json;
namespace inutralia.Models
{
[JsonObject(MemberSerialization.OptIn)]
[DataPath("recipe")]
public class Ingredient : ObservableEntityData
{
[JsonProperty("name", Required = Required.Always)]
public string Name { get; set; }
[JsonProperty("cuantity")]
public string Cuantity { get; set; }
[JsonProperty("order")]
public int Order { get; set; }
public Ingredient() { }
}
}
using inutralia.Utils;
using Newtonsoft.Json;
using System;
namespace inutralia.Models
{
[JsonObject(MemberSerialization.OptIn)]
public class QuestionMessage : ObservableEntityData
{
public bool FromExpert => !FromUser;
public QuestionMessage()
{
Text = "";
FromUser = true;
CreatedAt = DateUtilities.formatedDateToTimeStamp(DateTime.UtcNow);
}
[JsonProperty("message", Required = Required.Always)]
private string _Text;
public string Text
{
get { return _Text; }
set { SetProperty(ref _Text, value, "Text"); }
}
[JsonProperty("from_user", Required = Required.Always)]
public bool FromUser { get; set; }
[JsonProperty("created_at", Required = Required.Always)]
public int CreatedAt { get; set; }
[JsonProperty("image", Required = Required.Always)]
public string Image { get; set; }
}
}
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System.Collections.Generic;
using System;
using inutralia.Utils;
namespace inutralia.Models
{
[JsonObject(MemberSerialization.OptIn)]
[DataPath("questionList")]
public class QuestionSpecialist : ObservableEntityData
{
public QuestionSpecialist()
{
State = 0;
UpdatedAt = DateUtilities.formatedDateToTimeStamp(DateTime.UtcNow);
}
public enum Estatus { Pending, Answered, Closed }
public string StatusImg => imgStatus[StateId];
[JsonProperty("estado_id", Required = Required.Always)]
public int StateId { get; set; }
[JsonProperty("status", Required = Required.Always)]
[JsonConverter(typeof(StringEnumConverter))]
public Estatus State { get; set; }
[JsonProperty("updated_at", Required = Required.Always)]
public int UpdatedAt { get; set; }
[JsonProperty("messages", Required = Required.Always)]
public IEnumerable<QuestionMessage> Messages { get; set; }
string[] imgStatus = new string[3]
{
"message_status_cerrada.png", // 3 - Cerrada pregunta
"message_status_pendiente.png", // 7 - Pendiente de responder
"message_status_respondido.png", // 8 - Respondida
};
}
}
\ No newline at end of file
......@@ -29,31 +29,37 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Compile Include="BoolConverter.cs" />
<Compile Include="LocalMenu.cs" />
<Compile Include="MenuBase.cs" />
<Compile Include="Utils\BoolConverter.cs" />
<Compile Include="Menu\LocalMenu.cs" />
<Compile Include="Menu\MenuBase.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ObservableEntityData.cs" />
<Compile Include="Profile.cs" />
<Compile Include="Ingredient.cs" />
<Compile Include="Menu.cs" />
<Compile Include="Recipe.cs" />
<Compile Include="RecipeOption.cs" />
<Compile Include="RecipeOptionGroup.cs" />
<Compile Include="ShoppingList.cs" />
<Compile Include="TrivialGame.cs" />
<Compile Include="TrivialQuestion.cs" />
<Compile Include="User.cs" />
<Compile Include="Generic.cs" />
<Compile Include="Day.cs" />
<Compile Include="DataPathAttribute.cs" />
<Compile Include="Article.cs" />
<Compile Include="Utils\ObservableEntityData.cs" />
<Compile Include="Profile\Profile.cs" />
<Compile Include="Menu\Ingredient.cs" />
<Compile Include="Menu\Menu.cs" />
<Compile Include="Questions\QuestionMessage.cs" />
<Compile Include="Questions\QuestionSpecialist.cs" />
<Compile Include="Recipe\Recipe.cs" />
<Compile Include="Recipe\RecipeOption.cs" />
<Compile Include="Recipe\RecipeOptionGroup.cs" />
<Compile Include="ShoppingList\ShoppingList.cs" />
<Compile Include="Trivial\TrivialGame.cs" />
<Compile Include="Trivial\TrivialQuestion.cs" />
<Compile Include="Profile\User.cs" />
<Compile Include="Menu\Generic.cs" />
<Compile Include="Menu\Day.cs" />
<Compile Include="Utils\DataPathAttribute.cs" />
<Compile Include="Articles\Article.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\inutralia.Abstract\inutralia.Abstractions.csproj">
<Project>{ee196ae1-7332-479f-8c2e-b7b6caa873b0}</Project>
<Name>inutralia.Abstractions</Name>
</ProjectReference>
<ProjectReference Include="..\inutralia.Utils\inutralia.Utils.csproj">
<Project>{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}</Project>
<Name>inutralia.Utils</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Reference Include="MvvmHelpers, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
......
using inutralia.Models;
using MvvmHelpers; // Este namespace está en el paquete Refractored.MvvmHelpers
using System;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace inutralia.ViewModels
{
/// <summary>
/// ViewModel del listado de preguntas. Hereda de MvvmHelpers.BaseViewModel
/// </summary>
public class QuestionListViewModel : BaseViewModel
{
public QuestionListViewModel() { }
// Datos del histórico
ObservableRangeCollection<QuestionSpecialist> _QuestionList;
// Comando de loading del listado
Command _LoadQuestionListCommand;
// Comando de actualización del listado del listado
Command _RefreshQuestionListCommand;
// Acceso a la lista preguntas
public ObservableRangeCollection<QuestionSpecialist> QuestionList
{
// Getter (lazy load), crea la lista si no exite
get => _QuestionList ?? (_QuestionList = new ObservableRangeCollection<QuestionSpecialist>());
// Setter. Cambia el valor y notifica a la vista de dicho cambio
set
{
_QuestionList = value;
OnPropertyChanged("QuestionList");
}
}
public Command LoadQuestionListCommand
{
get { return _LoadQuestionListCommand ?? (_LoadQuestionListCommand = new Command(async () => await ExecuteLoadQuestionListCommand())); }
}
/// <summary>
/// Método que realiza la carga inicial del listado
/// </summary>
public async Task ExecuteLoadPollProfessionalCommand()
{
// Realiza el proceso de actualización si hay menos de un
// elemento en el listado
LoadQuestionListCommand.ChangeCanExecute();
//if (Notifications.Count < 1)
await FetchQuestionList();
LoadQuestionListCommand.ChangeCanExecute();
}
/// <summary>
/// Método que realiza la carga inicial del listado
/// </summary>
public async Task ExecuteLoadQuestionListCommand()
{
// Realiza el proceso de actualización si hay menos de un
// elemento en el listado
if (QuestionList.Count < 1)
await FetchQuestionList();
}
/// <summary>
/// Acceso al comando de actualización del listado
/// </summary>
public Command RefreshQuestionListCommand
{
// Getter (lazy load), crea el comando si no existe
get { return _RefreshQuestionListCommand ?? (_RefreshQuestionListCommand = new Command(async () => await ExecuteRefreshQuestionListCommand())); }
}
/// <summary>
/// Proceso de ejecución del comando de actualización del listado
/// </summary>
async Task ExecuteRefreshQuestionListCommand()
{
// Hace que el comando no se pueda ejecutar de nuevo
RefreshQuestionListCommand.ChangeCanExecute();
// Realiza el proceso de actualización
await FetchQuestionList();
// Hace que el comando pueda volver a ejecutarse
RefreshQuestionListCommand.ChangeCanExecute();
}
/// <summary>
/// Proceso de actualización del listado
/// </summary>
async Task FetchQuestionList()
{
// Indicamos que estamos ocupados (provoca que aparezca el indicador de carga)
IsBusy = true;
// Llamada al API para coger el listado (provoca que se actualize la vista del listado)
// Nota: Al obtener el listado, el controlador Rest del servidor no retorna el cuerpo de
// la notificación (campo Body)
try
{
QuestionList = new ObservableRangeCollection<QuestionSpecialist>(await App.API.RefreshListAsync<QuestionSpecialist>());
}
catch (Exception e)
{
string err = e.Message;
}
// Indicamos que ya no estamos ocupados (provoca que desaparezca el indicador de carga)
IsBusy = false;
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment