Files
RS_System/RS_system/Models/Articulo.cs
2026-02-01 14:28:17 -06:00

102 lines
2.7 KiB
C#

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Rs_system.Models;
[Table("articulos")]
public class Articulo
{
public enum TipoControlInventario
{
UNITARIO, // 1 record = 1 physical item (Laptop, Projector)
LOTE // 1 record = N items (Chairs, Cables)
}
[Key]
[Column("id")]
public int Id { get; set; }
[Column("tipo_control")]
[Required]
public string TipoControl { get; set; } = nameof(TipoControlInventario.UNITARIO);
[Column("cantidad_global")]
public int CantidadGlobal { get; set; } = 1; // Cache/Total for LOTE. Always 1 for UNITARIO.
[Column("codigo")]
[Required(ErrorMessage = "El código es obligatorio")]
[StringLength(50, ErrorMessage = "El código no puede exceder los 50 caracteres")]
public string Codigo { get; set; } = string.Empty;
[Column("nombre")]
[Required(ErrorMessage = "El nombre es obligatorio")]
[StringLength(100, ErrorMessage = "El nombre no puede exceder los 100 caracteres")]
public string Nombre { get; set; } = string.Empty;
[Column("descripcion")]
[StringLength(500, ErrorMessage = "La descripción no puede exceder los 500 caracteres")]
public string? Descripcion { get; set; }
[Column("marca")]
[StringLength(100)]
public string? Marca { get; set; }
[Column("modelo")]
[StringLength(100)]
public string? Modelo { get; set; }
[Column("numero_serie")]
[StringLength(100)]
public string? NumeroSerie { get; set; }
[Column("precio")]
[Range(0, 99999999.99)]
public decimal Precio { get; set; } = 0;
[Column("fecha_adquisicion")]
public DateOnly? FechaAdquisicion { get; set; }
[Column("imagen_url")]
public string? ImagenUrl { get; set; }
// Foreign Keys
[Column("categoria_id")]
public int CategoriaId { get; set; }
[Column("estado_id")]
public int EstadoId { get; set; }
[Column("ubicacion_id")]
public int UbicacionId { get; set; }
// Audit & Control
[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("CategoriaId")]
public virtual Categoria? Categoria { get; set; }
[ForeignKey("EstadoId")]
public virtual EstadoArticulo? Estado { get; set; }
[ForeignKey("UbicacionId")]
public virtual Ubicacion? Ubicacion { get; set; }
}