using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ODCWeb.Models { public class Material { [Key] public int MaterialId { get; set; } [Required] public string Name { get; set; } public int? TaskId { get; set; } public string? Unit { get; set; } [IntegerValidator] [Display(Name = "Planned Quantity")] public double Qty { get; set; } // NEW PROPERTIES - Material Consumption Tracking [IntegerValidator] [Display(Name = "Actual Quantity Used")] public double? Actual_Qty { get; set; } [Display(Name = "Construction Sheet Reference")] public int? SubtaskId { get; set; } public DateTime? ActualQtyRecordedDate { get; set; } public string? RecordedBy { get; set; } [Display(Name = "ODCProject")] public int ODCProjectId { get; set; } [ForeignKey("ODCProjectId")] [ValidateNever] public ODCProject ODCProject { get; set; } public int? FloorId { get; set; } public int? ActionId { get; set; } [Display(Name = "Unit Cost")] [IntegerValidator] public double? Unit_Cost { get; set; } // Navigation property [ForeignKey("SubtaskId")] [ValidateNever] public Subtask? Subtask { get; set; } // Computed properties [NotMapped] public double? QuantityVariance => Actual_Qty.HasValue ? Actual_Qty - Qty : null; [NotMapped] public double? CostVariance => QuantityVariance.HasValue && Unit_Cost.HasValue ? QuantityVariance * Unit_Cost : null; [NotMapped] public double? ActualCost => Actual_Qty.HasValue && Unit_Cost.HasValue ? Actual_Qty * Unit_Cost : null; } }