Mantenimiento de Miembros

This commit is contained in:
2026-01-13 21:02:34 -06:00
parent 06470a9173
commit 75aac3b273
50 changed files with 1440 additions and 1145 deletions

View File

@@ -0,0 +1,32 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Rs_system.Models;
[Table("grupos_trabajo")]
public class GrupoTrabajo
{
[Key]
[Column("id")]
public long Id { get; set; }
[Column("nombre")]
[Required]
[StringLength(100)]
public string Nombre { get; set; } = string.Empty;
[Column("descripcion")]
public string? Descripcion { get; set; }
[Column("activo")]
public bool Activo { get; set; } = true;
[Column("creado_en")]
public DateTime CreadoEn { get; set; } = DateTime.UtcNow;
[Column("actualizado_en")]
public DateTime ActualizadoEn { get; set; } = DateTime.UtcNow;
// Navigation properties
public virtual ICollection<Miembro> Miembros { get; set; } = new List<Miembro>();
}

View File

@@ -0,0 +1,51 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Rs_system.Models;
[Table("miembros")]
public class Miembro
{
[Key]
[Column("id")]
public long Id { get; set; }
[Column("persona_id")]
public long PersonaId { get; set; }
[Column("bautizado_espiritu_santo")]
public bool BautizadoEspirituSanto { get; set; } = false;
[Column("fecha_ingreso_congregacion")]
public DateOnly? FechaIngresoCongregacion { get; set; }
[Column("telefono_emergencia")]
[StringLength(20)]
public string? TelefonoEmergencia { get; set; }
[Column("grupo_trabajo_id")]
public long? GrupoTrabajoId { get; set; }
[Column("activo")]
public bool Activo { get; set; } = true;
[Column("eliminado")]
public bool Eliminado { get; set; } = false;
[Column("creado_en")]
public DateTime CreadoEn { get; set; } = DateTime.UtcNow;
[Column("actualizado_en")]
public DateTime ActualizadoEn { get; set; } = DateTime.UtcNow;
[Column("creado_por")]
[StringLength(100)]
public string? CreadoPor { get; set; }
// Navigation properties
[ForeignKey("PersonaId")]
public virtual Persona Persona { get; set; } = null!;
[ForeignKey("GrupoTrabajoId")]
public virtual GrupoTrabajo? GrupoTrabajo { get; set; }
}

View File

@@ -0,0 +1,61 @@
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Http;
namespace Rs_system.Models.ViewModels;
public class MiembroViewModel
{
public long Id { get; set; }
[Required(ErrorMessage = "Los nombres son requeridos")]
[StringLength(100, ErrorMessage = "Los nombres no pueden exceder 100 caracteres")]
[Display(Name = "Nombres")]
public string Nombres { get; set; } = string.Empty;
[Required(ErrorMessage = "Los apellidos son requeridos")]
[StringLength(100, ErrorMessage = "Los apellidos no pueden exceder 100 caracteres")]
[Display(Name = "Apellidos")]
public string Apellidos { get; set; } = string.Empty;
[Display(Name = "Fecha de Nacimiento")]
[DataType(DataType.Date)]
public DateOnly? FechaNacimiento { get; set; }
[Display(Name = "Bautizado en el Espíritu Santo")]
public bool BautizadoEspirituSanto { get; set; } = false;
[Display(Name = "Dirección")]
[DataType(DataType.MultilineText)]
public string? Direccion { get; set; }
[Display(Name = "Fecha de Ingreso a la Congregación")]
[DataType(DataType.Date)]
public DateOnly? FechaIngresoCongregacion { get; set; }
[StringLength(20, ErrorMessage = "El teléfono no puede exceder 20 caracteres")]
[Display(Name = "Teléfono")]
[Phone(ErrorMessage = "Formato de teléfono inválido")]
public string? Telefono { get; set; }
[StringLength(20, ErrorMessage = "El teléfono de emergencia no puede exceder 20 caracteres")]
[Display(Name = "Teléfono de Emergencia")]
[Phone(ErrorMessage = "Formato de teléfono inválido")]
public string? TelefonoEmergencia { get; set; }
[Display(Name = "Grupo de Trabajo")]
public long? GrupoTrabajoId { get; set; }
[Display(Name = "Activo")]
public bool Activo { get; set; } = true;
[Display(Name = "Foto del Miembro")]
public string? FotoUrl { get; set; }
[Display(Name = "Subir Foto")]
[DataType(DataType.Upload)]
public IFormFile? FotoFile { get; set; }
// For display purposes
public string? GrupoTrabajoNombre { get; set; }
public string NombreCompleto => $"{Nombres} {Apellidos}";
}