This commit is contained in:
2025-11-18 21:46:20 -06:00
commit b094360eb2
64 changed files with 1748 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidProjectSystem">
<option name="providerId" value="RiderAndroidProjectSystem" />
</component>
</project>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
</project>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.activity.activity">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.activity.activity/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.activity.activity/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.annotation.annotation">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.annotation/1.7.0.2/jar/androidx.annotation.annotation.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.annotation.annotation-experimental">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.annotation.annotation-experimental/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.annotation.annotation-experimental/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.annotation.annotation-jvm">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.annotation.jvm/1.7.0.2/jar/androidx.annotation.annotation-jvm.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.appcompat.appcompat">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.appcompat.appcompat/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.appcompat.appcompat/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.appcompat.appcompat-resources">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.appcompat.appcompat-resources/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.appcompat.appcompat-resources/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.arch.core.core-common">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.arch.core.common/2.2.0.5/jar/androidx.arch.core.core-common.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.arch.core.core-runtime">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.arch.core.core-runtime/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.arch.core.core-runtime/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.collection.collection">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.collection/1.3.0.1/jar/androidx.collection.collection.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.collection.collection-jvm">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.collection.jvm/1.3.0.1/jar/androidx.collection.collection-jvm.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.concurrent.concurrent-futures">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.concurrent.futures/1.1.0.16/jar/androidx.concurrent.concurrent-futures.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.core.core">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.core.core/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.core.core/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.core.core-ktx">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.core.core-ktx/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.core.core-ktx/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.core.core-splashscreen">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.core.core-splashscreen/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.core.core-splashscreen/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.cursoradapter.cursoradapter">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.cursoradapter.cursoradapter/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.customview.customview">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.customview.customview/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.drawerlayout.drawerlayout">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.drawerlayout.drawerlayout/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.drawerlayout.drawerlayout/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.emoji2.emoji2">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.emoji2.emoji2/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.emoji2.emoji2/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.emoji2.emoji2-views-helper">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.emoji2.emoji2-views-helper/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.emoji2.emoji2-views-helper/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.fragment.fragment">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.fragment.fragment/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.fragment.fragment/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.interpolator.interpolator">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.interpolator.interpolator/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.lifecycle.lifecycle-common">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.lifecycle.common/2.6.2.2/jar/androidx.lifecycle.lifecycle-common.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.lifecycle.lifecycle-livedata-core">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-livedata-core/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-livedata-core/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.lifecycle.lifecycle-process">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-process/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-process/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.lifecycle.lifecycle-runtime">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-runtime/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-runtime/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.lifecycle.lifecycle-viewmodel">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-viewmodel/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-viewmodel/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.lifecycle.lifecycle-viewmodel-savedstate">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-viewmodel-savedstate/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-viewmodel-savedstate/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.loader.loader">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.loader.loader/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.profileinstaller.profileinstaller">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.profileinstaller.profileinstaller/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.profileinstaller.profileinstaller/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.resourceinspection.resourceinspection-annotation">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.resourceinspection.annotation/1.0.1.9/jar/androidx.resourceinspection.resourceinspection-annotation.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.savedstate.savedstate">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.savedstate.savedstate/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.savedstate.savedstate/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.startup.startup-runtime">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.startup.startup-runtime/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.startup.startup-runtime/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.tracing.tracing">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.tracing.tracing/classes.jar" />
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.tracing.tracing/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.vectordrawable.vectordrawable">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.vectordrawable.vectordrawable/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.vectordrawable.vectordrawable-animated">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.vectordrawable.vectordrawable-animated/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.versionedparcelable.versionedparcelable">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.versionedparcelable.versionedparcelable/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.viewpager.viewpager">
<CLASSES>
<root url="file:///tmp/JetBrains/xamarinAarPackages/androidx.viewpager.viewpager/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="guava-listenablefuture">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.google.guava.listenablefuture/1.0.0.16/jar/guava-listenablefuture.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="org.jetbrains.annotations-24.0.1">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.jetbrains.annotations/24.0.1.5/jar/org.jetbrains.annotations-24.0.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="org.jetbrains.kotlin.kotlin-stdlib-1.9.10">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.kotlin.stdlib/1.9.10.2/jar/org.jetbrains.kotlin.kotlin-stdlib-1.9.10.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="org.jetbrains.kotlin.kotlin-stdlib-common-1.9.10">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.kotlin.stdlib.common/1.9.10.2/jar/org.jetbrains.kotlin.kotlin-stdlib-common-1.9.10.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.9.10">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.kotlin.stdlib.jdk7/1.9.10.2/jar/org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.9.10.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="org.jetbrains.kotlin.kotlin-stdlib-jdk8-1.9.10">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.kotlin.stdlib.jdk8/1.9.10.2/jar/org.jetbrains.kotlin.kotlin-stdlib-jdk8-1.9.10.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="org.jetbrains.kotlinx.kotlinx-coroutines-android-1.7.3">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.kotlinx.coroutines.android/1.7.3.2/jar/org.jetbrains.kotlinx.kotlinx-coroutines-android-1.7.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="org.jetbrains.kotlinx.kotlinx-coroutines-core-jvm-1.7.3">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.kotlinx.coroutines.core.jvm/1.7.3.2/jar/org.jetbrains.kotlinx.kotlinx-coroutines-core-jvm-1.7.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RiderProjectSettingsUpdater">
<option name="singleClickDiffPreview" value="1" />
<option name="unhandledExceptionsIgnoreList" value="1" />
<option name="vcsConfiguration" value="3" />
</component>
</project>

6
.idea/.idea.MIES_System/.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View File

@@ -0,0 +1,28 @@
using System.Collections.Generic;
using Avalonia.Controls;
using Avalonia.Controls.Templates;
using Avalonia.Metadata;
using MIES_System.Models;
namespace MIES_System.Converts;
public class MenuItemTemplateSelector : IDataTemplate
{
[Content]
public Dictionary<string, IDataTemplate> Templates { get; } = new();
public Control? Build(object? param)
{
if (param is MenuItemModel menuItem)
{
var key = menuItem.EsSeccion ? "SeccionTemplate" : "MenuItemTemplate";
return Templates[key].Build(param);
}
return null;
}
public bool Match(object? data)
{
return data is MenuItemModel;
}
}

View File

@@ -0,0 +1,34 @@
using System;
using System.Globalization;
using Avalonia.Data.Converters;
namespace MIES_System.Converts;
public class BoolToVisibilityConverter : IValueConverter
{
public static readonly BoolToVisibilityConverter Instance = new();
public static readonly InverseBoolToVisibilityConverter Inverse = new();
public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
{
return value is bool b && b;
}
public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class InverseBoolToVisibilityConverter : IValueConverter
{
public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
{
return value is bool b && !b;
}
public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}

View File

@@ -0,0 +1,49 @@
using System;
using CommunityToolkit.Mvvm.ComponentModel;
namespace MIES_System.Models;
public partial class ExpedienteModel : ObservableObject
{
[ObservableProperty] private string nombre;
[ObservableProperty] private DateTime? fechaNacimiento;
[ObservableProperty] private DateTime? fechaIngreso;
[ObservableProperty] private string responsable;
[ObservableProperty] private string dui;
[ObservableProperty] private string genero;
[ObservableProperty] private string localidad;
// Nuevos campos para información de padres
[ObservableProperty] private string nombrePadre;
[ObservableProperty] private string telefonoPadre;
[ObservableProperty] private string nombreMadre;
[ObservableProperty] private string telefonoMadre;
// Nuevos campos para información del tutor
[ObservableProperty] private string nombreTutor;
[ObservableProperty] private string telefonoTutor;
// Propiedad para mostrar la edad
public int Edad
{
get
{
if (FechaNacimiento == null) return -1;
var today = DateTime.Today;
var edad = today.Year - FechaNacimiento.Value.Year;
if (FechaNacimiento.Value.Date > today.AddYears(-edad))
edad--;
return edad;
}
}
// Este método se genera automáticamente cuando cambia FechaNacimiento
partial void OnFechaNacimientoChanged(DateTime? value)
{
OnPropertyChanged(nameof(Edad));
}
}

View File

@@ -0,0 +1,35 @@
using System.Windows.Input;
using CommunityToolkit.Mvvm.ComponentModel;
namespace MIES_System.Models;
public partial class MenuItemModel:ObservableObject
{
[ObservableProperty]
private string _titulo = "";
[ObservableProperty]
private string _icono = "";
[ObservableProperty]
private ICommand _comando = null!;
[ObservableProperty]
private bool _esSeccion = false;
[ObservableProperty]
private string _grupo = "";
// Constructor vacío para el DataTemplate
public MenuItemModel() { }
// Constructor con parámetros para facilitar la creación
public MenuItemModel(string titulo, ICommand comando, string icono = "", bool esSeccion = false, string grupo = "")
{
Titulo = titulo;
Comando = comando;
Icono = icono;
EsSeccion = esSeccion;
Grupo = grupo;
}
}

View File

@@ -0,0 +1,22 @@
using System;
using Avalonia.Controls;
namespace MIES_System.Services;
public class NavigationService
{
private ContentControl? _content;
public void Configure(ContentControl content)
{
_content = content;
}
public void Navigate(UserControl view)
{
if (_content == null)
throw new Exception("NavigationService no está configurado.");
_content.Content = view;
}
}

View File

@@ -0,0 +1,282 @@
using System;
using System.Collections.ObjectModel;
using System.Linq;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using MIES_System.Models;
namespace MIES_System.ViewModels;
public partial class ExpedienteViewModel : ViewModelBase
{
// -------------------------
// LISTA GENERAL
// -------------------------
[ObservableProperty]
private ObservableCollection<ExpedienteModel> listaNinos = new();
[ObservableProperty]
private ObservableCollection<string> generos;
[ObservableProperty]
private ExpedienteModel? ninoSeleccionado;
[ObservableProperty]
private bool mostrarModal = false;
[ObservableProperty]
private string textoBusqueda = "";
// -------------------------
// CAMPOS DEL FORM
// -------------------------
[ObservableProperty] private string formNombre = "";
[ObservableProperty] private DateTimeOffset? formFechaNacimiento = DateTime.Now;
[ObservableProperty] private DateTimeOffset? formFechaIngreso = DateTime.Now;
[ObservableProperty] private string formResponsable = "";
[ObservableProperty] private string formDui = "";
[ObservableProperty] private string formGenero = "";
[ObservableProperty] private string formLocalidad = "";
// Nuevos campos para información de padres
[ObservableProperty] private string formNombrePadre = "";
[ObservableProperty] private string formTelefonoPadre = "";
[ObservableProperty] private string formNombreMadre = "";
[ObservableProperty] private string formTelefonoMadre = "";
// Nuevos campos para información del tutor
[ObservableProperty] private string formNombreTutor = "";
[ObservableProperty] private string formTelefonoTutor = "";
// -------------------------
[ObservableProperty] bool puedeGuardar;
[ObservableProperty] bool puedeEliminar;
public ExpedienteViewModel()
{
Generos = new ObservableCollection<string>()
{
"Masculino",
"Femenino"
};
PuedeGuardar = false;
}
// Propiedad para lista filtrada
public ObservableCollection<ExpedienteModel> ListaNinosFiltrados
{
get
{
if (string.IsNullOrWhiteSpace(TextoBusqueda))
return ListaNinos;
var busqueda = TextoBusqueda.ToLower();
return new ObservableCollection<ExpedienteModel>(
ListaNinos.Where(n =>
n.Nombre?.ToLower().Contains(busqueda) == true ||
n.Responsable?.ToLower().Contains(busqueda) == true ||
n.Localidad?.ToLower().Contains(busqueda) == true ||
n.NombrePadre?.ToLower().Contains(busqueda) == true ||
n.NombreMadre?.ToLower().Contains(busqueda) == true ||
n.NombreTutor?.ToLower().Contains(busqueda) == true
)
);
}
}
// En tu ExpedienteViewModel, agrega esta propiedad:
public string TituloModal =>
NinoSeleccionado == null ? "Nuevo Niño" : $"Editando: {NinoSeleccionado.Nombre}";
// -------------------------
// COMANDOS
// -------------------------
[RelayCommand]
private void Nuevo()
{
PuedeGuardar = true;
NinoSeleccionado = null;
LimpiarFormulario();
MostrarModal = true;
}
[RelayCommand]
private void Guardar()
{
if (NinoSeleccionado == null)
{
// Crear nuevo niño
ListaNinos.Add(new ExpedienteModel()
{
Nombre = FormNombre,
FechaNacimiento = FormFechaNacimiento == null ? DateTime.Now : FormFechaNacimiento.Value.DateTime,
FechaIngreso = FormFechaIngreso == null ? DateTime.Now : FormFechaIngreso.Value.DateTime,
Responsable = FormResponsable,
Dui = FormDui,
Genero = FormGenero,
Localidad = FormLocalidad,
NombrePadre = FormNombrePadre,
TelefonoPadre = FormTelefonoPadre,
NombreMadre = FormNombreMadre,
TelefonoMadre = FormTelefonoMadre,
NombreTutor = FormNombreTutor,
TelefonoTutor = FormTelefonoTutor
});
}
else
{
// Actualizar el niño seleccionado
NinoSeleccionado.Nombre = FormNombre;
NinoSeleccionado.FechaNacimiento = FormFechaNacimiento?.DateTime;
NinoSeleccionado.FechaIngreso = FormFechaIngreso?.DateTime;
NinoSeleccionado.Responsable = FormResponsable;
NinoSeleccionado.Dui = FormDui;
NinoSeleccionado.Genero = FormGenero;
NinoSeleccionado.Localidad = FormLocalidad;
NinoSeleccionado.NombrePadre = FormNombrePadre;
NinoSeleccionado.TelefonoPadre = FormTelefonoPadre;
NinoSeleccionado.NombreMadre = FormNombreMadre;
NinoSeleccionado.TelefonoMadre = FormTelefonoMadre;
NinoSeleccionado.NombreTutor = FormNombreTutor;
NinoSeleccionado.TelefonoTutor = FormTelefonoTutor;
}
MostrarModal = false;
LimpiarFormulario();
OnPropertyChanged(nameof(ListaNinosFiltrados));
}
[RelayCommand]
private void Cancelar()
{
MostrarModal = false;
LimpiarFormulario();
}
[RelayCommand]
private void Editar(ExpedienteModel? nino = null)
{
// Si se pasa un parámetro, usar ese, sino usar el seleccionado
var ninoAEditar = nino ?? NinoSeleccionado;
if (ninoAEditar != null)
{
NinoSeleccionado = ninoAEditar;
// Copiar datos al form
FormNombre = ninoAEditar.Nombre;
FormFechaNacimiento = ninoAEditar.FechaNacimiento;
FormFechaIngreso = ninoAEditar.FechaIngreso;
FormResponsable = ninoAEditar.Responsable;
FormDui = ninoAEditar.Dui;
FormGenero = ninoAEditar.Genero;
FormLocalidad = ninoAEditar.Localidad;
FormNombrePadre = ninoAEditar.NombrePadre;
FormTelefonoPadre = ninoAEditar.TelefonoPadre;
FormNombreMadre = ninoAEditar.NombreMadre;
FormTelefonoMadre = ninoAEditar.TelefonoMadre;
FormNombreTutor = ninoAEditar.NombreTutor;
FormTelefonoTutor = ninoAEditar.TelefonoTutor;
MostrarModal = true;
}
}
private void LimpiarFormulario()
{
FormNombre = "";
FormResponsable = "";
FormDui = "";
FormGenero = "";
FormLocalidad = "";
FormNombrePadre = "";
FormTelefonoPadre = "";
FormNombreMadre = "";
FormTelefonoMadre = "";
FormNombreTutor = "";
FormTelefonoTutor = "";
FormFechaIngreso = DateTime.Now;
FormFechaNacimiento = DateTime.Now;
}
partial void OnFormNombreChanged(string value)
{
if (!string.IsNullOrEmpty(value))
PuedeGuardar = true;
else PuedeGuardar = false;
}
partial void OnTextoBusquedaChanged(string value)
{
OnPropertyChanged(nameof(ListaNinosFiltrados));
}
partial void OnNinoSeleccionadoChanged(ExpedienteModel? value)
{
if (value == null)
{
PuedeEliminar = false;
return;
};
PuedeEliminar = true;
// Copiar datos al form
FormNombre = value.Nombre;
FormFechaNacimiento = value.FechaNacimiento;
FormFechaIngreso = value.FechaIngreso;
FormResponsable = value.Responsable;
FormDui = value.Dui;
FormGenero = value.Genero;
FormLocalidad = value.Localidad;
FormNombrePadre = value.NombrePadre;
FormTelefonoPadre = value.TelefonoPadre;
FormNombreMadre = value.NombreMadre;
FormTelefonoMadre = value.TelefonoMadre;
FormNombreTutor = value.NombreTutor;
FormTelefonoTutor = value.TelefonoTutor;
}
[ObservableProperty]
private bool mostrarConfirmacionEliminar = false;
[ObservableProperty]
private ExpedienteModel? ninoAEliminar;
[RelayCommand]
private void Eliminar(ExpedienteModel? nino = null)
{
NinoAEliminar = nino ?? NinoSeleccionado;
if (NinoAEliminar != null)
{
MostrarConfirmacionEliminar = true;
}
}
[RelayCommand]
private void ConfirmarEliminacion()
{
if (NinoAEliminar != null)
{
ListaNinos.Remove(NinoAEliminar);
if (NinoSeleccionado == NinoAEliminar)
{
NinoSeleccionado = null;
LimpiarFormulario();
}
CancelarEliminacion();
OnPropertyChanged(nameof(ListaNinosFiltrados));
}
}
[RelayCommand]
private void CancelarEliminacion()
{
MostrarConfirmacionEliminar = false;
NinoAEliminar = null;
}
}

View File

@@ -0,0 +1,103 @@
using System.Collections.ObjectModel;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using MIES_System.Models;
using MIES_System.Views;
namespace MIES_System.ViewModels;
public partial class HomeViewModel : ViewModelBase
{
[ObservableProperty]
private object? currentView;
public HomeViewModel()
{
CargarMenuItems();
// Vista inicial
//CurrentView = new InicioView();
}
// -------------------------
// COMANDOS
// -------------------------
[RelayCommand]
private void ShowInicio()
{
//CurrentView = new InicioView();
}
[RelayCommand]
private void ShowMiembros()
{
CurrentView = new ExpedienteView()
{
DataContext = new ExpedienteViewModel()
};
}
[RelayCommand]
private void ShowAsistencia()
{
//CurrentView = new AsistenciaView();
}
[RelayCommand]
private void ShowRoles()
{
//CurrentView = new RolesView();
}
[RelayCommand]
private void ShowConfig()
{
//CurrentView = new ConfigView();
}
[ObservableProperty]
private ObservableCollection<MenuItemModel> _menuItems = new();
private void CargarMenuItems()
{
// Limpiar items existentes
MenuItems.Clear();
// Sección PRINCIPAL
MenuItems.Add(new MenuItemModel
{
Titulo = "PRINCIPAL",
EsSeccion = true,
Grupo = "Principal"
});
MenuItems.Add(new MenuItemModel
{
Titulo = "Inicio",
Icono = "🏠",
Comando = ShowInicioCommand,
Grupo = "Principal"
});
MenuItems.Add(new MenuItemModel
{
Titulo = "Miembros",
Icono = "👥",
Comando = ShowMiembrosCommand,
Grupo = "Principal"
});
MenuItems.Add(new MenuItemModel
{
Titulo = "Asistencia",
Icono = "📊",
Comando = ShowAsistenciaCommand,
Grupo = "Principal"
});
}
}

View File

@@ -0,0 +1,45 @@
using System;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace MIES_System.ViewModels;
public partial class LoginViewModel : ViewModelBase
{
[ObservableProperty]
private string username = string.Empty;
[ObservableProperty]
private string password = string.Empty;
[ObservableProperty]
private string errorMessage = string.Empty;
public event Action? LoginSuccess;
public LoginViewModel()
{
}
[RelayCommand]
private void Login()
{
ErrorMessage = string.Empty;
// Validación básica
if (string.IsNullOrWhiteSpace(Username) ||
string.IsNullOrWhiteSpace(Password))
{
ErrorMessage = "Ingrese su usuario y contraseña.";
return;
}
if (Username == "admin" && Password == "1234")
{
LoginSuccess?.Invoke();
return;
}
ErrorMessage = "Usuario o contraseña incorrectos.";
}
}

View File

@@ -0,0 +1,360 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:MIES_System.ViewModels"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="vm:ExpedienteViewModel"
x:Name="ExpedienteControl"
x:Class="MIES_System.Views.ExpedienteView">
<Design.DataContext>
<vm:ExpedienteViewModel/>
</Design.DataContext>
<Grid Background="#F3F3F3">
<!-- CONTENIDO PRINCIPAL -->
<StackPanel Margin="20" Spacing="15">
<!-- HEADER -->
<StackPanel>
<TextBlock Text="Expediente de Niños"
FontSize="24"
FontWeight="Bold"
Foreground="#2C3E50"/>
<TextBlock Text="Gestión de expedientes infantiles"
FontSize="14"
Foreground="#7F8C8D"/>
</StackPanel>
<!-- BARRA DE BÚSQUEDA Y BOTONES -->
<Grid ColumnDefinitions="*, Auto">
<!-- BARRA DE BÚSQUEDA -->
<Border Grid.Column="0"
Background="White"
CornerRadius="8"
Padding="10"
Margin="0,0,10,0">
<StackPanel Orientation="Horizontal" Spacing="10">
<TextBlock Text="🔍"
FontSize="16"
VerticalAlignment="Center"/>
<TextBox Text="{Binding TextoBusqueda}"
Watermark="Buscar por nombre, responsable o localidad..."
BorderThickness="0"
Background="Transparent"
Width="600"/>
</StackPanel>
</Border>
<!-- BOTONES DE ACCIÓN -->
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="10">
<Button Content=" Nuevo Niño"
Command="{Binding NuevoCommand}"
Background="#27AE60"
Foreground="White"
Padding="15 8"/>
</StackPanel>
</Grid>
<!-- LISTA DE NIÑOS -->
<Border Background="White"
CornerRadius="12"
Padding="0"
BoxShadow="0 2 8 #00000030">
<ListBox ItemsSource="{Binding ListaNinosFiltrados}"
SelectedItem="{Binding NinoSeleccionado}"
BorderThickness="0">
<ListBox.ItemTemplate>
<DataTemplate>
<Border Padding="15" Margin="0" Background="White"
BorderThickness="0 0 0 1" BorderBrush="#ECF0F1">
<Grid ColumnDefinitions="*, 200, 150, 175">
<StackPanel Grid.Column="0">
<TextBlock Text="{Binding Nombre}"
FontWeight="Bold"
FontSize="16"
Foreground="#2C3E50"/>
<TextBlock Text="{Binding Responsable}"
FontSize="12"
Foreground="#7F8C8D"/>
</StackPanel>
<TextBlock Grid.Column="1"
Text="{Binding Localidad}"
FontSize="12"
Foreground="#34495E"
VerticalAlignment="Center"/>
<TextBlock Grid.Column="2"
Text="{Binding Edad, StringFormat='{} {0} años'}"
FontSize="12"
Foreground="#34495E"
VerticalAlignment="Center"/>
<!-- Columna 4: Botón Editar -->
<StackPanel Grid.Column="3" Spacing="5" Orientation="Horizontal">
<Button Content="✏️ Editar"
Click="Editar"
Background="#2980B9"
Foreground="White"
BorderThickness="0"
Padding="10 5"
VerticalAlignment="Center"
Cursor="Hand">
<Button.Styles>
<Style Selector="Button">
<Setter Property="Background" Value="Transparent"/>
</Style>
</Button.Styles>
</Button>
<Button Content="🗑️ Eliminar"
Click="Eliminar"
Background="#C62828"
Foreground="White"
BorderThickness="0"
Padding="10 5"
VerticalAlignment="Center"
Cursor="Hand">
<Button.Styles>
<Style Selector="Button">
<Setter Property="Background" Value="Transparent"/>
</Style>
</Button.Styles>
</Button>
</StackPanel>
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Border>
</StackPanel>
<!-- MODAL DEL FORMULARIO -->
<Border Background="#80000000"
IsVisible="{Binding MostrarModal}"
ZIndex="1000">
<Border Background="White"
Width="600"
Height="750"
CornerRadius="12"
Padding="20"
HorizontalAlignment="Center"
VerticalAlignment="Center"
BoxShadow="0 4 20 #00000050">
<StackPanel Spacing="15">
<!-- HEADER DEL MODAL -->
<StackPanel>
<TextBlock Text="{Binding TituloModal}"
FontSize="18"
FontWeight="Bold"
Foreground="#2C3E50"/>
<TextBlock Text="Complete la información del expediente"
FontSize="12"
Foreground="#7F8C8D"/>
</StackPanel>
<!-- FORMULARIO -->
<ScrollViewer VerticalScrollBarVisibility="Auto" MaxHeight="650">
<StackPanel Spacing="15">
<!-- SECCIÓN 1: INFORMACIÓN DEL NIÑO -->
<Border Background="#F8F9FA"
CornerRadius="8"
Padding="15"
BorderThickness="1"
BorderBrush="#E9ECEF">
<StackPanel Spacing="12">
<TextBlock Text="👶 INFORMACIÓN DEL NIÑO"
FontWeight="Bold"
FontSize="14"
Foreground="#2C3E50"/>
<TextBlock Text="Nombre Completo *" FontWeight="SemiBold"/>
<TextBox Text="{Binding FormNombre}"
Watermark="Ingrese el nombre completo"/>
<Grid ColumnDefinitions="*, 10,*" RowDefinitions="Auto, Auto">
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Vertical">
<TextBlock Text="Fecha Nacimiento" FontWeight="SemiBold"/>
<DatePicker SelectedDate="{Binding FormFechaNacimiento}" Width="75"/>
</StackPanel>
<StackPanel Grid.Row="0" Grid.Column="2" Orientation="Vertical">
<TextBlock Text="Fecha de Ingreso" FontWeight="SemiBold"/>
<DatePicker SelectedDate="{Binding FormFechaIngreso}"/>
</StackPanel>
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Vertical">
<TextBlock Text="Género" FontWeight="SemiBold"/>
<ComboBox ItemsSource="{Binding Generos}"
SelectedItem="{Binding FormGenero}"
Margin="0,5,0,0"/>
</StackPanel>
<StackPanel Grid.Row="1" Grid.Column="2" Orientation="Vertical">
<TextBlock Text="Localidad / Colonia" FontWeight="SemiBold"/>
<TextBox Text="{Binding FormLocalidad}"
Watermark="Localidad de residencia"
Margin="0,5,0,0"/>
</StackPanel>
</Grid>
</StackPanel>
</Border>
<!-- SECCIÓN 2: INFORMACIÓN DE LOS PADRES -->
<Border Background="#F8F9FA"
CornerRadius="8"
Padding="15"
BorderThickness="1"
BorderBrush="#E9ECEF">
<StackPanel Spacing="12">
<TextBlock Text="👨‍👩‍👧‍👦 INFORMACIÓN DE LOS PADRES"
FontWeight="Bold"
FontSize="14"
Foreground="#2C3E50"/>
<Grid ColumnDefinitions="*,5, *" RowDefinitions="Auto, Auto, Auto">
<!-- Fila 1 -->
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Vertical">
<TextBlock Text="Nombre del Padre" FontWeight="SemiBold"/>
<TextBox Text="{Binding FormNombrePadre}"
Watermark="Nombre completo del padre"/>
</StackPanel>
<StackPanel Grid.Row="0" Grid.Column="2" Orientation="Vertical">
<TextBlock Text="Teléfono del Padre" FontWeight="SemiBold"/>
<TextBox Text="{Binding FormTelefonoPadre}"
Watermark="Número de teléfono"/>
</StackPanel>
<!-- Fila 2 -->
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Vertical">
<TextBlock Text="Nombre de la Madre" FontWeight="SemiBold"/>
<TextBox Text="{Binding FormNombreMadre}"
Watermark="Nombre completo de la madre"/>
</StackPanel>
<StackPanel Grid.Row="1" Grid.Column="2" Orientation="Vertical">
<TextBlock Text="Teléfono de la Madre" FontWeight="SemiBold"/>
<TextBox Text="{Binding FormTelefonoMadre}"
Watermark="Número de teléfono"/>
</StackPanel>
<!-- Fila 3 -->
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Vertical">
<TextBlock Text="DUI del Responsable *" FontWeight="SemiBold"/>
<TextBox Text="{Binding FormDui}"
Watermark="Número de DUI"/>
</StackPanel>
<StackPanel Grid.Row="2" Grid.Column="2" Orientation="Vertical">
<TextBlock Text="Nombre del Responsable *" FontWeight="SemiBold"/>
<TextBox Text="{Binding FormResponsable}"
Watermark="Nombre del responsable"/>
</StackPanel>
</Grid>
</StackPanel>
</Border>
<!-- SECCIÓN 3: INFORMACIÓN DEL TUTOR -->
<Border Background="#F8F9FA"
CornerRadius="8"
Padding="15"
BorderThickness="1"
BorderBrush="#E9ECEF">
<StackPanel Spacing="12">
<TextBlock Text="👤 INFORMACIÓN DEL TUTOR O RESPONSABLE ADICIONAL"
FontWeight="Bold"
FontSize="14"
Foreground="#2C3E50"/>
<Grid ColumnDefinitions="*,5, *">
<StackPanel Grid.Column="0" Orientation="Vertical">
<TextBlock Text="Nombre del Tutor" FontWeight="SemiBold"/>
<TextBox Text="{Binding FormNombreTutor}"
Watermark="Nombre completo del tutor"/>
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Vertical">
<TextBlock Text="Teléfono del Tutor" FontWeight="SemiBold"/>
<TextBox Text="{Binding FormTelefonoTutor}"
Watermark="Número de teléfono del tutor"/>
</StackPanel>
</Grid>
</StackPanel>
</Border>
</StackPanel>
</ScrollViewer>
<!-- BOTONES DEL MODAL -->
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Right"
Spacing="10"
Margin="0 15">
<Button Content="Cancelar"
Command="{Binding CancelarCommand}"
Background="#95A5A6"
Foreground="White"
Padding="20 8"/>
<Button Content="Guardar"
Command="{Binding GuardarCommand}"
Background="#27AE60"
Foreground="White"
Padding="20 8"
IsEnabled="{Binding PuedeGuardar}"/>
</StackPanel>
</StackPanel>
</Border>
</Border>
<!-- Modal de Confirmación Eliminar -->
<Border Background="#80000000" IsVisible="{Binding MostrarConfirmacionEliminar}" ZIndex="1001">
<Border Background="White"
Width="400"
Height="200"
CornerRadius="12"
Padding="25"
HorizontalAlignment="Center"
VerticalAlignment="Center"
BoxShadow="0 4 20 #00000050">
<StackPanel Spacing="20" HorizontalAlignment="Center" VerticalAlignment="Center">
<StackPanel HorizontalAlignment="Center">
<TextBlock Text="⚠️ Confirmar Eliminación"
FontSize="18"
FontWeight="Bold"
Foreground="#C62828"
HorizontalAlignment="Center"/>
<TextBlock Text="{Binding NinoAEliminar.Nombre, StringFormat='¿Eliminar a {0}?'}"
FontSize="14"
Foreground="#2C3E50"
HorizontalAlignment="Center"
TextWrapping="Wrap"/>
<TextBlock Text="Esta acción no se puede deshacer"
FontSize="12"
Foreground="#7F8C8D"
HorizontalAlignment="Center"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="15" HorizontalAlignment="Center">
<Button Content="Cancelar"
Command="{Binding CancelarEliminacionCommand}"
Background="#95A5A6"
Foreground="White"
Padding="20 8"/>
<Button Content="Eliminar"
Command="{Binding ConfirmarEliminacionCommand}"
Background="#C62828"
Foreground="White"
Padding="20 8"/>
</StackPanel>
</StackPanel>
</Border>
</Border>
</Grid>
</UserControl>

View File

@@ -0,0 +1,38 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using MIES_System.Models;
using MIES_System.ViewModels;
namespace MIES_System.Views;
public partial class ExpedienteView : UserControl
{
public ExpedienteView()
{
InitializeComponent();
}
private void Editar(object? sender, RoutedEventArgs e)
{
if (sender is Button button && button.DataContext is ExpedienteModel nino)
{
if (DataContext is ExpedienteViewModel viewModel)
{
viewModel.EditarCommand.Execute(nino);
}
}
}
private void Eliminar(object? sender, RoutedEventArgs e)
{
if (sender is Button button && button.DataContext is ExpedienteModel nino)
{
if (DataContext is ExpedienteViewModel viewModel)
{
viewModel.EliminarCommand.Execute(nino);
}
}
}
}

View File

@@ -0,0 +1,217 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:MIES_System.ViewModels"
xmlns:models="clr-namespace:MIES_System.Models"
xmlns:converts="clr-namespace:MIES_System.Converts"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="MIES_System.Views.HomeView"
x:DataType="vm:HomeViewModel">
<Design.DataContext>
<vm:HomeViewModel/>
</Design.DataContext>
<UserControl.Resources>
<!-- Template para Secciones -->
<DataTemplate x:Key="SeccionTemplate" DataType="models:MenuItemModel">
<TextBlock Text="{Binding Titulo}"
Foreground="#64748B"
FontSize="11"
FontWeight="Bold"
Margin="0 15 0 5"/>
</DataTemplate>
<!-- Template para Items del Menú -->
<DataTemplate x:Key="MenuItemTemplate" DataType="models:MenuItemModel">
<Button Content="{Binding Titulo}"
Command="{Binding Comando}"
Height="40"
Background="Transparent"
BorderThickness="0"
HorizontalContentAlignment="Left"
Padding="15 0">
<Button.Styles>
<Style Selector="Button">
<Setter Property="Foreground" Value="#CBD5E1"/>
<Setter Property="FontSize" Value="14"/>
<Style.Animations>
<Animation Duration="0:0:0.2">
<KeyFrame Cue="0%">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="#CBD5E1"/>
</KeyFrame>
<KeyFrame Cue="100%">
<Setter Property="Background" Value="#3B82F6"/>
<Setter Property="Foreground" Value="White"/>
</KeyFrame>
</Animation>
</Style.Animations>
</Style>
</Button.Styles>
</Button>
</DataTemplate>
<!-- Template Selector -->
<converts:MenuItemTemplateSelector x:Key="MenuItemTemplateSelector">
<DataTemplate x:Key="SeccionTemplate" DataType="models:MenuItemModel">
<TextBlock Text="{Binding Titulo}"
Foreground="#64748B"
FontSize="11"
FontWeight="Bold"
Margin="0 15 0 5"/>
</DataTemplate>
<DataTemplate x:Key="MenuItemTemplate" x:DataType="models:MenuItemModel">
<Button Content="{Binding Titulo}"
Command="{Binding Comando}"
Height="40"
Background="Transparent"
BorderThickness="0"
HorizontalContentAlignment="Left"
Padding="15 0">
<Button.Styles>
<Style Selector="Button">
<Setter Property="Foreground" Value="#CBD5E1"/>
<Setter Property="FontSize" Value="14"/>
<Style.Animations>
<Animation Duration="0:0:0.2">
<KeyFrame Cue="0%">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="#CBD5E1"/>
</KeyFrame>
<KeyFrame Cue="100%">
<Setter Property="Background" Value="#3B82F6"/>
<Setter Property="Foreground" Value="White"/>
</KeyFrame>
</Animation>
</Style.Animations>
</Style>
</Button.Styles>
</Button>
</DataTemplate>
</converts:MenuItemTemplateSelector>
</UserControl.Resources>
<Grid ColumnDefinitions="260,*">
<!-- SIDEBAR MODERNO -->
<Border Background="#1E293B"
BorderBrush="#334155"
BorderThickness="0 0 1 0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- HEADER DEL SIDEBAR -->
<Border Background="#0F172A"
Height="70"
Padding="20"
Grid.Row="0">
<StackPanel Orientation="Horizontal"
VerticalAlignment="Center"
Spacing="12">
<Border Width="32"
Height="32"
Background="#3B82F6"
CornerRadius="8"
VerticalAlignment="Center">
<TextBlock Text="M"
Foreground="White"
FontWeight="Bold"
FontSize="16"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
<StackPanel>
<TextBlock Text="MIES System"
Foreground="White"
FontSize="16"
FontWeight="Bold"/>
<TextBlock Text="Administración"
Foreground="#94A3B8"
FontSize="10"/>
</StackPanel>
</StackPanel>
</Border>
<!-- CONTENIDO CENTRAL (Perfil + Menú) -->
<StackPanel Grid.Row="1"
Margin="0"
Spacing="0">
<!-- PERFIL DE USUARIO -->
<Border Background="#334155"
CornerRadius="8"
Padding="12"
Cursor="Hand"
Margin="15 20 15 0">
<StackPanel Orientation="Horizontal" Spacing="10">
<Border Width="32"
Height="32"
Background="#64748B"
CornerRadius="16">
<TextBlock Text="U"
Foreground="White"
FontWeight="Bold"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
<StackPanel>
<TextBlock Text="Usuario"
Foreground="White"
FontSize="12"
FontWeight="Bold"/>
<TextBlock Text="Administrador"
Foreground="#94A3B8"
FontSize="10"/>
</StackPanel>
</StackPanel>
</Border>
<!-- MENÚ DINÁMICO -->
<ItemsControl ItemsSource="{Binding MenuItems}"
Margin="15 20 15 0"
Background="Transparent"
ItemTemplate="{StaticResource MenuItemTemplateSelector}"/>
</StackPanel>
<!-- BOTÓN CERRAR SESIÓN (ABAJO) -->
<Button Content="Cerrar Sesión"
Height="36"
Background="Transparent"
BorderThickness="0"
HorizontalContentAlignment="Left"
Padding="15 0"
Foreground="#EF4444"
Margin="15"
Grid.Row="2"
VerticalAlignment="Bottom">
<Button.Styles>
<Style Selector="Button">
<Style.Animations>
<Animation Duration="0:0:0.2">
<KeyFrame Cue="0%">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="#EF4444"/>
</KeyFrame>
<KeyFrame Cue="100%">
<Setter Property="Background" Value="#FEE2E2"/>
<Setter Property="Foreground" Value="#DC2626"/>
</KeyFrame>
</Animation>
</Style.Animations>
</Style>
</Button.Styles>
</Button>
</Grid>
</Border>
<!-- ÁREA DE CONTENIDO -->
<Border Grid.Column="1"
Background="#F8FAFC">
<ContentControl Content="{Binding CurrentView}" />
</Border>
</Grid>
</UserControl>

View File

@@ -0,0 +1,13 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace MIES_System.Views;
public partial class HomeView : UserControl
{
public HomeView()
{
InitializeComponent();
}
}

View File

@@ -0,0 +1,51 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:MIES_System.ViewModels"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="vm:LoginViewModel"
x:Class="MIES_System.Views.LoginView">
<Design.DataContext>
<vm:LoginViewModel/>
</Design.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Width="360"
Padding="25"
Background="#FFFFFF"
CornerRadius="15"
HorizontalAlignment="Center"
VerticalAlignment="Center"
BoxShadow="0 4 12 #00000040">
<StackPanel Spacing="12">
<TextBlock Text="Ingresar"
FontSize="20"
FontWeight="Bold"
HorizontalAlignment="Center"
Margin="0 0 0 10"/>
<TextBlock Text="Usuario" />
<TextBox Text="{Binding Username}" />
<TextBlock Text="Contraseña" />
<TextBox PasswordChar="●" Text="{Binding Password}" />
<Button Content="Entrar"
Margin="0 10 0 0"
Command="{Binding LoginCommand}" />
<TextBlock Text="{Binding ErrorMessage}"
Foreground="Red"
FontSize="12"
TextWrapping="Wrap" />
</StackPanel>
</Border>
</Grid>
</UserControl>

View File

@@ -0,0 +1,13 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace MIES_System.Views;
public partial class LoginView : UserControl
{
public LoginView()
{
InitializeComponent();
}
}