using System.ComponentModel.DataAnnotations; namespace Rs_system.Models.ViewModels; /// /// ViewModel for creating/editing offering records /// public class RegistroCultoViewModel { public long? Id { get; set; } [Required(ErrorMessage = "La fecha es requerida")] [Display(Name = "Fecha del Culto")] [DataType(DataType.Date)] public DateOnly Fecha { get; set; } = DateOnly.FromDateTime(DateTime.Today); [Display(Name = "Observaciones")] [StringLength(500, ErrorMessage = "Las observaciones no pueden exceder 500 caracteres")] public string? Observaciones { get; set; } public List Ofrendas { get; set; } = new(); // Calculated properties for display public decimal TotalOfrendas => Ofrendas?.Sum(o => o.Monto) ?? 0; public decimal TotalDescuentos => Ofrendas?.Sum(o => o.TotalDescuentos) ?? 0; public decimal MontoNeto => TotalOfrendas - TotalDescuentos; } /// /// ViewModel for an individual offering /// public class OfrendaItemViewModel { public long? Id { get; set; } [Required(ErrorMessage = "El monto es requerido")] [Display(Name = "Monto")] [Range(0.01, 999999.99, ErrorMessage = "El monto debe ser mayor a 0")] [DataType(DataType.Currency)] public decimal Monto { get; set; } [Required(ErrorMessage = "El concepto es requerido")] [Display(Name = "Concepto")] [StringLength(200, ErrorMessage = "El concepto no puede exceder 200 caracteres")] public string Concepto { get; set; } = string.Empty; public List Descuentos { get; set; } = new(); // Calculated properties public decimal TotalDescuentos => Descuentos?.Sum(d => d.Monto) ?? 0; public decimal MontoNeto => Monto - TotalDescuentos; } /// /// ViewModel for a deduction from an offering /// public class DescuentoItemViewModel { public long? Id { get; set; } [Required(ErrorMessage = "El monto es requerido")] [Display(Name = "Monto")] [Range(0.01, 999999.99, ErrorMessage = "El monto debe ser mayor a 0")] [DataType(DataType.Currency)] public decimal Monto { get; set; } [Required(ErrorMessage = "El concepto es requerido")] [Display(Name = "Concepto")] [StringLength(200, ErrorMessage = "El concepto no puede exceder 200 caracteres")] public string Concepto { get; set; } = string.Empty; }